Co-authored-by: Julien Robert <julien@rbrt.fr>
This commit is contained in:
parent
a2abf1a442
commit
2a32f4287d
@ -42,9 +42,10 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||
|
||||
* (deps) [#19810](https://github.com/cosmos/cosmos-sdk/pull/19810) Upgrade SDK version to due prometheus breaking change.
|
||||
* (deps) [#19810](https://github.com/cosmos/cosmos-sdk/pull/19810) Bump `cosmossdk.io/store` to v1.1.0.
|
||||
* [#20083](https://github.com/cosmos/cosmos-sdk/pull/20083) Integrate latest version of cosmos-proto and improve version filtering.
|
||||
* [#19618](https://github.com/cosmos/cosmos-sdk/pull/19618) Marshal enum as string in queries.
|
||||
* [#19060](https://github.com/cosmos/cosmos-sdk/pull/19060) Use client context from root (or enhanced) command in autocli commands.
|
||||
* Note, the given command must have a `client.Context` in its context.
|
||||
* Note, the given command must have a `client.Context` in its context.
|
||||
* [#19216](https://github.com/cosmos/cosmos-sdk/pull/19216) Do not overwrite TxConfig, use directly the one provided in context. TxConfig should always be set in the `client.Context` in `root.go` of an app.
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@ -114,7 +114,7 @@ err := autoCliOpts.EnhanceRootCommand(rootCmd)
|
||||
## Signing
|
||||
|
||||
`autocli` supports signing transactions with the keyring.
|
||||
The [`cosmos.msg.v1.signer` protobuf annotation](https://github.com/cosmos/cosmos-sdk/blob/9dd34510e27376005e7e7ff3628eab9dbc8ad6dc/docs/build/building-modules/05-protobuf-annotations.md#L9) defines the signer field of the message.
|
||||
The [`cosmos.msg.v1.signer` protobuf annotation](https://docs.cosmos.network/main/build/building-modules/protobuf-annotations) defines the signer field of the message.
|
||||
This field is automatically filled when using the `--from` flag or defining the signer as a positional argument.
|
||||
|
||||
:::warning
|
||||
@ -194,6 +194,19 @@ https://github.com/cosmos/cosmos-sdk/blob/fa4d87ef7e6d87aaccc94c337ffd2fe90fcb7a
|
||||
|
||||
If not set to true, `AutoCLI` will not generate commands for the module if there are already commands registered for the module (when `GetTxCmd()` or `GetTxCmd()` are defined).
|
||||
|
||||
### Skip a command
|
||||
|
||||
AutoCLI automatically skips unsupported commands when [`cosmos_proto.method_added_in` protobuf annotation](https://docs.cosmos.network/main/build/building-modules/protobuf-annotations) is present.
|
||||
|
||||
Additionally, a command can be manually skipped using the `autocliv1.RpcCommandOptions`:
|
||||
|
||||
```go
|
||||
*autocliv1.RpcCommandOptions{
|
||||
RpcMethod: "Params", // The name of the gRPC service
|
||||
Skip: true,
|
||||
}
|
||||
```
|
||||
|
||||
### Use AutoCLI for non module commands
|
||||
|
||||
It is possible to use `AutoCLI` for non module commands. The trick is still to implement the `appmodule.Module` interface and append it to the `appOptions.ModuleOptions` map.
|
||||
|
||||
@ -32,11 +32,6 @@ func (b *Builder) buildMethodCommandCommon(descriptor protoreflect.MethodDescrip
|
||||
short = fmt.Sprintf("Execute the %s RPC method", descriptor.Name())
|
||||
}
|
||||
|
||||
long := options.Long
|
||||
if long == "" {
|
||||
long = util.DescriptorDocs(descriptor)
|
||||
}
|
||||
|
||||
inputDesc := descriptor.Input()
|
||||
inputType := util.ResolveMessageType(b.TypeResolver, inputDesc)
|
||||
|
||||
@ -48,7 +43,7 @@ func (b *Builder) buildMethodCommandCommon(descriptor protoreflect.MethodDescrip
|
||||
cmd := &cobra.Command{
|
||||
SilenceUsage: false,
|
||||
Use: use,
|
||||
Long: long,
|
||||
Long: options.Long,
|
||||
Short: short,
|
||||
Example: options.Example,
|
||||
Aliases: options.Alias,
|
||||
|
||||
@ -307,10 +307,6 @@ func (b *Builder) addFieldFlag(ctx context.Context, flagSet *pflag.FlagSet, fiel
|
||||
}
|
||||
|
||||
usage := opts.Usage
|
||||
if usage == "" {
|
||||
usage = util.DescriptorDocs(field)
|
||||
}
|
||||
|
||||
shorthand := opts.Shorthand
|
||||
defaultValue := opts.DefaultValue
|
||||
|
||||
|
||||
@ -83,7 +83,7 @@ func (b *Builder) AddMsgServiceCommands(cmd *cobra.Command, cmdDescriptor *autoc
|
||||
continue
|
||||
}
|
||||
|
||||
if !util.IsSupportedVersion(util.DescriptorDocs(methodDescriptor)) {
|
||||
if !util.IsSupportedVersion(methodDescriptor) {
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
@ -85,7 +85,7 @@ func (b *Builder) AddQueryServiceCommands(cmd *cobra.Command, cmdDescriptor *aut
|
||||
continue
|
||||
}
|
||||
|
||||
if !util.IsSupportedVersion(util.DescriptorDocs(methodDescriptor)) {
|
||||
if !util.IsSupportedVersion(methodDescriptor) {
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
@ -4,16 +4,30 @@ deps:
|
||||
- remote: buf.build
|
||||
owner: cosmos
|
||||
repository: cosmos-proto
|
||||
commit: 1935555c206d4afb9e94615dfd0fad31
|
||||
commit: 04467658e59e44bbb22fe568206e1f70
|
||||
digest: shake256:73a640bd60e0c523b0f8237ff34eab67c45a38b64bbbde1d80224819d272dbf316ac183526bd245f994af6608b025f5130483d0133c5edd385531326b5990466
|
||||
- remote: buf.build
|
||||
owner: cosmos
|
||||
repository: cosmos-sdk
|
||||
commit: b7797ff7f3814399b0c5d52e1b8227ed
|
||||
commit: 05419252bcc241ea8023acf1ed4cadc5
|
||||
digest: shake256:1e54a48c19a8b59d35e0a7efa76402939f515f2d8005df099856f24c37c20a52800308f025abb8cffcd014d437b49707388aaca4865d9d063d8f25d5d4eb77d5
|
||||
- remote: buf.build
|
||||
owner: cosmos
|
||||
repository: gogo-proto
|
||||
commit: 6652e3443c3b4504bb3bf82e73a7e409
|
||||
commit: 88ef6483f90f478fb938c37dde52ece3
|
||||
digest: shake256:89c45df2aa11e0cff97b0d695436713db3d993d76792e9f8dc1ae90e6ab9a9bec55503d48ceedd6b86069ab07d3041b32001b2bfe0227fa725dd515ff381e5ba
|
||||
- remote: buf.build
|
||||
owner: googleapis
|
||||
repository: googleapis
|
||||
commit: 62f35d8aed1149c291d606d958a7ce32
|
||||
commit: 7e6f6e774e29406da95bd61cdcdbc8bc
|
||||
digest: shake256:fe43dd2265ea0c07d76bd925eeba612667cf4c948d2ce53d6e367e1b4b3cb5fa69a51e6acb1a6a50d32f894f054a35e6c0406f6808a483f2752e10c866ffbf73
|
||||
- remote: buf.build
|
||||
owner: protocolbuffers
|
||||
repository: wellknowntypes
|
||||
commit: 657250e6a39648cbb169d079a60bd9ba
|
||||
digest: shake256:00de25001b8dd2e29d85fc4bcc3ede7aed886d76d67f5e0f7a9b320b90f871d3eb73507d50818d823a0512f3f8db77a11c043685528403e31ff3fef18323a9fb
|
||||
- remote: buf.build
|
||||
owner: tendermint
|
||||
repository: tendermint
|
||||
commit: 33ed361a90514289beabf3189e1d7665
|
||||
digest: shake256:038267e06294714fd883610626554b04a127b576b4e253befb4206cb72d5d3c1eeccacd4b9ec8e3fb891f7c14e1cb0f770c077d2989638995b0a61c85afedb1d
|
||||
|
||||
@ -11,10 +11,15 @@ import "testpb/query.proto";
|
||||
|
||||
service Msg {
|
||||
// Send a request and returns the request as a response.
|
||||
rpc Send(MsgRequest) returns (MsgResponse);
|
||||
rpc Send(MsgRequest) returns (MsgResponse) {
|
||||
option (cosmos_proto.method_added_in) = "cosmos-sdk v0.50.0";
|
||||
};
|
||||
|
||||
rpc Clawback(MsgClawbackRequest) returns (MsgClawbackResponse) {
|
||||
option (cosmos_proto.method_added_in) = "cosmos-sdk v0.51.0";
|
||||
}
|
||||
}
|
||||
|
||||
// MsgRequest is a sample request message
|
||||
message MsgRequest {
|
||||
// u32 is an uint32
|
||||
uint32 u32 = 1;
|
||||
@ -51,3 +56,7 @@ message MsgRequest {
|
||||
message MsgResponse {
|
||||
MsgRequest request = 1;
|
||||
}
|
||||
|
||||
message MsgClawbackRequest {}
|
||||
|
||||
message MsgClawbackResponse {}
|
||||
File diff suppressed because it is too large
Load Diff
@ -19,7 +19,8 @@ import (
|
||||
const _ = grpc.SupportPackageIsVersion7
|
||||
|
||||
const (
|
||||
Msg_Send_FullMethodName = "/testpb.Msg/Send"
|
||||
Msg_Send_FullMethodName = "/testpb.Msg/Send"
|
||||
Msg_Clawback_FullMethodName = "/testpb.Msg/Clawback"
|
||||
)
|
||||
|
||||
// MsgClient is the client API for Msg service.
|
||||
@ -28,6 +29,7 @@ const (
|
||||
type MsgClient interface {
|
||||
// Send a request and returns the request as a response.
|
||||
Send(ctx context.Context, in *MsgRequest, opts ...grpc.CallOption) (*MsgResponse, error)
|
||||
Clawback(ctx context.Context, in *MsgClawbackRequest, opts ...grpc.CallOption) (*MsgClawbackResponse, error)
|
||||
}
|
||||
|
||||
type msgClient struct {
|
||||
@ -47,12 +49,22 @@ func (c *msgClient) Send(ctx context.Context, in *MsgRequest, opts ...grpc.CallO
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *msgClient) Clawback(ctx context.Context, in *MsgClawbackRequest, opts ...grpc.CallOption) (*MsgClawbackResponse, error) {
|
||||
out := new(MsgClawbackResponse)
|
||||
err := c.cc.Invoke(ctx, Msg_Clawback_FullMethodName, in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// MsgServer is the server API for Msg service.
|
||||
// All implementations must embed UnimplementedMsgServer
|
||||
// for forward compatibility
|
||||
type MsgServer interface {
|
||||
// Send a request and returns the request as a response.
|
||||
Send(context.Context, *MsgRequest) (*MsgResponse, error)
|
||||
Clawback(context.Context, *MsgClawbackRequest) (*MsgClawbackResponse, error)
|
||||
mustEmbedUnimplementedMsgServer()
|
||||
}
|
||||
|
||||
@ -63,6 +75,9 @@ type UnimplementedMsgServer struct {
|
||||
func (UnimplementedMsgServer) Send(context.Context, *MsgRequest) (*MsgResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method Send not implemented")
|
||||
}
|
||||
func (UnimplementedMsgServer) Clawback(context.Context, *MsgClawbackRequest) (*MsgClawbackResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method Clawback not implemented")
|
||||
}
|
||||
func (UnimplementedMsgServer) mustEmbedUnimplementedMsgServer() {}
|
||||
|
||||
// UnsafeMsgServer may be embedded to opt out of forward compatibility for this service.
|
||||
@ -94,6 +109,24 @@ func _Msg_Send_Handler(srv interface{}, ctx context.Context, dec func(interface{
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Msg_Clawback_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(MsgClawbackRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(MsgServer).Clawback(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: Msg_Clawback_FullMethodName,
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(MsgServer).Clawback(ctx, req.(*MsgClawbackRequest))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
// Msg_ServiceDesc is the grpc.ServiceDesc for Msg service.
|
||||
// It's only intended for direct use with grpc.RegisterService,
|
||||
// and not to be introspected or modified (even as a copy)
|
||||
@ -105,6 +138,10 @@ var Msg_ServiceDesc = grpc.ServiceDesc{
|
||||
MethodName: "Send",
|
||||
Handler: _Msg_Send_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "Clawback",
|
||||
Handler: _Msg_Clawback_Handler,
|
||||
},
|
||||
},
|
||||
Streams: []grpc.StreamDesc{},
|
||||
Metadata: "testpb/msg.proto",
|
||||
|
||||
@ -5316,174 +5316,8 @@ var file_testpb_query_proto_rawDesc = []byte{
|
||||
0x65, 0x73, 0x74, 0x70, 0x62, 0xa2, 0x02, 0x03, 0x54, 0x58, 0x58, 0xaa, 0x02, 0x06, 0x54, 0x65,
|
||||
0x73, 0x74, 0x70, 0x62, 0xca, 0x02, 0x06, 0x54, 0x65, 0x73, 0x74, 0x70, 0x62, 0xe2, 0x02, 0x12,
|
||||
0x54, 0x65, 0x73, 0x74, 0x70, 0x62, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
|
||||
0x74, 0x61, 0xea, 0x02, 0x06, 0x54, 0x65, 0x73, 0x74, 0x70, 0x62, 0x4a, 0xe1, 0x14, 0x0a, 0x06,
|
||||
0x12, 0x04, 0x00, 0x00, 0x45, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12,
|
||||
0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x0f, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00,
|
||||
0x12, 0x03, 0x04, 0x00, 0x29, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x28,
|
||||
0x0a, 0x09, 0x0a, 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x23, 0x0a, 0x09, 0x0a, 0x02, 0x03,
|
||||
0x03, 0x12, 0x03, 0x07, 0x00, 0x34, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x04, 0x12, 0x03, 0x08, 0x00,
|
||||
0x28, 0x0a, 0x0a, 0x0a, 0x02, 0x06, 0x00, 0x12, 0x04, 0x0a, 0x00, 0x0d, 0x01, 0x0a, 0x0a, 0x0a,
|
||||
0x03, 0x06, 0x00, 0x01, 0x12, 0x03, 0x0a, 0x08, 0x0d, 0x0a, 0x37, 0x0a, 0x04, 0x06, 0x00, 0x02,
|
||||
0x00, 0x12, 0x03, 0x0c, 0x02, 0x2f, 0x1a, 0x2a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x65,
|
||||
0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0c, 0x06, 0x0a,
|
||||
0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x0c, 0x0b, 0x16, 0x0a, 0x0c,
|
||||
0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0c, 0x21, 0x2d, 0x0a, 0x0a, 0x0a, 0x02,
|
||||
0x04, 0x00, 0x12, 0x04, 0x0f, 0x00, 0x12, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12,
|
||||
0x03, 0x0f, 0x08, 0x10, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x10, 0x02,
|
||||
0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x10, 0x02, 0x08, 0x0a,
|
||||
0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x10, 0x09, 0x0c, 0x0a, 0x0c, 0x0a,
|
||||
0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x10, 0x0f, 0x10, 0x0a, 0x0b, 0x0a, 0x04, 0x04,
|
||||
0x00, 0x02, 0x01, 0x12, 0x03, 0x11, 0x02, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01,
|
||||
0x05, 0x12, 0x03, 0x11, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12,
|
||||
0x03, 0x11, 0x09, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x11,
|
||||
0x0f, 0x10, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x14, 0x00, 0x39, 0x01, 0x0a, 0x0a,
|
||||
0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x14, 0x08, 0x13, 0x0a, 0x1f, 0x0a, 0x04, 0x04, 0x01,
|
||||
0x02, 0x00, 0x12, 0x03, 0x16, 0x02, 0x37, 0x1a, 0x12, 0x20, 0x75, 0x33, 0x32, 0x20, 0x69, 0x73,
|
||||
0x20, 0x61, 0x6e, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04,
|
||||
0x01, 0x02, 0x00, 0x05, 0x12, 0x03, 0x16, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02,
|
||||
0x00, 0x01, 0x12, 0x03, 0x16, 0x28, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03,
|
||||
0x12, 0x03, 0x16, 0x35, 0x36, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x17,
|
||||
0x02, 0x37, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x05, 0x12, 0x03, 0x17, 0x02, 0x08,
|
||||
0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x17, 0x28, 0x2b, 0x0a, 0x0c,
|
||||
0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x17, 0x35, 0x36, 0x0a, 0x0b, 0x0a, 0x04,
|
||||
0x04, 0x01, 0x02, 0x02, 0x12, 0x03, 0x18, 0x02, 0x37, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02,
|
||||
0x02, 0x05, 0x12, 0x03, 0x18, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x01,
|
||||
0x12, 0x03, 0x18, 0x28, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x03, 0x12, 0x03,
|
||||
0x18, 0x35, 0x36, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x03, 0x12, 0x03, 0x19, 0x02, 0x37,
|
||||
0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x05, 0x12, 0x03, 0x19, 0x02, 0x07, 0x0a, 0x0c,
|
||||
0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x01, 0x12, 0x03, 0x19, 0x28, 0x2a, 0x0a, 0x0c, 0x0a, 0x05,
|
||||
0x04, 0x01, 0x02, 0x03, 0x03, 0x12, 0x03, 0x19, 0x35, 0x36, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01,
|
||||
0x02, 0x04, 0x12, 0x03, 0x1a, 0x02, 0x37, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x06,
|
||||
0x12, 0x03, 0x1a, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x01, 0x12, 0x03,
|
||||
0x1a, 0x28, 0x31, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x03, 0x12, 0x03, 0x1a, 0x35,
|
||||
0x36, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x05, 0x12, 0x03, 0x1b, 0x02, 0x37, 0x0a, 0x0c,
|
||||
0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x06, 0x12, 0x03, 0x1b, 0x02, 0x1a, 0x0a, 0x0c, 0x0a, 0x05,
|
||||
0x04, 0x01, 0x02, 0x05, 0x01, 0x12, 0x03, 0x1b, 0x28, 0x30, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01,
|
||||
0x02, 0x05, 0x03, 0x12, 0x03, 0x1b, 0x35, 0x36, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x06,
|
||||
0x12, 0x03, 0x1c, 0x02, 0x37, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x05, 0x12, 0x03,
|
||||
0x1c, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x01, 0x12, 0x03, 0x1c, 0x28,
|
||||
0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x03, 0x12, 0x03, 0x1c, 0x35, 0x36, 0x0a,
|
||||
0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x07, 0x12, 0x03, 0x1d, 0x02, 0x38, 0x0a, 0x0c, 0x0a, 0x05,
|
||||
0x04, 0x01, 0x02, 0x07, 0x05, 0x12, 0x03, 0x1d, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01,
|
||||
0x02, 0x07, 0x01, 0x12, 0x03, 0x1d, 0x28, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x07,
|
||||
0x03, 0x12, 0x03, 0x1d, 0x35, 0x37, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x08, 0x12, 0x03,
|
||||
0x1e, 0x02, 0x38, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x08, 0x05, 0x12, 0x03, 0x1e, 0x02,
|
||||
0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x08, 0x01, 0x12, 0x03, 0x1e, 0x28, 0x2e, 0x0a,
|
||||
0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x08, 0x03, 0x12, 0x03, 0x1e, 0x35, 0x37, 0x0a, 0x0b, 0x0a,
|
||||
0x04, 0x04, 0x01, 0x02, 0x09, 0x12, 0x03, 0x1f, 0x02, 0x38, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01,
|
||||
0x02, 0x09, 0x06, 0x12, 0x03, 0x1f, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x09,
|
||||
0x01, 0x12, 0x03, 0x1f, 0x28, 0x2f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x09, 0x03, 0x12,
|
||||
0x03, 0x1f, 0x35, 0x37, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x0a, 0x12, 0x03, 0x20, 0x02,
|
||||
0x38, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x0a, 0x06, 0x12, 0x03, 0x20, 0x02, 0x0a, 0x0a,
|
||||
0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x0a, 0x01, 0x12, 0x03, 0x20, 0x28, 0x31, 0x0a, 0x0c, 0x0a,
|
||||
0x05, 0x04, 0x01, 0x02, 0x0a, 0x03, 0x12, 0x03, 0x20, 0x35, 0x37, 0x0a, 0x0b, 0x0a, 0x04, 0x04,
|
||||
0x01, 0x02, 0x0b, 0x12, 0x03, 0x21, 0x02, 0x38, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x0b,
|
||||
0x06, 0x12, 0x03, 0x21, 0x02, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x0b, 0x01, 0x12,
|
||||
0x03, 0x21, 0x28, 0x2e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x0b, 0x03, 0x12, 0x03, 0x21,
|
||||
0x35, 0x37, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x0c, 0x12, 0x03, 0x22, 0x02, 0x69, 0x0a,
|
||||
0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x0c, 0x05, 0x12, 0x03, 0x22, 0x02, 0x08, 0x0a, 0x0c, 0x0a,
|
||||
0x05, 0x04, 0x01, 0x02, 0x0c, 0x01, 0x12, 0x03, 0x22, 0x28, 0x32, 0x0a, 0x0c, 0x0a, 0x05, 0x04,
|
||||
0x01, 0x02, 0x0c, 0x03, 0x12, 0x03, 0x22, 0x35, 0x37, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02,
|
||||
0x0c, 0x08, 0x12, 0x03, 0x22, 0x38, 0x68, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x01, 0x02, 0x0c, 0x08,
|
||||
0xca, 0xd6, 0x05, 0x12, 0x03, 0x22, 0x39, 0x67, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x0d,
|
||||
0x12, 0x03, 0x23, 0x02, 0x38, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x0d, 0x06, 0x12, 0x03,
|
||||
0x23, 0x02, 0x27, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x0d, 0x01, 0x12, 0x03, 0x23, 0x28,
|
||||
0x2c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x0d, 0x03, 0x12, 0x03, 0x23, 0x35, 0x37, 0x0a,
|
||||
0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x0e, 0x12, 0x03, 0x24, 0x02, 0x38, 0x0a, 0x0c, 0x0a, 0x05,
|
||||
0x04, 0x01, 0x02, 0x0e, 0x04, 0x12, 0x03, 0x24, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01,
|
||||
0x02, 0x0e, 0x05, 0x12, 0x03, 0x24, 0x0b, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x0e,
|
||||
0x01, 0x12, 0x03, 0x24, 0x28, 0x2d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x0e, 0x03, 0x12,
|
||||
0x03, 0x24, 0x35, 0x37, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x0f, 0x12, 0x03, 0x25, 0x02,
|
||||
0x38, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x0f, 0x04, 0x12, 0x03, 0x25, 0x02, 0x0a, 0x0a,
|
||||
0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x0f, 0x05, 0x12, 0x03, 0x25, 0x0b, 0x11, 0x0a, 0x0c, 0x0a,
|
||||
0x05, 0x04, 0x01, 0x02, 0x0f, 0x01, 0x12, 0x03, 0x25, 0x28, 0x2d, 0x0a, 0x0c, 0x0a, 0x05, 0x04,
|
||||
0x01, 0x02, 0x0f, 0x03, 0x12, 0x03, 0x25, 0x35, 0x37, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02,
|
||||
0x10, 0x12, 0x03, 0x26, 0x02, 0x38, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x10, 0x04, 0x12,
|
||||
0x03, 0x26, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x10, 0x05, 0x12, 0x03, 0x26,
|
||||
0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x10, 0x01, 0x12, 0x03, 0x26, 0x28, 0x2f,
|
||||
0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x10, 0x03, 0x12, 0x03, 0x26, 0x35, 0x37, 0x0a, 0x0b,
|
||||
0x0a, 0x04, 0x04, 0x01, 0x02, 0x11, 0x12, 0x03, 0x27, 0x02, 0x38, 0x0a, 0x0c, 0x0a, 0x05, 0x04,
|
||||
0x01, 0x02, 0x11, 0x04, 0x12, 0x03, 0x27, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02,
|
||||
0x11, 0x06, 0x12, 0x03, 0x27, 0x0b, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x11, 0x01,
|
||||
0x12, 0x03, 0x27, 0x28, 0x2d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x11, 0x03, 0x12, 0x03,
|
||||
0x27, 0x35, 0x37, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x12, 0x12, 0x03, 0x28, 0x02, 0x38,
|
||||
0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x12, 0x04, 0x12, 0x03, 0x28, 0x02, 0x0a, 0x0a, 0x0c,
|
||||
0x0a, 0x05, 0x04, 0x01, 0x02, 0x12, 0x06, 0x12, 0x03, 0x28, 0x0b, 0x23, 0x0a, 0x0c, 0x0a, 0x05,
|
||||
0x04, 0x01, 0x02, 0x12, 0x01, 0x12, 0x03, 0x28, 0x24, 0x2d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01,
|
||||
0x02, 0x12, 0x03, 0x12, 0x03, 0x28, 0x35, 0x37, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x13,
|
||||
0x12, 0x03, 0x29, 0x02, 0x38, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x13, 0x04, 0x12, 0x03,
|
||||
0x29, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x13, 0x06, 0x12, 0x03, 0x29, 0x0b,
|
||||
0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x13, 0x01, 0x12, 0x03, 0x29, 0x24, 0x31, 0x0a,
|
||||
0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x13, 0x03, 0x12, 0x03, 0x29, 0x35, 0x37, 0x0a, 0x0b, 0x0a,
|
||||
0x04, 0x04, 0x01, 0x02, 0x14, 0x12, 0x03, 0x2b, 0x02, 0x3d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01,
|
||||
0x02, 0x14, 0x05, 0x12, 0x03, 0x2b, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x14,
|
||||
0x01, 0x12, 0x03, 0x2b, 0x0b, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x14, 0x03, 0x12,
|
||||
0x03, 0x2b, 0x3a, 0x3c, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x15, 0x12, 0x03, 0x2c, 0x02,
|
||||
0x3d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x15, 0x05, 0x12, 0x03, 0x2c, 0x02, 0x08, 0x0a,
|
||||
0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x15, 0x01, 0x12, 0x03, 0x2c, 0x0b, 0x16, 0x0a, 0x0c, 0x0a,
|
||||
0x05, 0x04, 0x01, 0x02, 0x15, 0x03, 0x12, 0x03, 0x2c, 0x3a, 0x3c, 0x0a, 0x0b, 0x0a, 0x04, 0x04,
|
||||
0x01, 0x02, 0x16, 0x12, 0x03, 0x2d, 0x02, 0x3d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x16,
|
||||
0x04, 0x12, 0x03, 0x2d, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x16, 0x06, 0x12,
|
||||
0x03, 0x2d, 0x0b, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x16, 0x01, 0x12, 0x03, 0x2d,
|
||||
0x24, 0x37, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x16, 0x03, 0x12, 0x03, 0x2d, 0x3a, 0x3c,
|
||||
0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x17, 0x12, 0x03, 0x2f, 0x02, 0x48, 0x0a, 0x0c, 0x0a,
|
||||
0x05, 0x04, 0x01, 0x02, 0x17, 0x05, 0x12, 0x03, 0x2f, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04,
|
||||
0x01, 0x02, 0x17, 0x01, 0x12, 0x03, 0x2f, 0x28, 0x38, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02,
|
||||
0x17, 0x03, 0x12, 0x03, 0x2f, 0x45, 0x47, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x18, 0x12,
|
||||
0x03, 0x30, 0x02, 0x48, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x18, 0x05, 0x12, 0x03, 0x30,
|
||||
0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x18, 0x01, 0x12, 0x03, 0x30, 0x28, 0x42,
|
||||
0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x18, 0x03, 0x12, 0x03, 0x30, 0x45, 0x47, 0x0a, 0x0b,
|
||||
0x0a, 0x04, 0x04, 0x01, 0x02, 0x19, 0x12, 0x03, 0x31, 0x02, 0x48, 0x0a, 0x0c, 0x0a, 0x05, 0x04,
|
||||
0x01, 0x02, 0x19, 0x05, 0x12, 0x03, 0x31, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02,
|
||||
0x19, 0x01, 0x12, 0x03, 0x31, 0x28, 0x33, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x19, 0x03,
|
||||
0x12, 0x03, 0x31, 0x45, 0x47, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x1a, 0x12, 0x03, 0x32,
|
||||
0x02, 0x48, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x1a, 0x06, 0x12, 0x03, 0x32, 0x02, 0x15,
|
||||
0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x1a, 0x01, 0x12, 0x03, 0x32, 0x28, 0x39, 0x0a, 0x0c,
|
||||
0x0a, 0x05, 0x04, 0x01, 0x02, 0x1a, 0x03, 0x12, 0x03, 0x32, 0x45, 0x47, 0x0a, 0x0b, 0x0a, 0x04,
|
||||
0x04, 0x01, 0x02, 0x1b, 0x12, 0x03, 0x33, 0x02, 0x48, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02,
|
||||
0x1b, 0x06, 0x12, 0x03, 0x33, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x1b, 0x01,
|
||||
0x12, 0x03, 0x33, 0x28, 0x39, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x1b, 0x03, 0x12, 0x03,
|
||||
0x33, 0x45, 0x47, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x1c, 0x12, 0x03, 0x34, 0x02, 0x48,
|
||||
0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x1c, 0x06, 0x12, 0x03, 0x34, 0x02, 0x27, 0x0a, 0x0c,
|
||||
0x0a, 0x05, 0x04, 0x01, 0x02, 0x1c, 0x01, 0x12, 0x03, 0x34, 0x28, 0x37, 0x0a, 0x0c, 0x0a, 0x05,
|
||||
0x04, 0x01, 0x02, 0x1c, 0x03, 0x12, 0x03, 0x34, 0x45, 0x47, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01,
|
||||
0x02, 0x1d, 0x12, 0x03, 0x35, 0x02, 0x5c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x1d, 0x05,
|
||||
0x12, 0x03, 0x35, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x1d, 0x01, 0x12, 0x03,
|
||||
0x35, 0x09, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x1d, 0x03, 0x12, 0x03, 0x35, 0x1f,
|
||||
0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x1d, 0x08, 0x12, 0x03, 0x35, 0x22, 0x5b, 0x0a,
|
||||
0x0f, 0x0a, 0x08, 0x04, 0x01, 0x02, 0x1d, 0x08, 0xca, 0xd6, 0x05, 0x12, 0x03, 0x35, 0x23, 0x5a,
|
||||
0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x1e, 0x12, 0x03, 0x36, 0x02, 0x5c, 0x0a, 0x0c, 0x0a,
|
||||
0x05, 0x04, 0x01, 0x02, 0x1e, 0x05, 0x12, 0x03, 0x36, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04,
|
||||
0x01, 0x02, 0x1e, 0x01, 0x12, 0x03, 0x36, 0x09, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02,
|
||||
0x1e, 0x03, 0x12, 0x03, 0x36, 0x1f, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x1e, 0x08,
|
||||
0x12, 0x03, 0x36, 0x22, 0x5b, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x01, 0x02, 0x1e, 0x08, 0xca, 0xd6,
|
||||
0x05, 0x12, 0x03, 0x36, 0x23, 0x5a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x1f, 0x12, 0x03,
|
||||
0x38, 0x02, 0x2f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x1f, 0x04, 0x12, 0x03, 0x38, 0x02,
|
||||
0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x1f, 0x06, 0x12, 0x03, 0x38, 0x0b, 0x23, 0x0a,
|
||||
0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x1f, 0x01, 0x12, 0x03, 0x38, 0x24, 0x29, 0x0a, 0x0c, 0x0a,
|
||||
0x05, 0x04, 0x01, 0x02, 0x1f, 0x03, 0x12, 0x03, 0x38, 0x2c, 0x2e, 0x0a, 0x0a, 0x0a, 0x02, 0x05,
|
||||
0x00, 0x12, 0x04, 0x3b, 0x00, 0x41, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, 0x12, 0x03,
|
||||
0x3b, 0x05, 0x09, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x3c, 0x02, 0x17,
|
||||
0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x3c, 0x02, 0x12, 0x0a, 0x0c,
|
||||
0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x3c, 0x15, 0x16, 0x0a, 0x0b, 0x0a, 0x04,
|
||||
0x05, 0x00, 0x02, 0x01, 0x12, 0x03, 0x3d, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02,
|
||||
0x01, 0x01, 0x12, 0x03, 0x3d, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x02,
|
||||
0x12, 0x03, 0x3d, 0x15, 0x16, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x02, 0x12, 0x03, 0x3e,
|
||||
0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x3e, 0x02, 0x0a,
|
||||
0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x3e, 0x15, 0x16, 0x0a, 0x0b,
|
||||
0x0a, 0x04, 0x05, 0x00, 0x02, 0x03, 0x12, 0x03, 0x3f, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x05,
|
||||
0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x3f, 0x02, 0x0b, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02,
|
||||
0x03, 0x02, 0x12, 0x03, 0x3f, 0x15, 0x16, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x04, 0x12,
|
||||
0x03, 0x40, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x40,
|
||||
0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x04, 0x02, 0x12, 0x03, 0x40, 0x15, 0x17,
|
||||
0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x43, 0x00, 0x45, 0x01, 0x0a, 0x0a, 0x0a, 0x03,
|
||||
0x04, 0x02, 0x01, 0x12, 0x03, 0x43, 0x08, 0x14, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00,
|
||||
0x12, 0x03, 0x44, 0x02, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x06, 0x12, 0x03,
|
||||
0x44, 0x02, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x44, 0x0e,
|
||||
0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x44, 0x18, 0x19, 0x62,
|
||||
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x74, 0x61, 0xea, 0x02, 0x06, 0x54, 0x65, 0x73, 0x74, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
||||
@ -5,6 +5,8 @@ import (
|
||||
"runtime/debug"
|
||||
"strings"
|
||||
|
||||
cosmos_proto "github.com/cosmos/cosmos-proto"
|
||||
"google.golang.org/protobuf/proto"
|
||||
"google.golang.org/protobuf/reflect/protoreflect"
|
||||
"google.golang.org/protobuf/reflect/protoregistry"
|
||||
"google.golang.org/protobuf/types/dynamicpb"
|
||||
@ -22,11 +24,6 @@ func DescriptorKebabName(descriptor protoreflect.Descriptor) string {
|
||||
return strcase.ToKebab(string(descriptor.Name()))
|
||||
}
|
||||
|
||||
// DescriptorDocs returns the leading comments of the descriptor.
|
||||
func DescriptorDocs(descriptor protoreflect.Descriptor) string {
|
||||
return descriptor.ParentFile().SourceLocations().ByDescriptor(descriptor).LeadingComments
|
||||
}
|
||||
|
||||
func ResolveMessageType(resolver protoregistry.MessageTypeResolver, descriptor protoreflect.MessageDescriptor) protoreflect.MessageType {
|
||||
typ, err := resolver.FindMessageByName(descriptor.FullName())
|
||||
if err == nil {
|
||||
@ -38,19 +35,23 @@ func ResolveMessageType(resolver protoregistry.MessageTypeResolver, descriptor p
|
||||
|
||||
// IsSupportedVersion is used to determine in which version of a module / sdk a rpc was introduced.
|
||||
// It returns false if the rpc has comment for an higher version than the current one.
|
||||
func IsSupportedVersion(input string) bool {
|
||||
return isSupportedVersion(input, buildInfo)
|
||||
// It returns true if the method descriptor contains no annotation.
|
||||
func IsSupportedVersion(methodDesc protoreflect.MethodDescriptor) bool {
|
||||
return isSupportedVersion(methodDesc, buildInfo)
|
||||
}
|
||||
|
||||
// isSupportedVersion is used to determine in which version of a module / sdk a rpc was introduced.
|
||||
// It returns false if the rpc has comment for an higher version than the current one.
|
||||
// It returns true if the method descriptor contains no annotation.
|
||||
// It takes a buildInfo as argument to be able to test it.
|
||||
func isSupportedVersion(input string, buildInfo *debug.BuildInfo) bool {
|
||||
if input == "" || buildInfo == nil {
|
||||
func isSupportedVersion(methodDesc protoreflect.MethodDescriptor, buildInfo *debug.BuildInfo) bool {
|
||||
hasVersion := proto.HasExtension(methodDesc.Options(), cosmos_proto.E_MethodAddedIn)
|
||||
if !hasVersion || buildInfo == nil || len(buildInfo.Deps) == 0 {
|
||||
return true
|
||||
}
|
||||
|
||||
moduleName, version := parseSinceComment(input)
|
||||
version := proto.GetExtension(methodDesc.Options(), cosmos_proto.E_MethodAddedIn).(string)
|
||||
moduleName, version := parseVersion(version)
|
||||
if moduleName == "" || version == "" {
|
||||
return true // if no comment consider it's supported
|
||||
}
|
||||
@ -70,10 +71,10 @@ func isSupportedVersion(input string, buildInfo *debug.BuildInfo) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
var sinceCommentRegex = regexp.MustCompile(`\/\/\s*since: (\S+) (\S+)`)
|
||||
var sinceCommentRegex = regexp.MustCompile(`(\S+) (\S+)`)
|
||||
|
||||
// parseSinceComment parses the `// Since: cosmos-sdk v0.xx` comment on rpc.
|
||||
func parseSinceComment(input string) (string, string) {
|
||||
// parseVersion parses the `cosmos-sdk v0.xx` comment on rpc.
|
||||
func parseVersion(input string) (string, string) {
|
||||
var (
|
||||
moduleName string
|
||||
version string
|
||||
|
||||
@ -5,8 +5,9 @@ import (
|
||||
"testing"
|
||||
|
||||
"google.golang.org/protobuf/reflect/protoreflect"
|
||||
"google.golang.org/protobuf/reflect/protoregistry"
|
||||
|
||||
"cosmossdk.io/client/v2/internal/testpb"
|
||||
_ "cosmossdk.io/client/v2/internal/testpb"
|
||||
)
|
||||
|
||||
func TestIsSupportedVersion(t *testing.T) {
|
||||
@ -24,70 +25,40 @@ func TestIsSupportedVersion(t *testing.T) {
|
||||
}
|
||||
|
||||
cases := []struct {
|
||||
input string
|
||||
expected bool
|
||||
messageName string
|
||||
expected bool
|
||||
}{
|
||||
{
|
||||
input: "",
|
||||
expected: true,
|
||||
messageName: "testpb.Msg.Send",
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
input: "not a since comment",
|
||||
expected: true,
|
||||
messageName: "testpb.Query.Echo",
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
input: "// Since: cosmos-sdk v0.47",
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
input: "// since: Cosmos-SDK 0.50",
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
input: "// Since: cosmos-sdk v0.51",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
input: "// Since: cosmos-sdk v1.0.0",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
input: "// since: x/feegrant v0.1.0",
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
input: "// since: feegrant v0.0.1",
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
input: "// since: feegrant v0.1.0",
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
input: "// since: feegrant v0.1",
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
input: "// since: feegrant v0.1.1",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
input: "// since: feegrant v0.2.0",
|
||||
expected: false,
|
||||
messageName: "testpb.Msg.Clawback",
|
||||
expected: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.input, func(t *testing.T) {
|
||||
resp := isSupportedVersion(tc.input, mockBuildInfo)
|
||||
if resp != tc.expected {
|
||||
t.Errorf("expected %v, got %v", tc.expected, resp)
|
||||
t.Run(tc.messageName, func(t *testing.T) {
|
||||
desc, err := protoregistry.GlobalFiles.FindDescriptorByName(protoreflect.FullName(tc.messageName))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
methodDesc := desc.(protoreflect.MethodDescriptor)
|
||||
isSupported := isSupportedVersion(methodDesc, mockBuildInfo)
|
||||
if isSupported != tc.expected {
|
||||
t.Errorf("expected %v, got %v for %s", tc.expected, isSupported, methodDesc.FullName())
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseSinceComment(t *testing.T) {
|
||||
func TestParseVersion(t *testing.T) {
|
||||
cases := []struct {
|
||||
input string
|
||||
expectedModuleName string
|
||||
@ -99,52 +70,42 @@ func TestParseSinceComment(t *testing.T) {
|
||||
expectedVersion: "",
|
||||
},
|
||||
{
|
||||
input: "not a since comment",
|
||||
expectedModuleName: "",
|
||||
expectedVersion: "",
|
||||
},
|
||||
{
|
||||
input: "// Since: Cosmos SDK 0.50",
|
||||
input: "Cosmos SDK 0.50",
|
||||
expectedModuleName: "cosmos-sdk",
|
||||
expectedVersion: "v0.50",
|
||||
},
|
||||
{
|
||||
input: "// since: Cosmos SDK 0.50",
|
||||
input: "cosmos sdk 0.50",
|
||||
expectedModuleName: "cosmos-sdk",
|
||||
expectedVersion: "v0.50",
|
||||
},
|
||||
{
|
||||
input: "// since: cosmos sdk 0.50",
|
||||
input: "Cosmos-SDK 0.50",
|
||||
expectedModuleName: "cosmos-sdk",
|
||||
expectedVersion: "v0.50",
|
||||
},
|
||||
{
|
||||
input: "// since: Cosmos-SDK 0.50",
|
||||
input: "cosmos-sdk v0.50",
|
||||
expectedModuleName: "cosmos-sdk",
|
||||
expectedVersion: "v0.50",
|
||||
},
|
||||
{
|
||||
input: "// Since: cosmos-sdk v0.50",
|
||||
expectedModuleName: "cosmos-sdk",
|
||||
expectedVersion: "v0.50",
|
||||
},
|
||||
{
|
||||
input: "//since: cosmos-sdk v0.50.1",
|
||||
input: "cosmos-sdk v0.50.1",
|
||||
expectedModuleName: "cosmos-sdk",
|
||||
expectedVersion: "v0.50.1",
|
||||
},
|
||||
{
|
||||
input: "// since: cosmos-sdk 0.47.0-veronica",
|
||||
input: "cosmos-sdk 0.47.0-veronica",
|
||||
expectedModuleName: "cosmos-sdk",
|
||||
expectedVersion: "v0.47.0-veronica",
|
||||
},
|
||||
{
|
||||
input: "// Since: x/feegrant v0.1.0",
|
||||
input: "x/feegrant v0.1.0",
|
||||
expectedModuleName: "feegrant",
|
||||
expectedVersion: "v0.1.0",
|
||||
},
|
||||
{
|
||||
input: "// since: x/feegrant 0.1",
|
||||
input: "x/feegrant 0.1",
|
||||
expectedModuleName: "feegrant",
|
||||
expectedVersion: "v0.1",
|
||||
},
|
||||
@ -152,7 +113,7 @@ func TestParseSinceComment(t *testing.T) {
|
||||
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.input, func(t *testing.T) {
|
||||
moduleName, version := parseSinceComment(tc.input)
|
||||
moduleName, version := parseVersion(tc.input)
|
||||
if moduleName != tc.expectedModuleName {
|
||||
t.Errorf("expected module name %s, got %s", tc.expectedModuleName, moduleName)
|
||||
}
|
||||
@ -162,39 +123,3 @@ func TestParseSinceComment(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestDescriptorDocs(t *testing.T) {
|
||||
t.Skip() // TODO(@julienrbrt): Unskip when https://github.com/cosmos/cosmos-proto/pull/131 is finalized.
|
||||
|
||||
msg1 := &testpb.MsgRequest{}
|
||||
descriptor1 := msg1.ProtoReflect().Descriptor()
|
||||
|
||||
msg2 := testpb.MsgResponse{}
|
||||
descriptor2 := msg2.ProtoReflect().Descriptor()
|
||||
|
||||
cases := []struct {
|
||||
name string
|
||||
input protoreflect.Descriptor
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
name: "Test with leading comments",
|
||||
input: descriptor1,
|
||||
expected: "MsgRequest is a sample request message",
|
||||
},
|
||||
{
|
||||
name: "Test with no leading comments",
|
||||
input: descriptor2,
|
||||
expected: "",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
output := DescriptorDocs(tc.input)
|
||||
if output != tc.expected {
|
||||
t.Errorf("expected %s, got %s", tc.expected, output)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@ -52,7 +52,7 @@ Example of Int scalar:
|
||||
https://github.com/cosmos/cosmos-sdk/blob/e8f28bf5db18b8d6b7e0d94b542ce4cf48fed9d6/proto/cosmos/gov/v1/gov.proto#L137
|
||||
```
|
||||
|
||||
There are a few options for what can be provided as a scalar: cosmos.AddressString, cosmos.ValidatorAddressString, cosmos.ConsensusAddressString, cosmos.Int, cosmos.Dec.
|
||||
There are a few options for what can be provided as a scalar: `cosmos.AddressString`, `cosmos.ValidatorAddressString`, `cosmos.ConsensusAddressString`, `cosmos.Int`, `cosmos.Dec`.
|
||||
|
||||
## Implements_Interface
|
||||
|
||||
@ -62,9 +62,21 @@ Implement interface is used to provide information to client tooling like [teles
|
||||
option (cosmos_proto.implements_interface) = "cosmos.auth.v1beta1.AccountI";
|
||||
```
|
||||
|
||||
## Method,Field,Message Added In
|
||||
|
||||
`method_added_in`, `field_added_in` and `message_added_in` are annotations to denotate to clients that a field has been supported in a later version. This is useful when new methods or fields are added in later versions and that the client needs to be aware of what it can call.
|
||||
|
||||
The annotation should be worded as follow:
|
||||
|
||||
```proto
|
||||
option (cosmos_proto.method_added_in) = "cosmos-sdk v0.50.1";
|
||||
option (cosmos_proto.method_added_in) = "x/epochs v1.0.0";
|
||||
option (cosmos_proto.method_added_in) = "simapp v24.0.0";
|
||||
```
|
||||
|
||||
## Amino
|
||||
|
||||
The amino codec was removed in 0.50.0, this means there is not a need register `legacyAminoCodec`. To replace the amino codec, Amino protobuf annotations are used to provide information to the amino codec on how to encode and decode protobuf messages.
|
||||
The amino codec was removed in `v0.50+`, this means there is not a need register `legacyAminoCodec`. To replace the amino codec, Amino protobuf annotations are used to provide information to the amino codec on how to encode and decode protobuf messages.
|
||||
|
||||
:::note
|
||||
Amino annotations are only used for backwards compatibility with amino. New modules are not required use amino annotations.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user