From a57e20baf43db6345e2b81c799432856c9b56f56 Mon Sep 17 00:00:00 2001 From: Felipe Madero Date: Wed, 19 Jul 2023 16:26:20 -0300 Subject: [PATCH 1/3] add control commands to best support avalanche academy course --- cmd/control/control.go | 138 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) diff --git a/cmd/control/control.go b/cmd/control/control.go index 78e2c5f7..1c9887ef 100644 --- a/cmd/control/control.go +++ b/cmd/control/control.go @@ -11,6 +11,7 @@ import ( "os" "os/signal" "path/filepath" + "sort" "syscall" "time" @@ -23,6 +24,7 @@ import ( "github.com/ava-labs/avalanchego/utils/logging" "github.com/spf13/cobra" "go.uber.org/zap" + "golang.org/x/exp/maps" ) func init() { @@ -81,6 +83,10 @@ func NewCommand() *cobra.Command { newLoadSnapshotCommand(), newRemoveSnapshotCommand(), newGetSnapshotNamesCommand(), + newVMIDCommand(), + newListSubnetsCommand(), + newListBlockchainsCommand(), + newListRPCsCommand(), ) return cmd @@ -1343,6 +1349,138 @@ func getSnapshotNamesFunc(*cobra.Command, []string) error { return nil } +func newVMIDCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "vmid vm-name", + Short: "Returns the vm id associated to the given vm name.", + RunE: VMIDFunc, + Args: cobra.ExactArgs(1), + } + return cmd +} + +func VMIDFunc(_ *cobra.Command, args []string) error { + if setLogs() != nil { + return nil + } + vmName := args[0] + vmID, err := utils.VMID(vmName) + if err != nil { + return err + } + ux.Print(log, logging.Green.Wrap("VMID: %s"), vmID.String()) + return nil +} + +func newListSubnetsCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "list-subnets", + Short: "Lists all subnet ids of the network.", + RunE: listSubnetsFunc, + Args: cobra.ExactArgs(0), + } + return cmd +} + +func listSubnetsFunc(*cobra.Command, []string) error { + cli, err := newClient() + if err != nil { + return err + } + defer cli.Close() + + ctx, cancel := context.WithTimeout(context.Background(), requestTimeout) + resp, err := cli.Status(ctx) + cancel() + if err != nil { + return err + } + + if resp.ClusterInfo != nil && resp.ClusterInfo.Subnets != nil { + for _, subnetID := range maps.Keys(resp.ClusterInfo.Subnets) { + ux.Print(log, logging.Green.Wrap("Subnet ID: %s"), subnetID) + } + } + return nil +} + +func newListBlockchainsCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "list-blockchains", + Short: "Lists all blockchain ids of the network.", + RunE: listBlockchainsFunc, + Args: cobra.ExactArgs(0), + } + return cmd +} + +func listBlockchainsFunc(*cobra.Command, []string) error { + cli, err := newClient() + if err != nil { + return err + } + defer cli.Close() + + ctx, cancel := context.WithTimeout(context.Background(), requestTimeout) + resp, err := cli.Status(ctx) + cancel() + if err != nil { + return err + } + + if resp.ClusterInfo != nil && resp.ClusterInfo.CustomChains != nil { + ux.Print(log, "") + for blockchainID, blockchain := range resp.ClusterInfo.CustomChains { + ux.Print(log, logging.Green.Wrap("Blockchain ID: %s"), blockchainID) + ux.Print(log, logging.Green.Wrap(" VM Name: %s"), blockchain.ChainName) + ux.Print(log, logging.Green.Wrap(" VM ID: %s"), blockchain.VmId) + ux.Print(log, logging.Green.Wrap(" Subnet ID: %s"), blockchain.SubnetId) + ux.Print(log, "") + } + } + return nil +} + +func newListRPCsCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "list-rpcs", + Short: "Lists rpcs for all blockchain of the network.", + RunE: listRPCsFunc, + Args: cobra.ExactArgs(0), + } + return cmd +} + +func listRPCsFunc(*cobra.Command, []string) error { + cli, err := newClient() + if err != nil { + return err + } + defer cli.Close() + + ctx, cancel := context.WithTimeout(context.Background(), requestTimeout) + resp, err := cli.Status(ctx) + cancel() + if err != nil { + return err + } + + if resp.ClusterInfo != nil && resp.ClusterInfo.CustomChains != nil { + ux.Print(log, "") + for blockchainID := range resp.ClusterInfo.CustomChains { + ux.Print(log, logging.Green.Wrap("Blockchain ID: %s"), blockchainID) + nodeNames := maps.Keys(resp.ClusterInfo.NodeInfos) + sort.Strings(nodeNames) + for _, nodeName := range nodeNames { + node := resp.ClusterInfo.NodeInfos[nodeName] + ux.Print(log, logging.Green.Wrap(" %s: %s/ext/bc/%s/rpc"), nodeName, node.Uri, blockchainID) + } + ux.Print(log, "") + } + } + return nil +} + func newClient() (client.Client, error) { if err := setLogs(); err != nil { return nil, err From 3db83e4aadf6340dc8bd50345ae0c5533325cb8c Mon Sep 17 00:00:00 2001 From: Felipe Madero Date: Wed, 19 Jul 2023 18:55:30 -0300 Subject: [PATCH 2/3] add rpc api for this also as suggested by academy people --- client/client.go | 40 ++ cmd/control/control.go | 63 +-- rpcpb/rpc.pb.go | 1214 +++++++++++++++++++++++++++++++--------- rpcpb/rpc.pb.gw.go | 340 +++++++++++ rpcpb/rpc.proto | 68 +++ rpcpb/rpc_grpc.pb.go | 148 +++++ server/server.go | 74 +++ 7 files changed, 1636 insertions(+), 311 deletions(-) diff --git a/client/client.go b/client/client.go index 7e389ac9..90d1ed66 100644 --- a/client/client.go +++ b/client/client.go @@ -55,6 +55,10 @@ type Client interface { LoadSnapshot(ctx context.Context, snapshotName string, opts ...OpOption) (*rpcpb.LoadSnapshotResponse, error) RemoveSnapshot(ctx context.Context, snapshotName string) (*rpcpb.RemoveSnapshotResponse, error) GetSnapshotNames(ctx context.Context) ([]string, error) + ListSubnets(ctx context.Context) ([]string, error) + ListBlockchains(ctx context.Context) ([]*rpcpb.CustomChainInfo, error) + ListRpcs(ctx context.Context) ([]*rpcpb.BlockchainRpcs, error) + VMID(ctx context.Context, vmName string) (string, error) } type client struct { @@ -392,6 +396,42 @@ func (c *client) GetSnapshotNames(ctx context.Context) ([]string, error) { return resp.SnapshotNames, nil } +func (c *client) ListSubnets(ctx context.Context) ([]string, error) { + c.log.Info("list subnets") + resp, err := c.controlc.ListSubnets(ctx, &rpcpb.ListSubnetsRequest{}) + if err != nil { + return nil, err + } + return resp.SubnetIds, nil +} + +func (c *client) ListBlockchains(ctx context.Context) ([]*rpcpb.CustomChainInfo, error) { + c.log.Info("list blockchains") + resp, err := c.controlc.ListBlockchains(ctx, &rpcpb.ListBlockchainsRequest{}) + if err != nil { + return nil, err + } + return resp.Blockchains, nil +} + +func (c *client) ListRpcs(ctx context.Context) ([]*rpcpb.BlockchainRpcs, error) { + c.log.Info("list rpcs") + resp, err := c.controlc.ListRpcs(ctx, &rpcpb.ListRpcsRequest{}) + if err != nil { + return nil, err + } + return resp.BlockchainsRpcs, nil +} + +func (c *client) VMID(ctx context.Context, vmName string) (string, error) { + c.log.Info("vmud") + resp, err := c.controlc.VMID(ctx, &rpcpb.VMIDRequest{VmName: vmName}) + if err != nil { + return "", err + } + return resp.VmId, nil +} + func (c *client) Close() error { c.closeOnce.Do(func() { close(c.closed) diff --git a/cmd/control/control.go b/cmd/control/control.go index 1c9887ef..f6a36ce9 100644 --- a/cmd/control/control.go +++ b/cmd/control/control.go @@ -11,7 +11,6 @@ import ( "os" "os/signal" "path/filepath" - "sort" "syscall" "time" @@ -24,7 +23,6 @@ import ( "github.com/ava-labs/avalanchego/utils/logging" "github.com/spf13/cobra" "go.uber.org/zap" - "golang.org/x/exp/maps" ) func init() { @@ -1360,15 +1358,21 @@ func newVMIDCommand() *cobra.Command { } func VMIDFunc(_ *cobra.Command, args []string) error { - if setLogs() != nil { - return nil - } vmName := args[0] - vmID, err := utils.VMID(vmName) + cli, err := newClient() + if err != nil { + return err + } + defer cli.Close() + + ctx, cancel := context.WithTimeout(context.Background(), requestTimeout) + vmID, err := cli.VMID(ctx, vmName) + cancel() if err != nil { return err } - ux.Print(log, logging.Green.Wrap("VMID: %s"), vmID.String()) + + ux.Print(log, logging.Green.Wrap("VMID: %s"), vmID) return nil } @@ -1390,17 +1394,16 @@ func listSubnetsFunc(*cobra.Command, []string) error { defer cli.Close() ctx, cancel := context.WithTimeout(context.Background(), requestTimeout) - resp, err := cli.Status(ctx) + subnetIDs, err := cli.ListSubnets(ctx) cancel() if err != nil { return err } - if resp.ClusterInfo != nil && resp.ClusterInfo.Subnets != nil { - for _, subnetID := range maps.Keys(resp.ClusterInfo.Subnets) { - ux.Print(log, logging.Green.Wrap("Subnet ID: %s"), subnetID) - } + for _, subnetID := range subnetIDs { + ux.Print(log, logging.Green.Wrap("Subnet ID: %s"), subnetID) } + return nil } @@ -1422,22 +1425,21 @@ func listBlockchainsFunc(*cobra.Command, []string) error { defer cli.Close() ctx, cancel := context.WithTimeout(context.Background(), requestTimeout) - resp, err := cli.Status(ctx) + resp, err := cli.ListBlockchains(ctx) cancel() if err != nil { return err } - if resp.ClusterInfo != nil && resp.ClusterInfo.CustomChains != nil { + ux.Print(log, "") + for _, blockchain := range resp { + ux.Print(log, logging.Green.Wrap("Blockchain ID: %s"), blockchain.ChainId) + ux.Print(log, logging.Green.Wrap(" VM Name: %s"), blockchain.ChainName) + ux.Print(log, logging.Green.Wrap(" VM ID: %s"), blockchain.VmId) + ux.Print(log, logging.Green.Wrap(" Subnet ID: %s"), blockchain.SubnetId) ux.Print(log, "") - for blockchainID, blockchain := range resp.ClusterInfo.CustomChains { - ux.Print(log, logging.Green.Wrap("Blockchain ID: %s"), blockchainID) - ux.Print(log, logging.Green.Wrap(" VM Name: %s"), blockchain.ChainName) - ux.Print(log, logging.Green.Wrap(" VM ID: %s"), blockchain.VmId) - ux.Print(log, logging.Green.Wrap(" Subnet ID: %s"), blockchain.SubnetId) - ux.Print(log, "") - } } + return nil } @@ -1459,24 +1461,19 @@ func listRPCsFunc(*cobra.Command, []string) error { defer cli.Close() ctx, cancel := context.WithTimeout(context.Background(), requestTimeout) - resp, err := cli.Status(ctx) + resp, err := cli.ListRpcs(ctx) cancel() if err != nil { return err } - if resp.ClusterInfo != nil && resp.ClusterInfo.CustomChains != nil { - ux.Print(log, "") - for blockchainID := range resp.ClusterInfo.CustomChains { - ux.Print(log, logging.Green.Wrap("Blockchain ID: %s"), blockchainID) - nodeNames := maps.Keys(resp.ClusterInfo.NodeInfos) - sort.Strings(nodeNames) - for _, nodeName := range nodeNames { - node := resp.ClusterInfo.NodeInfos[nodeName] - ux.Print(log, logging.Green.Wrap(" %s: %s/ext/bc/%s/rpc"), nodeName, node.Uri, blockchainID) - } - ux.Print(log, "") + ux.Print(log, "") + for _, blockchainRpcs := range resp { + ux.Print(log, logging.Green.Wrap("Blockchain ID: %s"), blockchainRpcs.BlockchainId) + for _, rpc := range blockchainRpcs.Rpcs { + ux.Print(log, logging.Green.Wrap(" %s: %s"), rpc.NodeName, rpc.Rpc) } + ux.Print(log, "") } return nil } diff --git a/rpcpb/rpc.pb.go b/rpcpb/rpc.pb.go index 2df69220..a8050ef9 100644 --- a/rpcpb/rpc.pb.go +++ b/rpcpb/rpc.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: rpcpb/rpc.proto @@ -3765,6 +3765,465 @@ func (x *GetSnapshotNamesResponse) GetSnapshotNames() []string { return nil } +type ListSubnetsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ListSubnetsRequest) Reset() { + *x = ListSubnetsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_rpcpb_rpc_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListSubnetsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListSubnetsRequest) ProtoMessage() {} + +func (x *ListSubnetsRequest) ProtoReflect() protoreflect.Message { + mi := &file_rpcpb_rpc_proto_msgTypes[64] + 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) +} + +// Deprecated: Use ListSubnetsRequest.ProtoReflect.Descriptor instead. +func (*ListSubnetsRequest) Descriptor() ([]byte, []int) { + return file_rpcpb_rpc_proto_rawDescGZIP(), []int{64} +} + +type ListSubnetsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SubnetIds []string `protobuf:"bytes,1,rep,name=subnet_ids,json=subnetIds,proto3" json:"subnet_ids,omitempty"` +} + +func (x *ListSubnetsResponse) Reset() { + *x = ListSubnetsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_rpcpb_rpc_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListSubnetsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListSubnetsResponse) ProtoMessage() {} + +func (x *ListSubnetsResponse) ProtoReflect() protoreflect.Message { + mi := &file_rpcpb_rpc_proto_msgTypes[65] + 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) +} + +// Deprecated: Use ListSubnetsResponse.ProtoReflect.Descriptor instead. +func (*ListSubnetsResponse) Descriptor() ([]byte, []int) { + return file_rpcpb_rpc_proto_rawDescGZIP(), []int{65} +} + +func (x *ListSubnetsResponse) GetSubnetIds() []string { + if x != nil { + return x.SubnetIds + } + return nil +} + +type ListBlockchainsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ListBlockchainsRequest) Reset() { + *x = ListBlockchainsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_rpcpb_rpc_proto_msgTypes[66] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListBlockchainsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListBlockchainsRequest) ProtoMessage() {} + +func (x *ListBlockchainsRequest) ProtoReflect() protoreflect.Message { + mi := &file_rpcpb_rpc_proto_msgTypes[66] + 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) +} + +// Deprecated: Use ListBlockchainsRequest.ProtoReflect.Descriptor instead. +func (*ListBlockchainsRequest) Descriptor() ([]byte, []int) { + return file_rpcpb_rpc_proto_rawDescGZIP(), []int{66} +} + +type ListBlockchainsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Blockchains []*CustomChainInfo `protobuf:"bytes,1,rep,name=blockchains,proto3" json:"blockchains,omitempty"` +} + +func (x *ListBlockchainsResponse) Reset() { + *x = ListBlockchainsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_rpcpb_rpc_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListBlockchainsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListBlockchainsResponse) ProtoMessage() {} + +func (x *ListBlockchainsResponse) ProtoReflect() protoreflect.Message { + mi := &file_rpcpb_rpc_proto_msgTypes[67] + 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) +} + +// Deprecated: Use ListBlockchainsResponse.ProtoReflect.Descriptor instead. +func (*ListBlockchainsResponse) Descriptor() ([]byte, []int) { + return file_rpcpb_rpc_proto_rawDescGZIP(), []int{67} +} + +func (x *ListBlockchainsResponse) GetBlockchains() []*CustomChainInfo { + if x != nil { + return x.Blockchains + } + return nil +} + +type ListRpcsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ListRpcsRequest) Reset() { + *x = ListRpcsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_rpcpb_rpc_proto_msgTypes[68] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListRpcsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListRpcsRequest) ProtoMessage() {} + +func (x *ListRpcsRequest) ProtoReflect() protoreflect.Message { + mi := &file_rpcpb_rpc_proto_msgTypes[68] + 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) +} + +// Deprecated: Use ListRpcsRequest.ProtoReflect.Descriptor instead. +func (*ListRpcsRequest) Descriptor() ([]byte, []int) { + return file_rpcpb_rpc_proto_rawDescGZIP(), []int{68} +} + +type NodeRpc struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NodeName string `protobuf:"bytes,1,opt,name=node_name,json=nodeName,proto3" json:"node_name,omitempty"` + Rpc string `protobuf:"bytes,2,opt,name=rpc,proto3" json:"rpc,omitempty"` +} + +func (x *NodeRpc) Reset() { + *x = NodeRpc{} + if protoimpl.UnsafeEnabled { + mi := &file_rpcpb_rpc_proto_msgTypes[69] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeRpc) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeRpc) ProtoMessage() {} + +func (x *NodeRpc) ProtoReflect() protoreflect.Message { + mi := &file_rpcpb_rpc_proto_msgTypes[69] + 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) +} + +// Deprecated: Use NodeRpc.ProtoReflect.Descriptor instead. +func (*NodeRpc) Descriptor() ([]byte, []int) { + return file_rpcpb_rpc_proto_rawDescGZIP(), []int{69} +} + +func (x *NodeRpc) GetNodeName() string { + if x != nil { + return x.NodeName + } + return "" +} + +func (x *NodeRpc) GetRpc() string { + if x != nil { + return x.Rpc + } + return "" +} + +type BlockchainRpcs struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BlockchainId string `protobuf:"bytes,1,opt,name=blockchain_id,json=blockchainId,proto3" json:"blockchain_id,omitempty"` + Rpcs []*NodeRpc `protobuf:"bytes,2,rep,name=rpcs,proto3" json:"rpcs,omitempty"` +} + +func (x *BlockchainRpcs) Reset() { + *x = BlockchainRpcs{} + if protoimpl.UnsafeEnabled { + mi := &file_rpcpb_rpc_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BlockchainRpcs) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BlockchainRpcs) ProtoMessage() {} + +func (x *BlockchainRpcs) ProtoReflect() protoreflect.Message { + mi := &file_rpcpb_rpc_proto_msgTypes[70] + 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) +} + +// Deprecated: Use BlockchainRpcs.ProtoReflect.Descriptor instead. +func (*BlockchainRpcs) Descriptor() ([]byte, []int) { + return file_rpcpb_rpc_proto_rawDescGZIP(), []int{70} +} + +func (x *BlockchainRpcs) GetBlockchainId() string { + if x != nil { + return x.BlockchainId + } + return "" +} + +func (x *BlockchainRpcs) GetRpcs() []*NodeRpc { + if x != nil { + return x.Rpcs + } + return nil +} + +type ListRpcsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BlockchainsRpcs []*BlockchainRpcs `protobuf:"bytes,1,rep,name=blockchains_rpcs,json=blockchainsRpcs,proto3" json:"blockchains_rpcs,omitempty"` +} + +func (x *ListRpcsResponse) Reset() { + *x = ListRpcsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_rpcpb_rpc_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListRpcsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListRpcsResponse) ProtoMessage() {} + +func (x *ListRpcsResponse) ProtoReflect() protoreflect.Message { + mi := &file_rpcpb_rpc_proto_msgTypes[71] + 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) +} + +// Deprecated: Use ListRpcsResponse.ProtoReflect.Descriptor instead. +func (*ListRpcsResponse) Descriptor() ([]byte, []int) { + return file_rpcpb_rpc_proto_rawDescGZIP(), []int{71} +} + +func (x *ListRpcsResponse) GetBlockchainsRpcs() []*BlockchainRpcs { + if x != nil { + return x.BlockchainsRpcs + } + return nil +} + +type VMIDRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + VmName string `protobuf:"bytes,1,opt,name=vm_name,json=vmName,proto3" json:"vm_name,omitempty"` +} + +func (x *VMIDRequest) Reset() { + *x = VMIDRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_rpcpb_rpc_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VMIDRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMIDRequest) ProtoMessage() {} + +func (x *VMIDRequest) ProtoReflect() protoreflect.Message { + mi := &file_rpcpb_rpc_proto_msgTypes[72] + 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) +} + +// Deprecated: Use VMIDRequest.ProtoReflect.Descriptor instead. +func (*VMIDRequest) Descriptor() ([]byte, []int) { + return file_rpcpb_rpc_proto_rawDescGZIP(), []int{72} +} + +func (x *VMIDRequest) GetVmName() string { + if x != nil { + return x.VmName + } + return "" +} + +type VMIDResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + VmId string `protobuf:"bytes,1,opt,name=vm_id,json=vmId,proto3" json:"vm_id,omitempty"` +} + +func (x *VMIDResponse) Reset() { + *x = VMIDResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_rpcpb_rpc_proto_msgTypes[73] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VMIDResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VMIDResponse) ProtoMessage() {} + +func (x *VMIDResponse) ProtoReflect() protoreflect.Message { + mi := &file_rpcpb_rpc_proto_msgTypes[73] + 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) +} + +// Deprecated: Use VMIDResponse.ProtoReflect.Descriptor instead. +func (*VMIDResponse) Descriptor() ([]byte, []int) { + return file_rpcpb_rpc_proto_rawDescGZIP(), []int{73} +} + +func (x *VMIDResponse) GetVmId() string { + if x != nil { + return x.VmId + } + return "" +} + var File_rpcpb_rpc_proto protoreflect.FileDescriptor var file_rpcpb_rpc_proto_rawDesc = []byte{ @@ -4363,194 +4822,252 @@ var file_rpcpb_rpc_proto_rawDesc = []byte{ 0x47, 0x65, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0d, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x32, - 0x53, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x44, - 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x50, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x72, 0x70, 0x63, - 0x70, 0x62, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x3a, 0x01, 0x2a, 0x22, 0x08, 0x2f, 0x76, 0x31, 0x2f, - 0x70, 0x69, 0x6e, 0x67, 0x32, 0x9a, 0x16, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x0a, 0x52, 0x50, 0x43, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x52, 0x50, - 0x43, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x19, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x2f, 0x72, 0x70, 0x63, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, - 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x13, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x72, 0x70, - 0x63, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, - 0x80, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x1f, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, - 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x17, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, - 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x25, - 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, - 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x53, 0x75, - 0x62, 0x6e, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x3a, 0x01, 0x2a, 0x22, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, - 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0xa4, 0x01, - 0x0a, 0x1a, 0x41, 0x64, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x6c, - 0x65, 0x73, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x28, 0x2e, 0x72, + 0x52, 0x0d, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, + 0x14, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x34, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, + 0x6e, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x09, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x49, 0x64, 0x73, 0x22, 0x18, 0x0a, 0x16, 0x4c, + 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x53, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x38, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x43, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x22, 0x11, 0x0a, 0x0f, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x70, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x38, 0x0a, + 0x07, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x70, 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x70, 0x63, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x72, 0x70, 0x63, 0x22, 0x59, 0x0a, 0x0e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x70, 0x63, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, + 0x0a, 0x04, 0x72, 0x70, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x72, + 0x70, 0x63, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x70, 0x63, 0x52, 0x04, 0x72, 0x70, + 0x63, 0x73, 0x22, 0x54, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x70, 0x63, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x73, 0x5f, 0x72, 0x70, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x52, 0x70, 0x63, 0x73, 0x52, 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x73, 0x52, 0x70, 0x63, 0x73, 0x22, 0x26, 0x0a, 0x0b, 0x56, 0x4d, 0x49, 0x44, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x76, 0x6d, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x76, 0x6d, 0x4e, 0x61, 0x6d, 0x65, + 0x22, 0x23, 0x0a, 0x0c, 0x56, 0x4d, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x13, 0x0a, 0x05, 0x76, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x76, 0x6d, 0x49, 0x64, 0x32, 0x53, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x2e, 0x72, + 0x70, 0x63, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x13, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x3a, 0x01, 0x2a, + 0x22, 0x08, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x69, 0x6e, 0x67, 0x32, 0xaa, 0x19, 0x0a, 0x0e, 0x43, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, + 0x0a, 0x52, 0x50, 0x43, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x2e, 0x72, 0x70, + 0x63, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x52, 0x50, + 0x43, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x72, 0x70, 0x63, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x13, 0x2e, 0x72, + 0x70, 0x63, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x14, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, + 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x80, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x1f, 0x2e, 0x72, 0x70, + 0x63, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x72, + 0x70, 0x63, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x17, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x53, 0x75, 0x62, + 0x6e, 0x65, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x53, 0x75, 0x62, + 0x6e, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x72, 0x70, + 0x63, 0x70, 0x62, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x6c, 0x61, + 0x73, 0x74, 0x69, 0x63, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x3a, 0x01, 0x2a, 0x22, 0x23, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x73, 0x75, 0x62, 0x6e, + 0x65, 0x74, 0x73, 0x12, 0xa4, 0x01, 0x0a, 0x1a, 0x41, 0x64, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x12, 0x28, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, + 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x41, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, + 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, + 0x61, 0x64, 0x64, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x73, + 0x73, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x12, 0xa4, 0x01, 0x0a, 0x1a, 0x41, 0x64, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x73, 0x73, - 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x61, 0x64, 0x64, 0x70, 0x65, 0x72, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x12, 0xa4, 0x01, 0x0a, 0x1a, 0x41, 0x64, 0x64, 0x50, 0x65, 0x72, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x12, 0x28, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x28, 0x2e, 0x72, 0x70, 0x63, 0x70, + 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x6c, + 0x65, 0x73, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, - 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, - 0x3a, 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x2f, 0x61, 0x64, 0x64, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x6c, 0x65, - 0x73, 0x73, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x90, 0x01, 0x0a, 0x15, - 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x23, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x72, 0x70, 0x63, - 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x3a, 0x01, 0x2a, 0x22, 0x21, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x73, - 0x75, 0x62, 0x6e, 0x65, 0x74, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x70, - 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, - 0x1b, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x75, - 0x62, 0x6e, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x72, - 0x70, 0x63, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, - 0x12, 0x54, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x14, 0x2e, 0x72, 0x70, 0x63, - 0x70, 0x62, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x15, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x61, 0x64, 0x64, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x12, 0x90, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x75, 0x62, 0x6e, + 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x23, 0x2e, 0x72, 0x70, + 0x63, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x24, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, + 0x75, 0x62, 0x6e, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x3a, 0x01, + 0x2a, 0x22, 0x21, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x72, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x12, 0x70, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x75, + 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, + 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x54, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x12, 0x14, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x48, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x4c, 0x0a, 0x04, + 0x55, 0x52, 0x49, 0x73, 0x12, 0x12, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x55, 0x52, 0x49, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, + 0x2e, 0x55, 0x52, 0x49, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x75, 0x72, 0x69, 0x73, 0x12, 0x74, 0x0a, 0x0e, 0x57, 0x61, + 0x69, 0x74, 0x46, 0x6f, 0x72, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x12, 0x1c, 0x2e, 0x72, + 0x70, 0x63, 0x70, 0x62, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x48, 0x65, 0x61, 0x6c, + 0x74, 0x68, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x72, 0x70, 0x63, + 0x70, 0x62, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x2f, 0x77, 0x61, 0x69, 0x74, 0x66, 0x6f, 0x72, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, + 0x12, 0x54, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x2e, 0x72, 0x70, 0x63, + 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x15, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, - 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x4c, 0x0a, 0x04, 0x55, 0x52, 0x49, 0x73, 0x12, 0x12, - 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x55, 0x52, 0x49, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x55, 0x52, 0x49, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, - 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, - 0x75, 0x72, 0x69, 0x73, 0x12, 0x74, 0x0a, 0x0e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x48, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x12, 0x1c, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x57, - 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x57, 0x61, 0x69, - 0x74, 0x46, 0x6f, 0x72, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x77, 0x61, 0x69, 0x74, - 0x66, 0x6f, 0x72, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x12, 0x54, 0x0a, 0x06, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x72, 0x70, 0x63, - 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x6e, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x1a, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x72, - 0x70, 0x63, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1d, 0x3a, 0x01, 0x2a, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x30, 0x01, - 0x12, 0x64, 0x0a, 0x0a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x6e, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, 0x01, 0x2a, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, + 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x30, 0x01, 0x12, 0x64, 0x0a, 0x0a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, - 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x58, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x4e, 0x6f, 0x64, - 0x65, 0x12, 0x15, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, - 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, 0x01, 0x2a, 0x22, 0x13, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x61, 0x64, 0x64, 0x6e, 0x6f, 0x64, 0x65, - 0x12, 0x68, 0x0a, 0x0b, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, - 0x19, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x72, 0x70, 0x63, - 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, - 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x72, - 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x60, 0x0a, 0x09, 0x50, 0x61, - 0x75, 0x73, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, - 0x50, 0x61, 0x75, 0x73, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x18, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x4e, 0x6f, - 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x2f, 0x70, 0x61, 0x75, 0x73, 0x65, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x64, 0x0a, 0x0a, - 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x2e, 0x72, 0x70, 0x63, - 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, - 0x75, 0x6d, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x6e, 0x6f, - 0x64, 0x65, 0x12, 0x4c, 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x12, 0x2e, 0x72, 0x70, 0x63, - 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, - 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x73, 0x74, 0x6f, 0x70, - 0x12, 0x64, 0x0a, 0x0a, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x50, 0x65, 0x65, 0x72, 0x12, 0x18, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x58, 0x0a, 0x07, + 0x41, 0x64, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x15, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, + 0x41, 0x64, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, 0x01, + 0x2a, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x61, + 0x64, 0x64, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x68, 0x0a, 0x0b, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x52, 0x65, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1a, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x6e, 0x6f, 0x64, 0x65, + 0x12, 0x60, 0x0a, 0x09, 0x50, 0x61, 0x75, 0x73, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x2e, + 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x50, + 0x61, 0x75, 0x73, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x70, 0x61, 0x75, 0x73, 0x65, 0x6e, 0x6f, + 0x64, 0x65, 0x12, 0x64, 0x0a, 0x0a, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x4e, 0x6f, 0x64, 0x65, + 0x12, 0x18, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x4e, + 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x72, 0x70, 0x63, + 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, + 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x72, 0x65, + 0x73, 0x75, 0x6d, 0x65, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x4c, 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, + 0x12, 0x12, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x6f, + 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x12, 0x64, 0x0a, 0x0a, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x50, 0x65, 0x65, 0x72, 0x12, 0x18, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x41, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x50, 0x65, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, - 0x2e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x61, 0x74, 0x74, 0x61, - 0x63, 0x68, 0x70, 0x65, 0x65, 0x72, 0x12, 0x88, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4f, - 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x21, - 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x75, 0x74, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x22, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x75, - 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, - 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x73, 0x65, - 0x6e, 0x64, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x6c, 0x0a, 0x0c, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x12, 0x1a, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, - 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1d, 0x3a, 0x01, 0x2a, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x2f, 0x73, 0x61, 0x76, 0x65, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, - 0x6c, 0x0a, 0x0c, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, - 0x1a, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x72, 0x70, - 0x63, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, - 0x3a, 0x01, 0x2a, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x2f, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x74, 0x0a, - 0x0e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, - 0x1c, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, - 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x12, 0x7c, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, - 0x3a, 0x01, 0x2a, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x2f, 0x67, 0x65, 0x74, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x61, 0x76, 0x61, 0x2d, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x61, 0x76, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x68, 0x65, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2d, 0x72, 0x75, 0x6e, 0x6e, 0x65, - 0x72, 0x3b, 0x72, 0x70, 0x63, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x2f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x70, 0x65, 0x65, 0x72, 0x12, 0x88, 0x01, 0x0a, + 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x21, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, + 0x64, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, + 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x6f, 0x6c, 0x2f, 0x73, 0x65, 0x6e, 0x64, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x6c, 0x0a, 0x0c, 0x53, 0x61, 0x76, 0x65, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1a, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, + 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x53, 0x61, 0x76, 0x65, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, 0x01, 0x2a, 0x22, 0x18, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x73, 0x61, 0x76, 0x65, 0x73, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x6c, 0x0a, 0x0c, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1a, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x4c, 0x6f, + 0x61, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1b, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, 0x01, 0x2a, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x12, 0x74, 0x0a, 0x0e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1c, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x7c, 0x0a, 0x10, 0x47, 0x65, 0x74, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x2e, + 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, + 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x67, 0x65, 0x74, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x68, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, + 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1a, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, + 0x62, 0x6e, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, + 0x73, 0x12, 0x78, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x73, 0x12, 0x1d, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x6c, 0x69, 0x73, 0x74, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x5c, 0x0a, 0x08, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x70, 0x63, 0x73, 0x12, 0x16, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x70, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x17, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x70, 0x63, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, + 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x72, 0x70, 0x63, 0x73, 0x12, 0x4c, 0x0a, 0x04, 0x56, 0x4d, 0x49, + 0x44, 0x12, 0x12, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x56, 0x4d, 0x49, 0x44, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x72, 0x70, 0x63, 0x70, 0x62, 0x2e, 0x56, 0x4d, + 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x2f, 0x76, 0x6d, 0x69, 0x64, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x76, 0x61, 0x2d, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x61, + 0x76, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x2d, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x3b, 0x72, 0x70, 0x63, 0x70, 0x62, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4565,7 +5082,7 @@ func file_rpcpb_rpc_proto_rawDescGZIP() []byte { return file_rpcpb_rpc_proto_rawDescData } -var file_rpcpb_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 81) +var file_rpcpb_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 91) var file_rpcpb_rpc_proto_goTypes = []interface{}{ (*PingRequest)(nil), // 0: rpcpb.PingRequest (*PingResponse)(nil), // 1: rpcpb.PingResponse @@ -4631,36 +5148,46 @@ var file_rpcpb_rpc_proto_goTypes = []interface{}{ (*RemoveSnapshotResponse)(nil), // 61: rpcpb.RemoveSnapshotResponse (*GetSnapshotNamesRequest)(nil), // 62: rpcpb.GetSnapshotNamesRequest (*GetSnapshotNamesResponse)(nil), // 63: rpcpb.GetSnapshotNamesResponse - nil, // 64: rpcpb.ClusterInfo.NodeInfosEntry - nil, // 65: rpcpb.ClusterInfo.AttachedPeerInfosEntry - nil, // 66: rpcpb.ClusterInfo.CustomChainsEntry - nil, // 67: rpcpb.ClusterInfo.SubnetsEntry - nil, // 68: rpcpb.StartRequest.CustomNodeConfigsEntry - nil, // 69: rpcpb.StartRequest.ChainConfigsEntry - nil, // 70: rpcpb.StartRequest.UpgradeConfigsEntry - nil, // 71: rpcpb.StartRequest.SubnetConfigsEntry - nil, // 72: rpcpb.RestartNodeRequest.ChainConfigsEntry - nil, // 73: rpcpb.RestartNodeRequest.UpgradeConfigsEntry - nil, // 74: rpcpb.RestartNodeRequest.SubnetConfigsEntry - nil, // 75: rpcpb.AddNodeRequest.ChainConfigsEntry - nil, // 76: rpcpb.AddNodeRequest.UpgradeConfigsEntry - nil, // 77: rpcpb.AddNodeRequest.SubnetConfigsEntry - nil, // 78: rpcpb.LoadSnapshotRequest.ChainConfigsEntry - nil, // 79: rpcpb.LoadSnapshotRequest.UpgradeConfigsEntry - nil, // 80: rpcpb.LoadSnapshotRequest.SubnetConfigsEntry + (*ListSubnetsRequest)(nil), // 64: rpcpb.ListSubnetsRequest + (*ListSubnetsResponse)(nil), // 65: rpcpb.ListSubnetsResponse + (*ListBlockchainsRequest)(nil), // 66: rpcpb.ListBlockchainsRequest + (*ListBlockchainsResponse)(nil), // 67: rpcpb.ListBlockchainsResponse + (*ListRpcsRequest)(nil), // 68: rpcpb.ListRpcsRequest + (*NodeRpc)(nil), // 69: rpcpb.NodeRpc + (*BlockchainRpcs)(nil), // 70: rpcpb.BlockchainRpcs + (*ListRpcsResponse)(nil), // 71: rpcpb.ListRpcsResponse + (*VMIDRequest)(nil), // 72: rpcpb.VMIDRequest + (*VMIDResponse)(nil), // 73: rpcpb.VMIDResponse + nil, // 74: rpcpb.ClusterInfo.NodeInfosEntry + nil, // 75: rpcpb.ClusterInfo.AttachedPeerInfosEntry + nil, // 76: rpcpb.ClusterInfo.CustomChainsEntry + nil, // 77: rpcpb.ClusterInfo.SubnetsEntry + nil, // 78: rpcpb.StartRequest.CustomNodeConfigsEntry + nil, // 79: rpcpb.StartRequest.ChainConfigsEntry + nil, // 80: rpcpb.StartRequest.UpgradeConfigsEntry + nil, // 81: rpcpb.StartRequest.SubnetConfigsEntry + nil, // 82: rpcpb.RestartNodeRequest.ChainConfigsEntry + nil, // 83: rpcpb.RestartNodeRequest.UpgradeConfigsEntry + nil, // 84: rpcpb.RestartNodeRequest.SubnetConfigsEntry + nil, // 85: rpcpb.AddNodeRequest.ChainConfigsEntry + nil, // 86: rpcpb.AddNodeRequest.UpgradeConfigsEntry + nil, // 87: rpcpb.AddNodeRequest.SubnetConfigsEntry + nil, // 88: rpcpb.LoadSnapshotRequest.ChainConfigsEntry + nil, // 89: rpcpb.LoadSnapshotRequest.UpgradeConfigsEntry + nil, // 90: rpcpb.LoadSnapshotRequest.SubnetConfigsEntry } var file_rpcpb_rpc_proto_depIdxs = []int32{ - 64, // 0: rpcpb.ClusterInfo.node_infos:type_name -> rpcpb.ClusterInfo.NodeInfosEntry - 65, // 1: rpcpb.ClusterInfo.attached_peer_infos:type_name -> rpcpb.ClusterInfo.AttachedPeerInfosEntry - 66, // 2: rpcpb.ClusterInfo.custom_chains:type_name -> rpcpb.ClusterInfo.CustomChainsEntry - 67, // 3: rpcpb.ClusterInfo.subnets:type_name -> rpcpb.ClusterInfo.SubnetsEntry + 74, // 0: rpcpb.ClusterInfo.node_infos:type_name -> rpcpb.ClusterInfo.NodeInfosEntry + 75, // 1: rpcpb.ClusterInfo.attached_peer_infos:type_name -> rpcpb.ClusterInfo.AttachedPeerInfosEntry + 76, // 2: rpcpb.ClusterInfo.custom_chains:type_name -> rpcpb.ClusterInfo.CustomChainsEntry + 77, // 3: rpcpb.ClusterInfo.subnets:type_name -> rpcpb.ClusterInfo.SubnetsEntry 2, // 4: rpcpb.SubnetInfo.subnet_participants:type_name -> rpcpb.SubnetParticipants 7, // 5: rpcpb.ListOfAttachedPeerInfo.peers:type_name -> rpcpb.AttachedPeerInfo 25, // 6: rpcpb.StartRequest.blockchain_specs:type_name -> rpcpb.BlockchainSpec - 68, // 7: rpcpb.StartRequest.custom_node_configs:type_name -> rpcpb.StartRequest.CustomNodeConfigsEntry - 69, // 8: rpcpb.StartRequest.chain_configs:type_name -> rpcpb.StartRequest.ChainConfigsEntry - 70, // 9: rpcpb.StartRequest.upgrade_configs:type_name -> rpcpb.StartRequest.UpgradeConfigsEntry - 71, // 10: rpcpb.StartRequest.subnet_configs:type_name -> rpcpb.StartRequest.SubnetConfigsEntry + 78, // 7: rpcpb.StartRequest.custom_node_configs:type_name -> rpcpb.StartRequest.CustomNodeConfigsEntry + 79, // 8: rpcpb.StartRequest.chain_configs:type_name -> rpcpb.StartRequest.ChainConfigsEntry + 80, // 9: rpcpb.StartRequest.upgrade_configs:type_name -> rpcpb.StartRequest.UpgradeConfigsEntry + 81, // 10: rpcpb.StartRequest.subnet_configs:type_name -> rpcpb.StartRequest.SubnetConfigsEntry 3, // 11: rpcpb.StartResponse.cluster_info:type_name -> rpcpb.ClusterInfo 14, // 12: rpcpb.TransformElasticSubnetsRequest.elastic_subnet_spec:type_name -> rpcpb.ElasticSubnetSpec 3, // 13: rpcpb.TransformElasticSubnetsResponse.cluster_info:type_name -> rpcpb.ClusterInfo @@ -4679,85 +5206,96 @@ var file_rpcpb_rpc_proto_depIdxs = []int32{ 3, // 26: rpcpb.WaitForHealthyResponse.cluster_info:type_name -> rpcpb.ClusterInfo 3, // 27: rpcpb.StatusResponse.cluster_info:type_name -> rpcpb.ClusterInfo 3, // 28: rpcpb.StreamStatusResponse.cluster_info:type_name -> rpcpb.ClusterInfo - 72, // 29: rpcpb.RestartNodeRequest.chain_configs:type_name -> rpcpb.RestartNodeRequest.ChainConfigsEntry - 73, // 30: rpcpb.RestartNodeRequest.upgrade_configs:type_name -> rpcpb.RestartNodeRequest.UpgradeConfigsEntry - 74, // 31: rpcpb.RestartNodeRequest.subnet_configs:type_name -> rpcpb.RestartNodeRequest.SubnetConfigsEntry + 82, // 29: rpcpb.RestartNodeRequest.chain_configs:type_name -> rpcpb.RestartNodeRequest.ChainConfigsEntry + 83, // 30: rpcpb.RestartNodeRequest.upgrade_configs:type_name -> rpcpb.RestartNodeRequest.UpgradeConfigsEntry + 84, // 31: rpcpb.RestartNodeRequest.subnet_configs:type_name -> rpcpb.RestartNodeRequest.SubnetConfigsEntry 3, // 32: rpcpb.RestartNodeResponse.cluster_info:type_name -> rpcpb.ClusterInfo 3, // 33: rpcpb.RemoveNodeResponse.cluster_info:type_name -> rpcpb.ClusterInfo 3, // 34: rpcpb.PauseNodeResponse.cluster_info:type_name -> rpcpb.ClusterInfo 3, // 35: rpcpb.ResumeNodeResponse.cluster_info:type_name -> rpcpb.ClusterInfo - 75, // 36: rpcpb.AddNodeRequest.chain_configs:type_name -> rpcpb.AddNodeRequest.ChainConfigsEntry - 76, // 37: rpcpb.AddNodeRequest.upgrade_configs:type_name -> rpcpb.AddNodeRequest.UpgradeConfigsEntry - 77, // 38: rpcpb.AddNodeRequest.subnet_configs:type_name -> rpcpb.AddNodeRequest.SubnetConfigsEntry + 85, // 36: rpcpb.AddNodeRequest.chain_configs:type_name -> rpcpb.AddNodeRequest.ChainConfigsEntry + 86, // 37: rpcpb.AddNodeRequest.upgrade_configs:type_name -> rpcpb.AddNodeRequest.UpgradeConfigsEntry + 87, // 38: rpcpb.AddNodeRequest.subnet_configs:type_name -> rpcpb.AddNodeRequest.SubnetConfigsEntry 3, // 39: rpcpb.AddNodeResponse.cluster_info:type_name -> rpcpb.ClusterInfo 3, // 40: rpcpb.StopResponse.cluster_info:type_name -> rpcpb.ClusterInfo 3, // 41: rpcpb.AttachPeerResponse.cluster_info:type_name -> rpcpb.ClusterInfo 7, // 42: rpcpb.AttachPeerResponse.attached_peer_info:type_name -> rpcpb.AttachedPeerInfo - 78, // 43: rpcpb.LoadSnapshotRequest.chain_configs:type_name -> rpcpb.LoadSnapshotRequest.ChainConfigsEntry - 79, // 44: rpcpb.LoadSnapshotRequest.upgrade_configs:type_name -> rpcpb.LoadSnapshotRequest.UpgradeConfigsEntry - 80, // 45: rpcpb.LoadSnapshotRequest.subnet_configs:type_name -> rpcpb.LoadSnapshotRequest.SubnetConfigsEntry + 88, // 43: rpcpb.LoadSnapshotRequest.chain_configs:type_name -> rpcpb.LoadSnapshotRequest.ChainConfigsEntry + 89, // 44: rpcpb.LoadSnapshotRequest.upgrade_configs:type_name -> rpcpb.LoadSnapshotRequest.UpgradeConfigsEntry + 90, // 45: rpcpb.LoadSnapshotRequest.subnet_configs:type_name -> rpcpb.LoadSnapshotRequest.SubnetConfigsEntry 3, // 46: rpcpb.LoadSnapshotResponse.cluster_info:type_name -> rpcpb.ClusterInfo - 6, // 47: rpcpb.ClusterInfo.NodeInfosEntry.value:type_name -> rpcpb.NodeInfo - 8, // 48: rpcpb.ClusterInfo.AttachedPeerInfosEntry.value:type_name -> rpcpb.ListOfAttachedPeerInfo - 5, // 49: rpcpb.ClusterInfo.CustomChainsEntry.value:type_name -> rpcpb.CustomChainInfo - 4, // 50: rpcpb.ClusterInfo.SubnetsEntry.value:type_name -> rpcpb.SubnetInfo - 0, // 51: rpcpb.PingService.Ping:input_type -> rpcpb.PingRequest - 10, // 52: rpcpb.ControlService.RPCVersion:input_type -> rpcpb.RPCVersionRequest - 9, // 53: rpcpb.ControlService.Start:input_type -> rpcpb.StartRequest - 26, // 54: rpcpb.ControlService.CreateBlockchains:input_type -> rpcpb.CreateBlockchainsRequest - 15, // 55: rpcpb.ControlService.TransformElasticSubnets:input_type -> rpcpb.TransformElasticSubnetsRequest - 20, // 56: rpcpb.ControlService.AddPermissionlessDelegator:input_type -> rpcpb.AddPermissionlessDelegatorRequest - 18, // 57: rpcpb.ControlService.AddPermissionlessValidator:input_type -> rpcpb.AddPermissionlessValidatorRequest - 23, // 58: rpcpb.ControlService.RemoveSubnetValidator:input_type -> rpcpb.RemoveSubnetValidatorRequest - 28, // 59: rpcpb.ControlService.CreateSubnets:input_type -> rpcpb.CreateSubnetsRequest - 30, // 60: rpcpb.ControlService.Health:input_type -> rpcpb.HealthRequest - 32, // 61: rpcpb.ControlService.URIs:input_type -> rpcpb.URIsRequest - 34, // 62: rpcpb.ControlService.WaitForHealthy:input_type -> rpcpb.WaitForHealthyRequest - 36, // 63: rpcpb.ControlService.Status:input_type -> rpcpb.StatusRequest - 38, // 64: rpcpb.ControlService.StreamStatus:input_type -> rpcpb.StreamStatusRequest - 42, // 65: rpcpb.ControlService.RemoveNode:input_type -> rpcpb.RemoveNodeRequest - 48, // 66: rpcpb.ControlService.AddNode:input_type -> rpcpb.AddNodeRequest - 40, // 67: rpcpb.ControlService.RestartNode:input_type -> rpcpb.RestartNodeRequest - 44, // 68: rpcpb.ControlService.PauseNode:input_type -> rpcpb.PauseNodeRequest - 46, // 69: rpcpb.ControlService.ResumeNode:input_type -> rpcpb.ResumeNodeRequest - 50, // 70: rpcpb.ControlService.Stop:input_type -> rpcpb.StopRequest - 52, // 71: rpcpb.ControlService.AttachPeer:input_type -> rpcpb.AttachPeerRequest - 54, // 72: rpcpb.ControlService.SendOutboundMessage:input_type -> rpcpb.SendOutboundMessageRequest - 56, // 73: rpcpb.ControlService.SaveSnapshot:input_type -> rpcpb.SaveSnapshotRequest - 58, // 74: rpcpb.ControlService.LoadSnapshot:input_type -> rpcpb.LoadSnapshotRequest - 60, // 75: rpcpb.ControlService.RemoveSnapshot:input_type -> rpcpb.RemoveSnapshotRequest - 62, // 76: rpcpb.ControlService.GetSnapshotNames:input_type -> rpcpb.GetSnapshotNamesRequest - 1, // 77: rpcpb.PingService.Ping:output_type -> rpcpb.PingResponse - 11, // 78: rpcpb.ControlService.RPCVersion:output_type -> rpcpb.RPCVersionResponse - 12, // 79: rpcpb.ControlService.Start:output_type -> rpcpb.StartResponse - 27, // 80: rpcpb.ControlService.CreateBlockchains:output_type -> rpcpb.CreateBlockchainsResponse - 16, // 81: rpcpb.ControlService.TransformElasticSubnets:output_type -> rpcpb.TransformElasticSubnetsResponse - 21, // 82: rpcpb.ControlService.AddPermissionlessDelegator:output_type -> rpcpb.AddPermissionlessDelegatorResponse - 19, // 83: rpcpb.ControlService.AddPermissionlessValidator:output_type -> rpcpb.AddPermissionlessValidatorResponse - 24, // 84: rpcpb.ControlService.RemoveSubnetValidator:output_type -> rpcpb.RemoveSubnetValidatorResponse - 29, // 85: rpcpb.ControlService.CreateSubnets:output_type -> rpcpb.CreateSubnetsResponse - 31, // 86: rpcpb.ControlService.Health:output_type -> rpcpb.HealthResponse - 33, // 87: rpcpb.ControlService.URIs:output_type -> rpcpb.URIsResponse - 35, // 88: rpcpb.ControlService.WaitForHealthy:output_type -> rpcpb.WaitForHealthyResponse - 37, // 89: rpcpb.ControlService.Status:output_type -> rpcpb.StatusResponse - 39, // 90: rpcpb.ControlService.StreamStatus:output_type -> rpcpb.StreamStatusResponse - 43, // 91: rpcpb.ControlService.RemoveNode:output_type -> rpcpb.RemoveNodeResponse - 49, // 92: rpcpb.ControlService.AddNode:output_type -> rpcpb.AddNodeResponse - 41, // 93: rpcpb.ControlService.RestartNode:output_type -> rpcpb.RestartNodeResponse - 45, // 94: rpcpb.ControlService.PauseNode:output_type -> rpcpb.PauseNodeResponse - 47, // 95: rpcpb.ControlService.ResumeNode:output_type -> rpcpb.ResumeNodeResponse - 51, // 96: rpcpb.ControlService.Stop:output_type -> rpcpb.StopResponse - 53, // 97: rpcpb.ControlService.AttachPeer:output_type -> rpcpb.AttachPeerResponse - 55, // 98: rpcpb.ControlService.SendOutboundMessage:output_type -> rpcpb.SendOutboundMessageResponse - 57, // 99: rpcpb.ControlService.SaveSnapshot:output_type -> rpcpb.SaveSnapshotResponse - 59, // 100: rpcpb.ControlService.LoadSnapshot:output_type -> rpcpb.LoadSnapshotResponse - 61, // 101: rpcpb.ControlService.RemoveSnapshot:output_type -> rpcpb.RemoveSnapshotResponse - 63, // 102: rpcpb.ControlService.GetSnapshotNames:output_type -> rpcpb.GetSnapshotNamesResponse - 77, // [77:103] is the sub-list for method output_type - 51, // [51:77] is the sub-list for method input_type - 51, // [51:51] is the sub-list for extension type_name - 51, // [51:51] is the sub-list for extension extendee - 0, // [0:51] is the sub-list for field type_name + 5, // 47: rpcpb.ListBlockchainsResponse.blockchains:type_name -> rpcpb.CustomChainInfo + 69, // 48: rpcpb.BlockchainRpcs.rpcs:type_name -> rpcpb.NodeRpc + 70, // 49: rpcpb.ListRpcsResponse.blockchains_rpcs:type_name -> rpcpb.BlockchainRpcs + 6, // 50: rpcpb.ClusterInfo.NodeInfosEntry.value:type_name -> rpcpb.NodeInfo + 8, // 51: rpcpb.ClusterInfo.AttachedPeerInfosEntry.value:type_name -> rpcpb.ListOfAttachedPeerInfo + 5, // 52: rpcpb.ClusterInfo.CustomChainsEntry.value:type_name -> rpcpb.CustomChainInfo + 4, // 53: rpcpb.ClusterInfo.SubnetsEntry.value:type_name -> rpcpb.SubnetInfo + 0, // 54: rpcpb.PingService.Ping:input_type -> rpcpb.PingRequest + 10, // 55: rpcpb.ControlService.RPCVersion:input_type -> rpcpb.RPCVersionRequest + 9, // 56: rpcpb.ControlService.Start:input_type -> rpcpb.StartRequest + 26, // 57: rpcpb.ControlService.CreateBlockchains:input_type -> rpcpb.CreateBlockchainsRequest + 15, // 58: rpcpb.ControlService.TransformElasticSubnets:input_type -> rpcpb.TransformElasticSubnetsRequest + 20, // 59: rpcpb.ControlService.AddPermissionlessDelegator:input_type -> rpcpb.AddPermissionlessDelegatorRequest + 18, // 60: rpcpb.ControlService.AddPermissionlessValidator:input_type -> rpcpb.AddPermissionlessValidatorRequest + 23, // 61: rpcpb.ControlService.RemoveSubnetValidator:input_type -> rpcpb.RemoveSubnetValidatorRequest + 28, // 62: rpcpb.ControlService.CreateSubnets:input_type -> rpcpb.CreateSubnetsRequest + 30, // 63: rpcpb.ControlService.Health:input_type -> rpcpb.HealthRequest + 32, // 64: rpcpb.ControlService.URIs:input_type -> rpcpb.URIsRequest + 34, // 65: rpcpb.ControlService.WaitForHealthy:input_type -> rpcpb.WaitForHealthyRequest + 36, // 66: rpcpb.ControlService.Status:input_type -> rpcpb.StatusRequest + 38, // 67: rpcpb.ControlService.StreamStatus:input_type -> rpcpb.StreamStatusRequest + 42, // 68: rpcpb.ControlService.RemoveNode:input_type -> rpcpb.RemoveNodeRequest + 48, // 69: rpcpb.ControlService.AddNode:input_type -> rpcpb.AddNodeRequest + 40, // 70: rpcpb.ControlService.RestartNode:input_type -> rpcpb.RestartNodeRequest + 44, // 71: rpcpb.ControlService.PauseNode:input_type -> rpcpb.PauseNodeRequest + 46, // 72: rpcpb.ControlService.ResumeNode:input_type -> rpcpb.ResumeNodeRequest + 50, // 73: rpcpb.ControlService.Stop:input_type -> rpcpb.StopRequest + 52, // 74: rpcpb.ControlService.AttachPeer:input_type -> rpcpb.AttachPeerRequest + 54, // 75: rpcpb.ControlService.SendOutboundMessage:input_type -> rpcpb.SendOutboundMessageRequest + 56, // 76: rpcpb.ControlService.SaveSnapshot:input_type -> rpcpb.SaveSnapshotRequest + 58, // 77: rpcpb.ControlService.LoadSnapshot:input_type -> rpcpb.LoadSnapshotRequest + 60, // 78: rpcpb.ControlService.RemoveSnapshot:input_type -> rpcpb.RemoveSnapshotRequest + 62, // 79: rpcpb.ControlService.GetSnapshotNames:input_type -> rpcpb.GetSnapshotNamesRequest + 64, // 80: rpcpb.ControlService.ListSubnets:input_type -> rpcpb.ListSubnetsRequest + 66, // 81: rpcpb.ControlService.ListBlockchains:input_type -> rpcpb.ListBlockchainsRequest + 68, // 82: rpcpb.ControlService.ListRpcs:input_type -> rpcpb.ListRpcsRequest + 72, // 83: rpcpb.ControlService.VMID:input_type -> rpcpb.VMIDRequest + 1, // 84: rpcpb.PingService.Ping:output_type -> rpcpb.PingResponse + 11, // 85: rpcpb.ControlService.RPCVersion:output_type -> rpcpb.RPCVersionResponse + 12, // 86: rpcpb.ControlService.Start:output_type -> rpcpb.StartResponse + 27, // 87: rpcpb.ControlService.CreateBlockchains:output_type -> rpcpb.CreateBlockchainsResponse + 16, // 88: rpcpb.ControlService.TransformElasticSubnets:output_type -> rpcpb.TransformElasticSubnetsResponse + 21, // 89: rpcpb.ControlService.AddPermissionlessDelegator:output_type -> rpcpb.AddPermissionlessDelegatorResponse + 19, // 90: rpcpb.ControlService.AddPermissionlessValidator:output_type -> rpcpb.AddPermissionlessValidatorResponse + 24, // 91: rpcpb.ControlService.RemoveSubnetValidator:output_type -> rpcpb.RemoveSubnetValidatorResponse + 29, // 92: rpcpb.ControlService.CreateSubnets:output_type -> rpcpb.CreateSubnetsResponse + 31, // 93: rpcpb.ControlService.Health:output_type -> rpcpb.HealthResponse + 33, // 94: rpcpb.ControlService.URIs:output_type -> rpcpb.URIsResponse + 35, // 95: rpcpb.ControlService.WaitForHealthy:output_type -> rpcpb.WaitForHealthyResponse + 37, // 96: rpcpb.ControlService.Status:output_type -> rpcpb.StatusResponse + 39, // 97: rpcpb.ControlService.StreamStatus:output_type -> rpcpb.StreamStatusResponse + 43, // 98: rpcpb.ControlService.RemoveNode:output_type -> rpcpb.RemoveNodeResponse + 49, // 99: rpcpb.ControlService.AddNode:output_type -> rpcpb.AddNodeResponse + 41, // 100: rpcpb.ControlService.RestartNode:output_type -> rpcpb.RestartNodeResponse + 45, // 101: rpcpb.ControlService.PauseNode:output_type -> rpcpb.PauseNodeResponse + 47, // 102: rpcpb.ControlService.ResumeNode:output_type -> rpcpb.ResumeNodeResponse + 51, // 103: rpcpb.ControlService.Stop:output_type -> rpcpb.StopResponse + 53, // 104: rpcpb.ControlService.AttachPeer:output_type -> rpcpb.AttachPeerResponse + 55, // 105: rpcpb.ControlService.SendOutboundMessage:output_type -> rpcpb.SendOutboundMessageResponse + 57, // 106: rpcpb.ControlService.SaveSnapshot:output_type -> rpcpb.SaveSnapshotResponse + 59, // 107: rpcpb.ControlService.LoadSnapshot:output_type -> rpcpb.LoadSnapshotResponse + 61, // 108: rpcpb.ControlService.RemoveSnapshot:output_type -> rpcpb.RemoveSnapshotResponse + 63, // 109: rpcpb.ControlService.GetSnapshotNames:output_type -> rpcpb.GetSnapshotNamesResponse + 65, // 110: rpcpb.ControlService.ListSubnets:output_type -> rpcpb.ListSubnetsResponse + 67, // 111: rpcpb.ControlService.ListBlockchains:output_type -> rpcpb.ListBlockchainsResponse + 71, // 112: rpcpb.ControlService.ListRpcs:output_type -> rpcpb.ListRpcsResponse + 73, // 113: rpcpb.ControlService.VMID:output_type -> rpcpb.VMIDResponse + 84, // [84:114] is the sub-list for method output_type + 54, // [54:84] is the sub-list for method input_type + 54, // [54:54] is the sub-list for extension type_name + 54, // [54:54] is the sub-list for extension extendee + 0, // [0:54] is the sub-list for field type_name } func init() { file_rpcpb_rpc_proto_init() } @@ -5534,6 +6072,126 @@ func file_rpcpb_rpc_proto_init() { return nil } } + file_rpcpb_rpc_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListSubnetsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpcpb_rpc_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListSubnetsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpcpb_rpc_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListBlockchainsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpcpb_rpc_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListBlockchainsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpcpb_rpc_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListRpcsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpcpb_rpc_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeRpc); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpcpb_rpc_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BlockchainRpcs); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpcpb_rpc_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListRpcsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpcpb_rpc_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VMIDRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpcpb_rpc_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VMIDResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_rpcpb_rpc_proto_msgTypes[9].OneofWrappers = []interface{}{} file_rpcpb_rpc_proto_msgTypes[25].OneofWrappers = []interface{}{} @@ -5546,7 +6204,7 @@ func file_rpcpb_rpc_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_rpcpb_rpc_proto_rawDesc, NumEnums: 0, - NumMessages: 81, + NumMessages: 91, NumExtensions: 0, NumServices: 2, }, diff --git a/rpcpb/rpc.pb.gw.go b/rpcpb/rpc.pb.gw.go index 9100e5da..eb9f9e47 100644 --- a/rpcpb/rpc.pb.gw.go +++ b/rpcpb/rpc.pb.gw.go @@ -906,6 +906,142 @@ func local_request_ControlService_GetSnapshotNames_0(ctx context.Context, marsha } +func request_ControlService_ListSubnets_0(ctx context.Context, marshaler runtime.Marshaler, client ControlServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListSubnetsRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListSubnets(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ControlService_ListSubnets_0(ctx context.Context, marshaler runtime.Marshaler, server ControlServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListSubnetsRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListSubnets(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ControlService_ListBlockchains_0(ctx context.Context, marshaler runtime.Marshaler, client ControlServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListBlockchainsRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListBlockchains(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ControlService_ListBlockchains_0(ctx context.Context, marshaler runtime.Marshaler, server ControlServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListBlockchainsRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListBlockchains(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ControlService_ListRpcs_0(ctx context.Context, marshaler runtime.Marshaler, client ControlServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListRpcsRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListRpcs(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ControlService_ListRpcs_0(ctx context.Context, marshaler runtime.Marshaler, server ControlServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListRpcsRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListRpcs(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ControlService_VMID_0(ctx context.Context, marshaler runtime.Marshaler, client ControlServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VMIDRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.VMID(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ControlService_VMID_0(ctx context.Context, marshaler runtime.Marshaler, server ControlServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VMIDRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.VMID(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterPingServiceHandlerServer registers the http handlers for service PingService to "mux". // UnaryRPC :call PingServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -1553,6 +1689,106 @@ func RegisterControlServiceHandlerServer(ctx context.Context, mux *runtime.Serve }) + mux.Handle("POST", pattern_ControlService_ListSubnets_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/rpcpb.ControlService/ListSubnets", runtime.WithHTTPPathPattern("/v1/control/listsubnets")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ControlService_ListSubnets_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ControlService_ListSubnets_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ControlService_ListBlockchains_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/rpcpb.ControlService/ListBlockchains", runtime.WithHTTPPathPattern("/v1/control/listblockchains")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ControlService_ListBlockchains_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ControlService_ListBlockchains_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ControlService_ListRpcs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/rpcpb.ControlService/ListRpcs", runtime.WithHTTPPathPattern("/v1/control/listrpcs")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ControlService_ListRpcs_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ControlService_ListRpcs_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ControlService_VMID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/rpcpb.ControlService/VMID", runtime.WithHTTPPathPattern("/v1/control/vmid")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ControlService_VMID_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ControlService_VMID_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -2215,6 +2451,94 @@ func RegisterControlServiceHandlerClient(ctx context.Context, mux *runtime.Serve }) + mux.Handle("POST", pattern_ControlService_ListSubnets_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/rpcpb.ControlService/ListSubnets", runtime.WithHTTPPathPattern("/v1/control/listsubnets")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ControlService_ListSubnets_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ControlService_ListSubnets_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ControlService_ListBlockchains_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/rpcpb.ControlService/ListBlockchains", runtime.WithHTTPPathPattern("/v1/control/listblockchains")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ControlService_ListBlockchains_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ControlService_ListBlockchains_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ControlService_ListRpcs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/rpcpb.ControlService/ListRpcs", runtime.WithHTTPPathPattern("/v1/control/listrpcs")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ControlService_ListRpcs_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ControlService_ListRpcs_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ControlService_VMID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/rpcpb.ControlService/VMID", runtime.WithHTTPPathPattern("/v1/control/vmid")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ControlService_VMID_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ControlService_VMID_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -2268,6 +2592,14 @@ var ( pattern_ControlService_RemoveSnapshot_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "control", "removesnapshot"}, "")) pattern_ControlService_GetSnapshotNames_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "control", "getsnapshotnames"}, "")) + + pattern_ControlService_ListSubnets_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "control", "listsubnets"}, "")) + + pattern_ControlService_ListBlockchains_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "control", "listblockchains"}, "")) + + pattern_ControlService_ListRpcs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "control", "listrpcs"}, "")) + + pattern_ControlService_VMID_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "control", "vmid"}, "")) ) var ( @@ -2320,4 +2652,12 @@ var ( forward_ControlService_RemoveSnapshot_0 = runtime.ForwardResponseMessage forward_ControlService_GetSnapshotNames_0 = runtime.ForwardResponseMessage + + forward_ControlService_ListSubnets_0 = runtime.ForwardResponseMessage + + forward_ControlService_ListBlockchains_0 = runtime.ForwardResponseMessage + + forward_ControlService_ListRpcs_0 = runtime.ForwardResponseMessage + + forward_ControlService_VMID_0 = runtime.ForwardResponseMessage ) diff --git a/rpcpb/rpc.proto b/rpcpb/rpc.proto index 5aab663b..def1b3fb 100644 --- a/rpcpb/rpc.proto +++ b/rpcpb/rpc.proto @@ -196,6 +196,34 @@ service ControlService { body: "*" }; } + + rpc ListSubnets(ListSubnetsRequest) returns (ListSubnetsResponse) { + option (google.api.http) = { + post: "/v1/control/listsubnets" + body: "*" + }; + } + + rpc ListBlockchains(ListBlockchainsRequest) returns (ListBlockchainsResponse) { + option (google.api.http) = { + post: "/v1/control/listblockchains" + body: "*" + }; + } + + rpc ListRpcs(ListRpcsRequest) returns (ListRpcsResponse) { + option (google.api.http) = { + post: "/v1/control/listrpcs" + body: "*" + }; + } + + rpc VMID(VMIDRequest) returns (VMIDResponse) { + option (google.api.http) = { + post: "/v1/control/vmid" + body: "*" + }; + } } message SubnetParticipants { @@ -635,3 +663,43 @@ message GetSnapshotNamesRequest { message GetSnapshotNamesResponse { repeated string snapshot_names = 1; } + +message ListSubnetsRequest { +} + +message ListSubnetsResponse { + repeated string subnet_ids = 1; +} + +message ListBlockchainsRequest { +} + +message ListBlockchainsResponse { + repeated CustomChainInfo blockchains = 1; +} + +message ListRpcsRequest { +} + +message NodeRpc { + string node_name = 1; + string rpc = 2; +} + +message BlockchainRpcs { + string blockchain_id = 1; + repeated NodeRpc rpcs = 2; +} + +message ListRpcsResponse { + repeated BlockchainRpcs blockchains_rpcs = 1; +} + +message VMIDRequest { + string vm_name = 1; +} + +message VMIDResponse { + string vm_id = 1; +} + diff --git a/rpcpb/rpc_grpc.pb.go b/rpcpb/rpc_grpc.pb.go index 904d022d..58338182 100644 --- a/rpcpb/rpc_grpc.pb.go +++ b/rpcpb/rpc_grpc.pb.go @@ -134,6 +134,10 @@ const ( ControlService_LoadSnapshot_FullMethodName = "/rpcpb.ControlService/LoadSnapshot" ControlService_RemoveSnapshot_FullMethodName = "/rpcpb.ControlService/RemoveSnapshot" ControlService_GetSnapshotNames_FullMethodName = "/rpcpb.ControlService/GetSnapshotNames" + ControlService_ListSubnets_FullMethodName = "/rpcpb.ControlService/ListSubnets" + ControlService_ListBlockchains_FullMethodName = "/rpcpb.ControlService/ListBlockchains" + ControlService_ListRpcs_FullMethodName = "/rpcpb.ControlService/ListRpcs" + ControlService_VMID_FullMethodName = "/rpcpb.ControlService/VMID" ) // ControlServiceClient is the client API for ControlService service. @@ -165,6 +169,10 @@ type ControlServiceClient interface { LoadSnapshot(ctx context.Context, in *LoadSnapshotRequest, opts ...grpc.CallOption) (*LoadSnapshotResponse, error) RemoveSnapshot(ctx context.Context, in *RemoveSnapshotRequest, opts ...grpc.CallOption) (*RemoveSnapshotResponse, error) GetSnapshotNames(ctx context.Context, in *GetSnapshotNamesRequest, opts ...grpc.CallOption) (*GetSnapshotNamesResponse, error) + ListSubnets(ctx context.Context, in *ListSubnetsRequest, opts ...grpc.CallOption) (*ListSubnetsResponse, error) + ListBlockchains(ctx context.Context, in *ListBlockchainsRequest, opts ...grpc.CallOption) (*ListBlockchainsResponse, error) + ListRpcs(ctx context.Context, in *ListRpcsRequest, opts ...grpc.CallOption) (*ListRpcsResponse, error) + VMID(ctx context.Context, in *VMIDRequest, opts ...grpc.CallOption) (*VMIDResponse, error) } type controlServiceClient struct { @@ -423,6 +431,42 @@ func (c *controlServiceClient) GetSnapshotNames(ctx context.Context, in *GetSnap return out, nil } +func (c *controlServiceClient) ListSubnets(ctx context.Context, in *ListSubnetsRequest, opts ...grpc.CallOption) (*ListSubnetsResponse, error) { + out := new(ListSubnetsResponse) + err := c.cc.Invoke(ctx, ControlService_ListSubnets_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlServiceClient) ListBlockchains(ctx context.Context, in *ListBlockchainsRequest, opts ...grpc.CallOption) (*ListBlockchainsResponse, error) { + out := new(ListBlockchainsResponse) + err := c.cc.Invoke(ctx, ControlService_ListBlockchains_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlServiceClient) ListRpcs(ctx context.Context, in *ListRpcsRequest, opts ...grpc.CallOption) (*ListRpcsResponse, error) { + out := new(ListRpcsResponse) + err := c.cc.Invoke(ctx, ControlService_ListRpcs_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controlServiceClient) VMID(ctx context.Context, in *VMIDRequest, opts ...grpc.CallOption) (*VMIDResponse, error) { + out := new(VMIDResponse) + err := c.cc.Invoke(ctx, ControlService_VMID_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ControlServiceServer is the server API for ControlService service. // All implementations must embed UnimplementedControlServiceServer // for forward compatibility @@ -452,6 +496,10 @@ type ControlServiceServer interface { LoadSnapshot(context.Context, *LoadSnapshotRequest) (*LoadSnapshotResponse, error) RemoveSnapshot(context.Context, *RemoveSnapshotRequest) (*RemoveSnapshotResponse, error) GetSnapshotNames(context.Context, *GetSnapshotNamesRequest) (*GetSnapshotNamesResponse, error) + ListSubnets(context.Context, *ListSubnetsRequest) (*ListSubnetsResponse, error) + ListBlockchains(context.Context, *ListBlockchainsRequest) (*ListBlockchainsResponse, error) + ListRpcs(context.Context, *ListRpcsRequest) (*ListRpcsResponse, error) + VMID(context.Context, *VMIDRequest) (*VMIDResponse, error) mustEmbedUnimplementedControlServiceServer() } @@ -534,6 +582,18 @@ func (UnimplementedControlServiceServer) RemoveSnapshot(context.Context, *Remove func (UnimplementedControlServiceServer) GetSnapshotNames(context.Context, *GetSnapshotNamesRequest) (*GetSnapshotNamesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetSnapshotNames not implemented") } +func (UnimplementedControlServiceServer) ListSubnets(context.Context, *ListSubnetsRequest) (*ListSubnetsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListSubnets not implemented") +} +func (UnimplementedControlServiceServer) ListBlockchains(context.Context, *ListBlockchainsRequest) (*ListBlockchainsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListBlockchains not implemented") +} +func (UnimplementedControlServiceServer) ListRpcs(context.Context, *ListRpcsRequest) (*ListRpcsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListRpcs not implemented") +} +func (UnimplementedControlServiceServer) VMID(context.Context, *VMIDRequest) (*VMIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method VMID not implemented") +} func (UnimplementedControlServiceServer) mustEmbedUnimplementedControlServiceServer() {} // UnsafeControlServiceServer may be embedded to opt out of forward compatibility for this service. @@ -1000,6 +1060,78 @@ func _ControlService_GetSnapshotNames_Handler(srv interface{}, ctx context.Conte return interceptor(ctx, in, info, handler) } +func _ControlService_ListSubnets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListSubnetsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServiceServer).ListSubnets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ControlService_ListSubnets_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServiceServer).ListSubnets(ctx, req.(*ListSubnetsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ControlService_ListBlockchains_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListBlockchainsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServiceServer).ListBlockchains(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ControlService_ListBlockchains_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServiceServer).ListBlockchains(ctx, req.(*ListBlockchainsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ControlService_ListRpcs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListRpcsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServiceServer).ListRpcs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ControlService_ListRpcs_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServiceServer).ListRpcs(ctx, req.(*ListRpcsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ControlService_VMID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VMIDRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControlServiceServer).VMID(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ControlService_VMID_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControlServiceServer).VMID(ctx, req.(*VMIDRequest)) + } + return interceptor(ctx, in, info, handler) +} + // ControlService_ServiceDesc is the grpc.ServiceDesc for ControlService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -1103,6 +1235,22 @@ var ControlService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetSnapshotNames", Handler: _ControlService_GetSnapshotNames_Handler, }, + { + MethodName: "ListSubnets", + Handler: _ControlService_ListSubnets_Handler, + }, + { + MethodName: "ListBlockchains", + Handler: _ControlService_ListBlockchains_Handler, + }, + { + MethodName: "ListRpcs", + Handler: _ControlService_ListRpcs_Handler, + }, + { + MethodName: "VMID", + Handler: _ControlService_VMID_Handler, + }, }, Streams: []grpc.StreamDesc{ { diff --git a/server/server.go b/server/server.go index 88f3688e..04690e86 100644 --- a/server/server.go +++ b/server/server.go @@ -1380,6 +1380,80 @@ func (s *server) GetSnapshotNames(context.Context, *rpcpb.GetSnapshotNamesReques return &rpcpb.GetSnapshotNamesResponse{SnapshotNames: snapshotNames}, nil } +func (s *server) ListSubnets(context.Context, *rpcpb.ListSubnetsRequest) (*rpcpb.ListSubnetsResponse, error) { + s.mu.RLock() + defer s.mu.RUnlock() + + s.log.Info("ListSubnets") + + if s.network == nil { + return nil, ErrNotBootstrapped + } + + subnetIDs := maps.Keys(s.clusterInfo.Subnets) + + return &rpcpb.ListSubnetsResponse{SubnetIds: subnetIDs}, nil +} + +func (s *server) ListBlockchains(context.Context, *rpcpb.ListBlockchainsRequest) (*rpcpb.ListBlockchainsResponse, error) { + s.mu.RLock() + defer s.mu.RUnlock() + + s.log.Info("ListBlockchains") + + if s.network == nil { + return nil, ErrNotBootstrapped + } + + blockchains := maps.Values(s.clusterInfo.CustomChains) + + return &rpcpb.ListBlockchainsResponse{Blockchains: blockchains}, nil +} + +func (s *server) ListRpcs(context.Context, *rpcpb.ListRpcsRequest) (*rpcpb.ListRpcsResponse, error) { + s.mu.RLock() + defer s.mu.RUnlock() + + s.log.Info("ListRpcs") + + if s.network == nil { + return nil, ErrNotBootstrapped + } + + blockchainsRpcs := []*rpcpb.BlockchainRpcs{} + for _, chain := range s.clusterInfo.CustomChains { + rpcs := []*rpcpb.NodeRpc{} + nodeNames := s.clusterInfo.Subnets[chain.SubnetId].SubnetParticipants.NodeNames + sort.Strings(nodeNames) + for _, nodeName := range nodeNames { + rpc := fmt.Sprintf("%s/ext/bc/%s/rpc", s.clusterInfo.NodeInfos[nodeName].Uri, chain.ChainId) + nodeRPC := rpcpb.NodeRpc{ + NodeName: nodeName, + Rpc: rpc, + } + rpcs = append(rpcs, &nodeRPC) + } + blockchainRpcs := rpcpb.BlockchainRpcs{ + BlockchainId: chain.ChainId, + Rpcs: rpcs, + } + blockchainsRpcs = append(blockchainsRpcs, &blockchainRpcs) + } + + return &rpcpb.ListRpcsResponse{BlockchainsRpcs: blockchainsRpcs}, nil +} + +func (s *server) VMID(_ context.Context, req *rpcpb.VMIDRequest) (*rpcpb.VMIDResponse, error) { + s.log.Info("VMID") + + vmID, err := utils.VMID(req.VmName) + if err != nil { + return nil, err + } + + return &rpcpb.VMIDResponse{VmId: vmID.String()}, nil +} + func isClientCanceled(ctxErr error, err error) bool { if ctxErr != nil { return true From e99e2e109adc6cc8e8d2adf24dcec81ed729d644 Mon Sep 17 00:00:00 2001 From: Felipe Madero Date: Wed, 19 Jul 2023 19:04:00 -0300 Subject: [PATCH 3/3] nits --- server/server.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/server/server.go b/server/server.go index 04690e86..e0ff5c15 100644 --- a/server/server.go +++ b/server/server.go @@ -1422,11 +1422,19 @@ func (s *server) ListRpcs(context.Context, *rpcpb.ListRpcsRequest) (*rpcpb.ListR blockchainsRpcs := []*rpcpb.BlockchainRpcs{} for _, chain := range s.clusterInfo.CustomChains { - rpcs := []*rpcpb.NodeRpc{} - nodeNames := s.clusterInfo.Subnets[chain.SubnetId].SubnetParticipants.NodeNames + subnetInfo, ok := s.clusterInfo.Subnets[chain.SubnetId] + if !ok { + return nil, fmt.Errorf("subnet %q not found in subnet info", chain.SubnetId) + } + nodeNames := subnetInfo.SubnetParticipants.NodeNames sort.Strings(nodeNames) + rpcs := []*rpcpb.NodeRpc{} for _, nodeName := range nodeNames { - rpc := fmt.Sprintf("%s/ext/bc/%s/rpc", s.clusterInfo.NodeInfos[nodeName].Uri, chain.ChainId) + nodeInfo, ok := s.clusterInfo.NodeInfos[nodeName] + if !ok { + return nil, fmt.Errorf("node %q not found in node info", nodeName) + } + rpc := fmt.Sprintf("%s/ext/bc/%s/rpc", nodeInfo.Uri, chain.ChainId) nodeRPC := rpcpb.NodeRpc{ NodeName: nodeName, Rpc: rpc,