// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.26.0
// 	protoc        v3.9.1
// source: p2p.proto

package types

import (
	context "context"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

//*
// 请求获取远程节点的节点信息
type P2PGetPeerInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	/// p2p版本
	Version int32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"`
}

func (x *P2PGetPeerInfo) Reset() {
	*x = P2PGetPeerInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PGetPeerInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PGetPeerInfo) ProtoMessage() {}

func (x *P2PGetPeerInfo) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[0]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use P2PGetPeerInfo.ProtoReflect.Descriptor instead.
func (*P2PGetPeerInfo) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{0}
}

func (x *P2PGetPeerInfo) GetVersion() int32 {
	if x != nil {
		return x.Version
	}
	return 0
}

//*
// 节点信息
type P2PPeerInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	///节点的IP地址
	Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
	///节点的外网端口
	Port int32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"`
	///节点的名称
	Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
	/// mempool 的大小
	MempoolSize int32 `protobuf:"varint,4,opt,name=mempoolSize,proto3" json:"mempoolSize,omitempty"`
	///节点当前高度头部数据
	Header         *Header `protobuf:"bytes,5,opt,name=header,proto3" json:"header,omitempty"`
	Version        string  `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"`
	LocalDBVersion string  `protobuf:"bytes,7,opt,name=localDBVersion,proto3" json:"localDBVersion,omitempty"`
	StoreDBVersion string  `protobuf:"bytes,8,opt,name=storeDBVersion,proto3" json:"storeDBVersion,omitempty"`
	RunningTime    string  `protobuf:"bytes,9,opt,name=runningTime,proto3" json:"runningTime,omitempty"`
	FullNode       bool    `protobuf:"varint,10,opt,name=fullNode,proto3" json:"fullNode,omitempty"`
	Blocked        bool    `protobuf:"varint,11,opt,name=blocked,proto3" json:"blocked,omitempty"`
}

func (x *P2PPeerInfo) Reset() {
	*x = P2PPeerInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PPeerInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PPeerInfo) ProtoMessage() {}

func (x *P2PPeerInfo) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[1]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use P2PPeerInfo.ProtoReflect.Descriptor instead.
func (*P2PPeerInfo) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{1}
}

func (x *P2PPeerInfo) GetAddr() string {
	if x != nil {
		return x.Addr
	}
	return ""
}

func (x *P2PPeerInfo) GetPort() int32 {
	if x != nil {
		return x.Port
	}
	return 0
}

func (x *P2PPeerInfo) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *P2PPeerInfo) GetMempoolSize() int32 {
	if x != nil {
		return x.MempoolSize
	}
	return 0
}

func (x *P2PPeerInfo) GetHeader() *Header {
	if x != nil {
		return x.Header
	}
	return nil
}

func (x *P2PPeerInfo) GetVersion() string {
	if x != nil {
		return x.Version
	}
	return ""
}

func (x *P2PPeerInfo) GetLocalDBVersion() string {
	if x != nil {
		return x.LocalDBVersion
	}
	return ""
}

func (x *P2PPeerInfo) GetStoreDBVersion() string {
	if x != nil {
		return x.StoreDBVersion
	}
	return ""
}

func (x *P2PPeerInfo) GetRunningTime() string {
	if x != nil {
		return x.RunningTime
	}
	return ""
}

func (x *P2PPeerInfo) GetFullNode() bool {
	if x != nil {
		return x.FullNode
	}
	return false
}

func (x *P2PPeerInfo) GetBlocked() bool {
	if x != nil {
		return x.Blocked
	}
	return false
}

//*
// p2p节点间发送版本数据结构
type P2PVersion struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	///当前版本
	Version int32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"`
	///服务类型
	Service int64 `protobuf:"varint,2,opt,name=service,proto3" json:"service,omitempty"`
	///时间戳
	Timestamp int64 `protobuf:"varint,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
	///数据包的目的地址
	AddrRecv string `protobuf:"bytes,4,opt,name=addrRecv,proto3" json:"addrRecv,omitempty"`
	///数据发送的源地址
	AddrFrom string `protobuf:"bytes,5,opt,name=addrFrom,proto3" json:"addrFrom,omitempty"`
	///随机数
	Nonce int64 `protobuf:"varint,6,opt,name=nonce,proto3" json:"nonce,omitempty"`
	///用户代理
	UserAgent string `protobuf:"bytes,7,opt,name=userAgent,proto3" json:"userAgent,omitempty"`
	///当前节点的高度
	StartHeight int64 `protobuf:"varint,8,opt,name=startHeight,proto3" json:"startHeight,omitempty"`
}

func (x *P2PVersion) Reset() {
	*x = P2PVersion{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[2]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PVersion) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PVersion) ProtoMessage() {}

func (x *P2PVersion) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[2]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use P2PVersion.ProtoReflect.Descriptor instead.
func (*P2PVersion) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{2}
}

func (x *P2PVersion) GetVersion() int32 {
	if x != nil {
		return x.Version
	}
	return 0
}

func (x *P2PVersion) GetService() int64 {
	if x != nil {
		return x.Service
	}
	return 0
}

func (x *P2PVersion) GetTimestamp() int64 {
	if x != nil {
		return x.Timestamp
	}
	return 0
}

func (x *P2PVersion) GetAddrRecv() string {
	if x != nil {
		return x.AddrRecv
	}
	return ""
}

func (x *P2PVersion) GetAddrFrom() string {
	if x != nil {
		return x.AddrFrom
	}
	return ""
}

func (x *P2PVersion) GetNonce() int64 {
	if x != nil {
		return x.Nonce
	}
	return 0
}

func (x *P2PVersion) GetUserAgent() string {
	if x != nil {
		return x.UserAgent
	}
	return ""
}

func (x *P2PVersion) GetStartHeight() int64 {
	if x != nil {
		return x.StartHeight
	}
	return 0
}

//*
// P2P 版本返回
type P2PVerAck struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Version int32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"`
	Service int64 `protobuf:"varint,2,opt,name=service,proto3" json:"service,omitempty"`
	Nonce   int64 `protobuf:"varint,3,opt,name=nonce,proto3" json:"nonce,omitempty"`
}

func (x *P2PVerAck) Reset() {
	*x = P2PVerAck{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[3]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PVerAck) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PVerAck) ProtoMessage() {}

func (x *P2PVerAck) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[3]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use P2PVerAck.ProtoReflect.Descriptor instead.
func (*P2PVerAck) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{3}
}

func (x *P2PVerAck) GetVersion() int32 {
	if x != nil {
		return x.Version
	}
	return 0
}

func (x *P2PVerAck) GetService() int64 {
	if x != nil {
		return x.Service
	}
	return 0
}

func (x *P2PVerAck) GetNonce() int64 {
	if x != nil {
		return x.Nonce
	}
	return 0
}

//*
// P2P 心跳包
type P2PPing struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	///随机数
	Nonce int64 `protobuf:"varint,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
	///节点的外网地址
	Addr string `protobuf:"bytes,2,opt,name=addr,proto3" json:"addr,omitempty"`
	///节点的外网端口
	Port int32 `protobuf:"varint,3,opt,name=port,proto3" json:"port,omitempty"`
	//签名
	Sign *Signature `protobuf:"bytes,4,opt,name=sign,proto3" json:"sign,omitempty"`
}

func (x *P2PPing) Reset() {
	*x = P2PPing{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[4]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PPing) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PPing) ProtoMessage() {}

func (x *P2PPing) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[4]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use P2PPing.ProtoReflect.Descriptor instead.
func (*P2PPing) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{4}
}

func (x *P2PPing) GetNonce() int64 {
	if x != nil {
		return x.Nonce
	}
	return 0
}

func (x *P2PPing) GetAddr() string {
	if x != nil {
		return x.Addr
	}
	return ""
}

func (x *P2PPing) GetPort() int32 {
	if x != nil {
		return x.Port
	}
	return 0
}

func (x *P2PPing) GetSign() *Signature {
	if x != nil {
		return x.Sign
	}
	return nil
}

//*
// 心跳返回包
type P2PPong struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Nonce int64 `protobuf:"varint,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
}

func (x *P2PPong) Reset() {
	*x = P2PPong{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[5]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PPong) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PPong) ProtoMessage() {}

func (x *P2PPong) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[5]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use P2PPong.ProtoReflect.Descriptor instead.
func (*P2PPong) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{5}
}

func (x *P2PPong) GetNonce() int64 {
	if x != nil {
		return x.Nonce
	}
	return 0
}

//*
// 获取对方节点所连接的其他节点地址的请求包
type P2PGetAddr struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Nonce int64 `protobuf:"varint,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
}

func (x *P2PGetAddr) Reset() {
	*x = P2PGetAddr{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[6]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PGetAddr) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PGetAddr) ProtoMessage() {}

func (x *P2PGetAddr) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[6]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use P2PGetAddr.ProtoReflect.Descriptor instead.
func (*P2PGetAddr) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{6}
}

func (x *P2PGetAddr) GetNonce() int64 {
	if x != nil {
		return x.Nonce
	}
	return 0
}

//*
// 返回请求地址列表的社保
type P2PAddr struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Nonce int64 `protobuf:"varint,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
	///对方节点返回的其他节点信息
	Addrlist []string `protobuf:"bytes,2,rep,name=addrlist,proto3" json:"addrlist,omitempty"`
}

func (x *P2PAddr) Reset() {
	*x = P2PAddr{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[7]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PAddr) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PAddr) ProtoMessage() {}

func (x *P2PAddr) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[7]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use P2PAddr.ProtoReflect.Descriptor instead.
func (*P2PAddr) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{7}
}

func (x *P2PAddr) GetNonce() int64 {
	if x != nil {
		return x.Nonce
	}
	return 0
}

func (x *P2PAddr) GetAddrlist() []string {
	if x != nil {
		return x.Addrlist
	}
	return nil
}

type P2PAddrList struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Nonce    int64          `protobuf:"varint,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
	Peerinfo []*P2PPeerInfo `protobuf:"bytes,2,rep,name=peerinfo,proto3" json:"peerinfo,omitempty"`
}

func (x *P2PAddrList) Reset() {
	*x = P2PAddrList{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[8]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PAddrList) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PAddrList) ProtoMessage() {}

func (x *P2PAddrList) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[8]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use P2PAddrList.ProtoReflect.Descriptor instead.
func (*P2PAddrList) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{8}
}

func (x *P2PAddrList) GetNonce() int64 {
	if x != nil {
		return x.Nonce
	}
	return 0
}

func (x *P2PAddrList) GetPeerinfo() []*P2PPeerInfo {
	if x != nil {
		return x.Peerinfo
	}
	return nil
}

//*
// 节点外网信息
type P2PExternalInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	///节点的外网地址
	Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
	//节点是否在外网
	Isoutside bool `protobuf:"varint,2,opt,name=isoutside,proto3" json:"isoutside,omitempty"`
}

func (x *P2PExternalInfo) Reset() {
	*x = P2PExternalInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[9]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PExternalInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PExternalInfo) ProtoMessage() {}

func (x *P2PExternalInfo) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[9]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use P2PExternalInfo.ProtoReflect.Descriptor instead.
func (*P2PExternalInfo) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{9}
}

func (x *P2PExternalInfo) GetAddr() string {
	if x != nil {
		return x.Addr
	}
	return ""
}

func (x *P2PExternalInfo) GetIsoutside() bool {
	if x != nil {
		return x.Isoutside
	}
	return false
}

//*
// 获取区间区块
type P2PGetBlocks struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Version     int32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"`
	StartHeight int64 `protobuf:"varint,2,opt,name=startHeight,proto3" json:"startHeight,omitempty"`
	EndHeight   int64 `protobuf:"varint,3,opt,name=endHeight,proto3" json:"endHeight,omitempty"`
}

func (x *P2PGetBlocks) Reset() {
	*x = P2PGetBlocks{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[10]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PGetBlocks) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PGetBlocks) ProtoMessage() {}

func (x *P2PGetBlocks) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[10]
	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 P2PGetBlocks.ProtoReflect.Descriptor instead.
func (*P2PGetBlocks) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{10}
}

func (x *P2PGetBlocks) GetVersion() int32 {
	if x != nil {
		return x.Version
	}
	return 0
}

func (x *P2PGetBlocks) GetStartHeight() int64 {
	if x != nil {
		return x.StartHeight
	}
	return 0
}

func (x *P2PGetBlocks) GetEndHeight() int64 {
	if x != nil {
		return x.EndHeight
	}
	return 0
}

//*
// 获取mempool
type P2PGetMempool struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Version int32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"`
}

func (x *P2PGetMempool) Reset() {
	*x = P2PGetMempool{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[11]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PGetMempool) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PGetMempool) ProtoMessage() {}

func (x *P2PGetMempool) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[11]
	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 P2PGetMempool.ProtoReflect.Descriptor instead.
func (*P2PGetMempool) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{11}
}

func (x *P2PGetMempool) GetVersion() int32 {
	if x != nil {
		return x.Version
	}
	return 0
}

type P2PInv struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Invs []*Inventory `protobuf:"bytes,1,rep,name=invs,proto3" json:"invs,omitempty"`
}

func (x *P2PInv) Reset() {
	*x = P2PInv{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[12]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PInv) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PInv) ProtoMessage() {}

func (x *P2PInv) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[12]
	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 P2PInv.ProtoReflect.Descriptor instead.
func (*P2PInv) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{12}
}

func (x *P2PInv) GetInvs() []*Inventory {
	if x != nil {
		return x.Invs
	}
	return nil
}

// ty=MSG_TX MSG_BLOCK
type Inventory struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	//类型，数据类型，MSG_TX MSG_BLOCK
	Ty int32 `protobuf:"varint,1,opt,name=ty,proto3" json:"ty,omitempty"`
	///哈希
	Hash []byte `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"`
	//高度
	Height int64 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"`
}

func (x *Inventory) Reset() {
	*x = Inventory{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[13]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Inventory) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Inventory) ProtoMessage() {}

func (x *Inventory) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[13]
	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 Inventory.ProtoReflect.Descriptor instead.
func (*Inventory) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{13}
}

func (x *Inventory) GetTy() int32 {
	if x != nil {
		return x.Ty
	}
	return 0
}

func (x *Inventory) GetHash() []byte {
	if x != nil {
		return x.Hash
	}
	return nil
}

func (x *Inventory) GetHeight() int64 {
	if x != nil {
		return x.Height
	}
	return 0
}

//*
// 通过invs 下载数据
type P2PGetData struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	/// p2p版本
	Version int32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"`
	/// invs 数组
	Invs []*Inventory `protobuf:"bytes,2,rep,name=invs,proto3" json:"invs,omitempty"`
}

func (x *P2PGetData) Reset() {
	*x = P2PGetData{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[14]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PGetData) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PGetData) ProtoMessage() {}

func (x *P2PGetData) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[14]
	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 P2PGetData.ProtoReflect.Descriptor instead.
func (*P2PGetData) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{14}
}

func (x *P2PGetData) GetVersion() int32 {
	if x != nil {
		return x.Version
	}
	return 0
}

func (x *P2PGetData) GetInvs() []*Inventory {
	if x != nil {
		return x.Invs
	}
	return nil
}

//
type P2PRoute struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	TTL int32 `protobuf:"varint,1,opt,name=TTL,proto3" json:"TTL,omitempty"`
}

func (x *P2PRoute) Reset() {
	*x = P2PRoute{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[15]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PRoute) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PRoute) ProtoMessage() {}

func (x *P2PRoute) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[15]
	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 P2PRoute.ProtoReflect.Descriptor instead.
func (*P2PRoute) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{15}
}

func (x *P2PRoute) GetTTL() int32 {
	if x != nil {
		return x.TTL
	}
	return 0
}

//*
// p2p 发送交易协议
type P2PTx struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Tx    *Transaction `protobuf:"bytes,1,opt,name=tx,proto3" json:"tx,omitempty"`
	Route *P2PRoute    `protobuf:"bytes,2,opt,name=route,proto3" json:"route,omitempty"`
}

func (x *P2PTx) Reset() {
	*x = P2PTx{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[16]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PTx) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PTx) ProtoMessage() {}

func (x *P2PTx) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[16]
	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 P2PTx.ProtoReflect.Descriptor instead.
func (*P2PTx) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{16}
}

func (x *P2PTx) GetTx() *Transaction {
	if x != nil {
		return x.Tx
	}
	return nil
}

func (x *P2PTx) GetRoute() *P2PRoute {
	if x != nil {
		return x.Route
	}
	return nil
}

//*
// p2p 发送区块协议
type P2PBlock struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Block *Block `protobuf:"bytes,1,opt,name=block,proto3" json:"block,omitempty"`
}

func (x *P2PBlock) Reset() {
	*x = P2PBlock{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[17]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PBlock) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PBlock) ProtoMessage() {}

func (x *P2PBlock) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[17]
	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 P2PBlock.ProtoReflect.Descriptor instead.
func (*P2PBlock) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{17}
}

func (x *P2PBlock) GetBlock() *Block {
	if x != nil {
		return x.Block
	}
	return nil
}

//*
// p2p 轻量级区块, 广播交易短哈希列表
type LightBlock struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Size      int64        `protobuf:"varint,1,opt,name=size,proto3" json:"size,omitempty"`
	Header    *Header      `protobuf:"bytes,2,opt,name=header,proto3" json:"header,omitempty"`
	MinerTx   *Transaction `protobuf:"bytes,3,opt,name=minerTx,proto3" json:"minerTx,omitempty"`
	STxHashes []string     `protobuf:"bytes,4,rep,name=sTxHashes,proto3" json:"sTxHashes,omitempty"`
}

func (x *LightBlock) Reset() {
	*x = LightBlock{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[18]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *LightBlock) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LightBlock) ProtoMessage() {}

func (x *LightBlock) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[18]
	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 LightBlock.ProtoReflect.Descriptor instead.
func (*LightBlock) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{18}
}

func (x *LightBlock) GetSize() int64 {
	if x != nil {
		return x.Size
	}
	return 0
}

func (x *LightBlock) GetHeader() *Header {
	if x != nil {
		return x.Header
	}
	return nil
}

func (x *LightBlock) GetMinerTx() *Transaction {
	if x != nil {
		return x.MinerTx
	}
	return nil
}

func (x *LightBlock) GetSTxHashes() []string {
	if x != nil {
		return x.STxHashes
	}
	return nil
}

// dht pub sub 通信数据
type PeerPubSubMsg struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	MsgID    int32  `protobuf:"varint,1,opt,name=msgID,proto3" json:"msgID,omitempty"`
	ProtoMsg []byte `protobuf:"bytes,2,opt,name=protoMsg,proto3" json:"protoMsg,omitempty"`
}

func (x *PeerPubSubMsg) Reset() {
	*x = PeerPubSubMsg{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[19]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *PeerPubSubMsg) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*PeerPubSubMsg) ProtoMessage() {}

func (x *PeerPubSubMsg) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[19]
	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 PeerPubSubMsg.ProtoReflect.Descriptor instead.
func (*PeerPubSubMsg) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{19}
}

func (x *PeerPubSubMsg) GetMsgID() int32 {
	if x != nil {
		return x.MsgID
	}
	return 0
}

func (x *PeerPubSubMsg) GetProtoMsg() []byte {
	if x != nil {
		return x.ProtoMsg
	}
	return nil
}

// 轻量级交易广播
type LightTx struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	TxHash []byte    `protobuf:"bytes,1,opt,name=txHash,proto3" json:"txHash,omitempty"`
	Route  *P2PRoute `protobuf:"bytes,2,opt,name=route,proto3" json:"route,omitempty"`
}

func (x *LightTx) Reset() {
	*x = LightTx{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[20]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *LightTx) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LightTx) ProtoMessage() {}

func (x *LightTx) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[20]
	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 LightTx.ProtoReflect.Descriptor instead.
func (*LightTx) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{20}
}

func (x *LightTx) GetTxHash() []byte {
	if x != nil {
		return x.TxHash
	}
	return nil
}

func (x *LightTx) GetRoute() *P2PRoute {
	if x != nil {
		return x.Route
	}
	return nil
}

// 请求完整交易数据
type P2PTxReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	TxHash []byte `protobuf:"bytes,1,opt,name=txHash,proto3" json:"txHash,omitempty"`
}

func (x *P2PTxReq) Reset() {
	*x = P2PTxReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[21]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PTxReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PTxReq) ProtoMessage() {}

func (x *P2PTxReq) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[21]
	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 P2PTxReq.ProtoReflect.Descriptor instead.
func (*P2PTxReq) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{21}
}

func (x *P2PTxReq) GetTxHash() []byte {
	if x != nil {
		return x.TxHash
	}
	return nil
}

// 请求区块内交易数据
type P2PBlockTxReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	BlockHash string  `protobuf:"bytes,1,opt,name=blockHash,proto3" json:"blockHash,omitempty"`
	TxIndices []int32 `protobuf:"varint,2,rep,packed,name=txIndices,proto3" json:"txIndices,omitempty"`
}

func (x *P2PBlockTxReq) Reset() {
	*x = P2PBlockTxReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[22]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PBlockTxReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PBlockTxReq) ProtoMessage() {}

func (x *P2PBlockTxReq) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[22]
	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 P2PBlockTxReq.ProtoReflect.Descriptor instead.
func (*P2PBlockTxReq) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{22}
}

func (x *P2PBlockTxReq) GetBlockHash() string {
	if x != nil {
		return x.BlockHash
	}
	return ""
}

func (x *P2PBlockTxReq) GetTxIndices() []int32 {
	if x != nil {
		return x.TxIndices
	}
	return nil
}

// 区块交易数据返回
type P2PBlockTxReply struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	BlockHash string         `protobuf:"bytes,1,opt,name=blockHash,proto3" json:"blockHash,omitempty"`
	TxIndices []int32        `protobuf:"varint,2,rep,packed,name=txIndices,proto3" json:"txIndices,omitempty"`
	Txs       []*Transaction `protobuf:"bytes,3,rep,name=txs,proto3" json:"txs,omitempty"`
}

func (x *P2PBlockTxReply) Reset() {
	*x = P2PBlockTxReply{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[23]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PBlockTxReply) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PBlockTxReply) ProtoMessage() {}

func (x *P2PBlockTxReply) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[23]
	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 P2PBlockTxReply.ProtoReflect.Descriptor instead.
func (*P2PBlockTxReply) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{23}
}

func (x *P2PBlockTxReply) GetBlockHash() string {
	if x != nil {
		return x.BlockHash
	}
	return ""
}

func (x *P2PBlockTxReply) GetTxIndices() []int32 {
	if x != nil {
		return x.TxIndices
	}
	return nil
}

func (x *P2PBlockTxReply) GetTxs() []*Transaction {
	if x != nil {
		return x.Txs
	}
	return nil
}

// 节点收到区块或交易hash,
// 当在本地不存在时,需要请求重发完整交易或区块
// 采用统一结构减少消息类型
type P2PQueryData struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Types that are assignable to Value:
	//	*P2PQueryData_TxReq
	//	*P2PQueryData_BlockTxReq
	Value isP2PQueryData_Value `protobuf_oneof:"value"`
}

func (x *P2PQueryData) Reset() {
	*x = P2PQueryData{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[24]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PQueryData) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PQueryData) ProtoMessage() {}

func (x *P2PQueryData) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[24]
	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 P2PQueryData.ProtoReflect.Descriptor instead.
func (*P2PQueryData) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{24}
}

func (m *P2PQueryData) GetValue() isP2PQueryData_Value {
	if m != nil {
		return m.Value
	}
	return nil
}

func (x *P2PQueryData) GetTxReq() *P2PTxReq {
	if x, ok := x.GetValue().(*P2PQueryData_TxReq); ok {
		return x.TxReq
	}
	return nil
}

func (x *P2PQueryData) GetBlockTxReq() *P2PBlockTxReq {
	if x, ok := x.GetValue().(*P2PQueryData_BlockTxReq); ok {
		return x.BlockTxReq
	}
	return nil
}

type isP2PQueryData_Value interface {
	isP2PQueryData_Value()
}

type P2PQueryData_TxReq struct {
	TxReq *P2PTxReq `protobuf:"bytes,1,opt,name=txReq,proto3,oneof"`
}

type P2PQueryData_BlockTxReq struct {
	BlockTxReq *P2PBlockTxReq `protobuf:"bytes,2,opt,name=blockTxReq,proto3,oneof"`
}

func (*P2PQueryData_TxReq) isP2PQueryData_Value() {}

func (*P2PQueryData_BlockTxReq) isP2PQueryData_Value() {}

//*
// p2p 协议和软件版本
type Versions struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	P2Pversion  int32  `protobuf:"varint,1,opt,name=p2pversion,proto3" json:"p2pversion,omitempty"`
	Softversion string `protobuf:"bytes,2,opt,name=softversion,proto3" json:"softversion,omitempty"`
	Peername    string `protobuf:"bytes,3,opt,name=peername,proto3" json:"peername,omitempty"`
}

func (x *Versions) Reset() {
	*x = Versions{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[25]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Versions) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Versions) ProtoMessage() {}

func (x *Versions) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[25]
	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 Versions.ProtoReflect.Descriptor instead.
func (*Versions) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{25}
}

func (x *Versions) GetP2Pversion() int32 {
	if x != nil {
		return x.P2Pversion
	}
	return 0
}

func (x *Versions) GetSoftversion() string {
	if x != nil {
		return x.Softversion
	}
	return ""
}

func (x *Versions) GetPeername() string {
	if x != nil {
		return x.Peername
	}
	return ""
}

//*
// p2p 广播数据协议
type BroadCastData struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Types that are assignable to Value:
	//	*BroadCastData_Tx
	//	*BroadCastData_Block
	//	*BroadCastData_Ping
	//	*BroadCastData_Version
	//	*BroadCastData_LtTx
	//	*BroadCastData_LtBlock
	//	*BroadCastData_Query
	//	*BroadCastData_BlockRep
	Value isBroadCastData_Value `protobuf_oneof:"value"`
}

func (x *BroadCastData) Reset() {
	*x = BroadCastData{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[26]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BroadCastData) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BroadCastData) ProtoMessage() {}

func (x *BroadCastData) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[26]
	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 BroadCastData.ProtoReflect.Descriptor instead.
func (*BroadCastData) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{26}
}

func (m *BroadCastData) GetValue() isBroadCastData_Value {
	if m != nil {
		return m.Value
	}
	return nil
}

func (x *BroadCastData) GetTx() *P2PTx {
	if x, ok := x.GetValue().(*BroadCastData_Tx); ok {
		return x.Tx
	}
	return nil
}

func (x *BroadCastData) GetBlock() *P2PBlock {
	if x, ok := x.GetValue().(*BroadCastData_Block); ok {
		return x.Block
	}
	return nil
}

func (x *BroadCastData) GetPing() *P2PPing {
	if x, ok := x.GetValue().(*BroadCastData_Ping); ok {
		return x.Ping
	}
	return nil
}

func (x *BroadCastData) GetVersion() *Versions {
	if x, ok := x.GetValue().(*BroadCastData_Version); ok {
		return x.Version
	}
	return nil
}

func (x *BroadCastData) GetLtTx() *LightTx {
	if x, ok := x.GetValue().(*BroadCastData_LtTx); ok {
		return x.LtTx
	}
	return nil
}

func (x *BroadCastData) GetLtBlock() *LightBlock {
	if x, ok := x.GetValue().(*BroadCastData_LtBlock); ok {
		return x.LtBlock
	}
	return nil
}

func (x *BroadCastData) GetQuery() *P2PQueryData {
	if x, ok := x.GetValue().(*BroadCastData_Query); ok {
		return x.Query
	}
	return nil
}

func (x *BroadCastData) GetBlockRep() *P2PBlockTxReply {
	if x, ok := x.GetValue().(*BroadCastData_BlockRep); ok {
		return x.BlockRep
	}
	return nil
}

type isBroadCastData_Value interface {
	isBroadCastData_Value()
}

type BroadCastData_Tx struct {
	Tx *P2PTx `protobuf:"bytes,1,opt,name=tx,proto3,oneof"`
}

type BroadCastData_Block struct {
	Block *P2PBlock `protobuf:"bytes,2,opt,name=block,proto3,oneof"`
}

type BroadCastData_Ping struct {
	Ping *P2PPing `protobuf:"bytes,3,opt,name=ping,proto3,oneof"`
}

type BroadCastData_Version struct {
	Version *Versions `protobuf:"bytes,4,opt,name=version,proto3,oneof"`
}

type BroadCastData_LtTx struct {
	LtTx *LightTx `protobuf:"bytes,5,opt,name=ltTx,proto3,oneof"`
}

type BroadCastData_LtBlock struct {
	LtBlock *LightBlock `protobuf:"bytes,6,opt,name=ltBlock,proto3,oneof"`
}

type BroadCastData_Query struct {
	Query *P2PQueryData `protobuf:"bytes,7,opt,name=query,proto3,oneof"`
}

type BroadCastData_BlockRep struct {
	BlockRep *P2PBlockTxReply `protobuf:"bytes,8,opt,name=blockRep,proto3,oneof"`
}

func (*BroadCastData_Tx) isBroadCastData_Value() {}

func (*BroadCastData_Block) isBroadCastData_Value() {}

func (*BroadCastData_Ping) isBroadCastData_Value() {}

func (*BroadCastData_Version) isBroadCastData_Value() {}

func (*BroadCastData_LtTx) isBroadCastData_Value() {}

func (*BroadCastData_LtBlock) isBroadCastData_Value() {}

func (*BroadCastData_Query) isBroadCastData_Value() {}

func (*BroadCastData_BlockRep) isBroadCastData_Value() {}

//*
// p2p 获取区块区间头部信息协议
type P2PGetHeaders struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Version     int32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"`
	StartHeight int64 `protobuf:"varint,2,opt,name=startHeight,proto3" json:"startHeight,omitempty"`
	EndHeight   int64 `protobuf:"varint,3,opt,name=endHeight,proto3" json:"endHeight,omitempty"`
}

func (x *P2PGetHeaders) Reset() {
	*x = P2PGetHeaders{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[27]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PGetHeaders) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PGetHeaders) ProtoMessage() {}

func (x *P2PGetHeaders) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[27]
	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 P2PGetHeaders.ProtoReflect.Descriptor instead.
func (*P2PGetHeaders) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{27}
}

func (x *P2PGetHeaders) GetVersion() int32 {
	if x != nil {
		return x.Version
	}
	return 0
}

func (x *P2PGetHeaders) GetStartHeight() int64 {
	if x != nil {
		return x.StartHeight
	}
	return 0
}

func (x *P2PGetHeaders) GetEndHeight() int64 {
	if x != nil {
		return x.EndHeight
	}
	return 0
}

//*
// p2p 区块头传输协议
type P2PHeaders struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Headers []*Header `protobuf:"bytes,1,rep,name=headers,proto3" json:"headers,omitempty"`
}

func (x *P2PHeaders) Reset() {
	*x = P2PHeaders{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[28]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PHeaders) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PHeaders) ProtoMessage() {}

func (x *P2PHeaders) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[28]
	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 P2PHeaders.ProtoReflect.Descriptor instead.
func (*P2PHeaders) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{28}
}

func (x *P2PHeaders) GetHeaders() []*Header {
	if x != nil {
		return x.Headers
	}
	return nil
}

//*
// inv 请求协议
type InvData struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Types that are assignable to Value:
	//	*InvData_Tx
	//	*InvData_Block
	Value isInvData_Value `protobuf_oneof:"value"`
	Ty    int32           `protobuf:"varint,3,opt,name=ty,proto3" json:"ty,omitempty"`
}

func (x *InvData) Reset() {
	*x = InvData{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[29]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *InvData) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*InvData) ProtoMessage() {}

func (x *InvData) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[29]
	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 InvData.ProtoReflect.Descriptor instead.
func (*InvData) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{29}
}

func (m *InvData) GetValue() isInvData_Value {
	if m != nil {
		return m.Value
	}
	return nil
}

func (x *InvData) GetTx() *Transaction {
	if x, ok := x.GetValue().(*InvData_Tx); ok {
		return x.Tx
	}
	return nil
}

func (x *InvData) GetBlock() *Block {
	if x, ok := x.GetValue().(*InvData_Block); ok {
		return x.Block
	}
	return nil
}

func (x *InvData) GetTy() int32 {
	if x != nil {
		return x.Ty
	}
	return 0
}

type isInvData_Value interface {
	isInvData_Value()
}

type InvData_Tx struct {
	Tx *Transaction `protobuf:"bytes,1,opt,name=tx,proto3,oneof"`
}

type InvData_Block struct {
	Block *Block `protobuf:"bytes,2,opt,name=block,proto3,oneof"`
}

func (*InvData_Tx) isInvData_Value() {}

func (*InvData_Block) isInvData_Value() {}

//*
// inv 返回数据
type InvDatas struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Items []*InvData `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
}

func (x *InvDatas) Reset() {
	*x = InvDatas{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[30]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *InvDatas) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*InvDatas) ProtoMessage() {}

func (x *InvDatas) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[30]
	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 InvDatas.ProtoReflect.Descriptor instead.
func (*InvDatas) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{30}
}

func (x *InvDatas) GetItems() []*InvData {
	if x != nil {
		return x.Items
	}
	return nil
}

//*
// peer 信息
type Peer struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Addr           string      `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
	Port           int32       `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"`
	Name           string      `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
	Self           bool        `protobuf:"varint,4,opt,name=self,proto3" json:"self,omitempty"`
	MempoolSize    int32       `protobuf:"varint,5,opt,name=mempoolSize,proto3" json:"mempoolSize,omitempty"`
	Header         *Header     `protobuf:"bytes,6,opt,name=header,proto3" json:"header,omitempty"`
	Version        string      `protobuf:"bytes,7,opt,name=version,proto3" json:"version,omitempty"`
	LocalDBVersion string      `protobuf:"bytes,8,opt,name=localDBVersion,proto3" json:"localDBVersion,omitempty"`
	StoreDBVersion string      `protobuf:"bytes,9,opt,name=storeDBVersion,proto3" json:"storeDBVersion,omitempty"`
	RunningTime    string      `protobuf:"bytes,10,opt,name=runningTime,proto3" json:"runningTime,omitempty"`
	FullNode       bool        `protobuf:"varint,11,opt,name=fullNode,proto3" json:"fullNode,omitempty"`
	Blocked        bool        `protobuf:"varint,12,opt,name=blocked,proto3" json:"blocked,omitempty"`
	Finalized      *SnowChoice `protobuf:"bytes,13,opt,name=finalized,proto3" json:"finalized,omitempty"`
}

func (x *Peer) Reset() {
	*x = Peer{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[31]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Peer) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Peer) ProtoMessage() {}

func (x *Peer) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[31]
	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 Peer.ProtoReflect.Descriptor instead.
func (*Peer) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{31}
}

func (x *Peer) GetAddr() string {
	if x != nil {
		return x.Addr
	}
	return ""
}

func (x *Peer) GetPort() int32 {
	if x != nil {
		return x.Port
	}
	return 0
}

func (x *Peer) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *Peer) GetSelf() bool {
	if x != nil {
		return x.Self
	}
	return false
}

func (x *Peer) GetMempoolSize() int32 {
	if x != nil {
		return x.MempoolSize
	}
	return 0
}

func (x *Peer) GetHeader() *Header {
	if x != nil {
		return x.Header
	}
	return nil
}

func (x *Peer) GetVersion() string {
	if x != nil {
		return x.Version
	}
	return ""
}

func (x *Peer) GetLocalDBVersion() string {
	if x != nil {
		return x.LocalDBVersion
	}
	return ""
}

func (x *Peer) GetStoreDBVersion() string {
	if x != nil {
		return x.StoreDBVersion
	}
	return ""
}

func (x *Peer) GetRunningTime() string {
	if x != nil {
		return x.RunningTime
	}
	return ""
}

func (x *Peer) GetFullNode() bool {
	if x != nil {
		return x.FullNode
	}
	return false
}

func (x *Peer) GetBlocked() bool {
	if x != nil {
		return x.Blocked
	}
	return false
}

func (x *Peer) GetFinalized() *SnowChoice {
	if x != nil {
		return x.Finalized
	}
	return nil
}

//*
// peer 列表
type PeerList struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Peers []*Peer `protobuf:"bytes,1,rep,name=peers,proto3" json:"peers,omitempty"`
}

func (x *PeerList) Reset() {
	*x = PeerList{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[32]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *PeerList) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*PeerList) ProtoMessage() {}

func (x *PeerList) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[32]
	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 PeerList.ProtoReflect.Descriptor instead.
func (*PeerList) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{32}
}

func (x *PeerList) GetPeers() []*Peer {
	if x != nil {
		return x.Peers
	}
	return nil
}

//*
// p2p get peer req
type P2PGetPeerReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	P2PType string `protobuf:"bytes,1,opt,name=p2pType,proto3" json:"p2pType,omitempty"`
}

func (x *P2PGetPeerReq) Reset() {
	*x = P2PGetPeerReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[33]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PGetPeerReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PGetPeerReq) ProtoMessage() {}

func (x *P2PGetPeerReq) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[33]
	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 P2PGetPeerReq.ProtoReflect.Descriptor instead.
func (*P2PGetPeerReq) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{33}
}

func (x *P2PGetPeerReq) GetP2PType() string {
	if x != nil {
		return x.P2PType
	}
	return ""
}

//*
// p2p get net info req
type P2PGetNetInfoReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	P2PType string `protobuf:"bytes,1,opt,name=p2pType,proto3" json:"p2pType,omitempty"`
}

func (x *P2PGetNetInfoReq) Reset() {
	*x = P2PGetNetInfoReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[34]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *P2PGetNetInfoReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*P2PGetNetInfoReq) ProtoMessage() {}

func (x *P2PGetNetInfoReq) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[34]
	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 P2PGetNetInfoReq.ProtoReflect.Descriptor instead.
func (*P2PGetNetInfoReq) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{34}
}

func (x *P2PGetNetInfoReq) GetP2PType() string {
	if x != nil {
		return x.P2PType
	}
	return ""
}

//*
//当前节点的网络信息
type NodeNetInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Externaladdr string `protobuf:"bytes,1,opt,name=externaladdr,proto3" json:"externaladdr,omitempty"`
	Localaddr    string `protobuf:"bytes,2,opt,name=localaddr,proto3" json:"localaddr,omitempty"`
	Service      bool   `protobuf:"varint,3,opt,name=service,proto3" json:"service,omitempty"`
	Outbounds    int32  `protobuf:"varint,4,opt,name=outbounds,proto3" json:"outbounds,omitempty"`
	Inbounds     int32  `protobuf:"varint,5,opt,name=inbounds,proto3" json:"inbounds,omitempty"`
	Routingtable int32  `protobuf:"varint,6,opt,name=routingtable,proto3" json:"routingtable,omitempty"`
	Peerstore    int32  `protobuf:"varint,7,opt,name=peerstore,proto3" json:"peerstore,omitempty"`
	Ratein       string `protobuf:"bytes,8,opt,name=ratein,proto3" json:"ratein,omitempty"`
	Rateout      string `protobuf:"bytes,9,opt,name=rateout,proto3" json:"rateout,omitempty"`
	Ratetotal    string `protobuf:"bytes,10,opt,name=ratetotal,proto3" json:"ratetotal,omitempty"`
}

func (x *NodeNetInfo) Reset() {
	*x = NodeNetInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[35]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *NodeNetInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*NodeNetInfo) ProtoMessage() {}

func (x *NodeNetInfo) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[35]
	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 NodeNetInfo.ProtoReflect.Descriptor instead.
func (*NodeNetInfo) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{35}
}

func (x *NodeNetInfo) GetExternaladdr() string {
	if x != nil {
		return x.Externaladdr
	}
	return ""
}

func (x *NodeNetInfo) GetLocaladdr() string {
	if x != nil {
		return x.Localaddr
	}
	return ""
}

func (x *NodeNetInfo) GetService() bool {
	if x != nil {
		return x.Service
	}
	return false
}

func (x *NodeNetInfo) GetOutbounds() int32 {
	if x != nil {
		return x.Outbounds
	}
	return 0
}

func (x *NodeNetInfo) GetInbounds() int32 {
	if x != nil {
		return x.Inbounds
	}
	return 0
}

func (x *NodeNetInfo) GetRoutingtable() int32 {
	if x != nil {
		return x.Routingtable
	}
	return 0
}

func (x *NodeNetInfo) GetPeerstore() int32 {
	if x != nil {
		return x.Peerstore
	}
	return 0
}

func (x *NodeNetInfo) GetRatein() string {
	if x != nil {
		return x.Ratein
	}
	return ""
}

func (x *NodeNetInfo) GetRateout() string {
	if x != nil {
		return x.Rateout
	}
	return ""
}

func (x *NodeNetInfo) GetRatetotal() string {
	if x != nil {
		return x.Ratetotal
	}
	return ""
}

type PeersReply struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Peers []*PeersInfo `protobuf:"bytes,1,rep,name=peers,proto3" json:"peers,omitempty"`
}

func (x *PeersReply) Reset() {
	*x = PeersReply{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[36]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *PeersReply) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*PeersReply) ProtoMessage() {}

func (x *PeersReply) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[36]
	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 PeersReply.ProtoReflect.Descriptor instead.
func (*PeersReply) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{36}
}

func (x *PeersReply) GetPeers() []*PeersInfo {
	if x != nil {
		return x.Peers
	}
	return nil
}

type PeersInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Name        string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Ip          string `protobuf:"bytes,2,opt,name=ip,proto3" json:"ip,omitempty"`
	Port        int32  `protobuf:"varint,3,opt,name=port,proto3" json:"port,omitempty"`
	Softversion string `protobuf:"bytes,4,opt,name=softversion,proto3" json:"softversion,omitempty"`
	P2Pversion  int32  `protobuf:"varint,5,opt,name=p2pversion,proto3" json:"p2pversion,omitempty"`
}

func (x *PeersInfo) Reset() {
	*x = PeersInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_p2p_proto_msgTypes[37]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *PeersInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*PeersInfo) ProtoMessage() {}

func (x *PeersInfo) ProtoReflect() protoreflect.Message {
	mi := &file_p2p_proto_msgTypes[37]
	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 PeersInfo.ProtoReflect.Descriptor instead.
func (*PeersInfo) Descriptor() ([]byte, []int) {
	return file_p2p_proto_rawDescGZIP(), []int{37}
}

func (x *PeersInfo) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *PeersInfo) GetIp() string {
	if x != nil {
		return x.Ip
	}
	return ""
}

func (x *PeersInfo) GetPort() int32 {
	if x != nil {
		return x.Port
	}
	return 0
}

func (x *PeersInfo) GetSoftversion() string {
	if x != nil {
		return x.Softversion
	}
	return ""
}

func (x *PeersInfo) GetP2Pversion() int32 {
	if x != nil {
		return x.P2Pversion
	}
	return 0
}

var File_p2p_proto protoreflect.FileDescriptor

var file_p2p_proto_rawDesc = []byte{
	0x0a, 0x09, 0x70, 0x32, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x74, 0x79, 0x70,
	0x65, 0x73, 0x1a, 0x11, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x1a, 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0d, 0x73, 0x6e, 0x6f, 0x77, 0x6d, 0x61, 0x6e, 0x2e, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x22, 0x2a, 0x0a, 0x0e, 0x50, 0x32, 0x50, 0x47, 0x65, 0x74, 0x50, 0x65,
	0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
	0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
	0x22, 0xd4, 0x02, 0x0a, 0x0b, 0x50, 0x32, 0x50, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f,
	0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
	0x61, 0x64, 0x64, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b,
	0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
	0x05, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x25,
	0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d,
	0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68,
	0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
	0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12,
	0x26, 0x0a, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x44, 0x42, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
	0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x44, 0x42,
	0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x65,
	0x44, 0x42, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x0e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x42, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12,
	0x20, 0x0a, 0x0b, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d,
	0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x18, 0x0a, 0x20,
	0x01, 0x28, 0x08, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a,
	0x07, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07,
	0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x22, 0xec, 0x01, 0x0a, 0x0a, 0x50, 0x32, 0x50, 0x56,
	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
	0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
	0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x03, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69,
	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74,
	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x64, 0x64, 0x72,
	0x52, 0x65, 0x63, 0x76, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x64, 0x64, 0x72,
	0x52, 0x65, 0x63, 0x76, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x64, 0x64, 0x72, 0x46, 0x72, 0x6f, 0x6d,
	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x64, 0x64, 0x72, 0x46, 0x72, 0x6f, 0x6d,
	0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52,
	0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67,
	0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41,
	0x67, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69,
	0x67, 0x68, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74,
	0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x55, 0x0a, 0x09, 0x50, 0x32, 0x50, 0x56, 0x65, 0x72,
	0x41, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a,
	0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07,
	0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x6d, 0x0a,
	0x07, 0x50, 0x32, 0x50, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63,
	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x12,
	0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x64,
	0x64, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05,
	0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x24, 0x0a, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x04,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x69, 0x67,
	0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x04, 0x73, 0x69, 0x67, 0x6e, 0x22, 0x1f, 0x0a, 0x07,
	0x50, 0x32, 0x50, 0x50, 0x6f, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x22, 0x0a,
	0x0a, 0x50, 0x32, 0x50, 0x47, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6e,
	0x6f, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63,
	0x65, 0x22, 0x3b, 0x0a, 0x07, 0x50, 0x32, 0x50, 0x41, 0x64, 0x64, 0x72, 0x12, 0x14, 0x0a, 0x05,
	0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x6e,
	0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x64, 0x64, 0x72, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x02,
	0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x61, 0x64, 0x64, 0x72, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x53,
	0x0a, 0x0b, 0x50, 0x32, 0x50, 0x41, 0x64, 0x64, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x0a,
	0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f,
	0x6e, 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x18,
	0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32,
	0x50, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x69,
	0x6e, 0x66, 0x6f, 0x22, 0x43, 0x0a, 0x0f, 0x50, 0x32, 0x50, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e,
	0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73,
	0x6f, 0x75, 0x74, 0x73, 0x69, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69,
	0x73, 0x6f, 0x75, 0x74, 0x73, 0x69, 0x64, 0x65, 0x22, 0x68, 0x0a, 0x0c, 0x50, 0x32, 0x50, 0x47,
	0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73,
	0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69,
	0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68,
	0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x65,
	0x69, 0x67, 0x68, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68,
	0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67,
	0x68, 0x74, 0x22, 0x29, 0x0a, 0x0d, 0x50, 0x32, 0x50, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70,
	0x6f, 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x2e, 0x0a,
	0x06, 0x50, 0x32, 0x50, 0x49, 0x6e, 0x76, 0x12, 0x24, 0x0a, 0x04, 0x69, 0x6e, 0x76, 0x73, 0x18,
	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e,
	0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x04, 0x69, 0x6e, 0x76, 0x73, 0x22, 0x47, 0x0a,
	0x09, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x79,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61,
	0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x16,
	0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06,
	0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x4c, 0x0a, 0x0a, 0x50, 0x32, 0x50, 0x47, 0x65, 0x74,
	0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24,
	0x0a, 0x04, 0x69, 0x6e, 0x76, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74,
	0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x04,
	0x69, 0x6e, 0x76, 0x73, 0x22, 0x1c, 0x0a, 0x08, 0x50, 0x32, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65,
	0x12, 0x10, 0x0a, 0x03, 0x54, 0x54, 0x4c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54,
	0x54, 0x4c, 0x22, 0x52, 0x0a, 0x05, 0x50, 0x32, 0x50, 0x54, 0x78, 0x12, 0x22, 0x0a, 0x02, 0x74,
	0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e,
	0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x74, 0x78, 0x12,
	0x25, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f,
	0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52,
	0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x22, 0x2e, 0x0a, 0x08, 0x50, 0x32, 0x50, 0x42, 0x6c, 0x6f,
	0x63, 0x6b, 0x12, 0x22, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x0c, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52,
	0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x93, 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x67, 0x68, 0x74,
	0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x68, 0x65, 0x61,
	0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x74, 0x79, 0x70, 0x65,
	0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
	0x12, 0x2c, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61,
	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x78, 0x12, 0x1c,
	0x0a, 0x09, 0x73, 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28,
	0x09, 0x52, 0x09, 0x73, 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x22, 0x41, 0x0a, 0x0d,
	0x50, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x4d, 0x73, 0x67, 0x12, 0x14, 0x0a,
	0x05, 0x6d, 0x73, 0x67, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x73,
	0x67, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x4d, 0x73, 0x67, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x4d, 0x73, 0x67, 0x22,
	0x48, 0x0a, 0x07, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x54, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x78,
	0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61,
	0x73, 0x68, 0x12, 0x25, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x52, 0x6f, 0x75,
	0x74, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x22, 0x22, 0x0a, 0x08, 0x50, 0x32, 0x50,
	0x54, 0x78, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x22, 0x4b, 0x0a,
	0x0d, 0x50, 0x32, 0x50, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x78, 0x52, 0x65, 0x71, 0x12, 0x1c,
	0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09,
	0x74, 0x78, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52,
	0x09, 0x74, 0x78, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x73, 0x0a, 0x0f, 0x50, 0x32,
	0x50, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x78, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1c, 0x0a,
	0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x74,
	0x78, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09,
	0x74, 0x78, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x03, 0x74, 0x78, 0x73,
	0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x54,
	0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x74, 0x78, 0x73, 0x22,
	0x78, 0x0a, 0x0c, 0x50, 0x32, 0x50, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12,
	0x27, 0x0a, 0x05, 0x74, 0x78, 0x52, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f,
	0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x54, 0x78, 0x52, 0x65, 0x71, 0x48,
	0x00, 0x52, 0x05, 0x74, 0x78, 0x52, 0x65, 0x71, 0x12, 0x36, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63,
	0x6b, 0x54, 0x78, 0x52, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74,
	0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x78, 0x52,
	0x65, 0x71, 0x48, 0x00, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x78, 0x52, 0x65, 0x71,
	0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x68, 0x0a, 0x08, 0x56, 0x65, 0x72,
	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x32, 0x70, 0x76, 0x65, 0x72, 0x73,
	0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x70, 0x32, 0x70, 0x76, 0x65,
	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6f, 0x66, 0x74, 0x76, 0x65, 0x72,
	0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6f, 0x66, 0x74,
	0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x6e,
	0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x6e,
	0x61, 0x6d, 0x65, 0x22, 0xec, 0x02, 0x0a, 0x0d, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x73,
	0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x0c, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x54, 0x78, 0x48,
	0x00, 0x52, 0x02, 0x74, 0x78, 0x12, 0x27, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50,
	0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x00, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x24,
	0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x74,
	0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04,
	0x70, 0x69, 0x6e, 0x67, 0x12, 0x2b, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18,
	0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x56, 0x65,
	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
	0x6e, 0x12, 0x24, 0x0a, 0x04, 0x6c, 0x74, 0x54, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x0e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x54, 0x78, 0x48,
	0x00, 0x52, 0x04, 0x6c, 0x74, 0x54, 0x78, 0x12, 0x2d, 0x0a, 0x07, 0x6c, 0x74, 0x42, 0x6c, 0x6f,
	0x63, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73,
	0x2e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x00, 0x52, 0x07, 0x6c,
	0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2b, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18,
	0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32,
	0x50, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x71, 0x75,
	0x65, 0x72, 0x79, 0x12, 0x34, 0x0a, 0x08, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x70, 0x18,
	0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32,
	0x50, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x78, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x48, 0x00, 0x52,
	0x08, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x70, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c,
	0x75, 0x65, 0x22, 0x69, 0x0a, 0x0d, 0x50, 0x32, 0x50, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64,
	0x65, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a,
	0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x03, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12,
	0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01,
	0x28, 0x03, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x35, 0x0a,
	0x0a, 0x50, 0x32, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x27, 0x0a, 0x07, 0x68,
	0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x74,
	0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x07, 0x68, 0x65, 0x61,
	0x64, 0x65, 0x72, 0x73, 0x22, 0x6e, 0x0a, 0x07, 0x49, 0x6e, 0x76, 0x44, 0x61, 0x74, 0x61, 0x12,
	0x24, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79,
	0x70, 0x65, 0x73, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48,
	0x00, 0x52, 0x02, 0x74, 0x78, 0x12, 0x24, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x6c, 0x6f,
	0x63, 0x6b, 0x48, 0x00, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x74,
	0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x74, 0x79, 0x42, 0x07, 0x0a, 0x05, 0x76,
	0x61, 0x6c, 0x75, 0x65, 0x22, 0x30, 0x0a, 0x08, 0x49, 0x6e, 0x76, 0x44, 0x61, 0x74, 0x61, 0x73,
	0x12, 0x24, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
	0x0e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x76, 0x44, 0x61, 0x74, 0x61, 0x52,
	0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x92, 0x03, 0x0a, 0x04, 0x50, 0x65, 0x65, 0x72, 0x12,
	0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61,
	0x64, 0x64, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73,
	0x65, 0x6c, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x12,
	0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05,
	0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53, 0x69, 0x7a,
	0x65, 0x12, 0x25, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x0d, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72,
	0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73,
	0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69,
	0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x44, 0x42, 0x56, 0x65, 0x72,
	0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x6f, 0x63, 0x61,
	0x6c, 0x44, 0x42, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x74,
	0x6f, 0x72, 0x65, 0x44, 0x42, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x42, 0x56, 0x65, 0x72, 0x73, 0x69,
	0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d,
	0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67,
	0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x6f, 0x64, 0x65,
	0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x6f, 0x64, 0x65,
	0x12, 0x18, 0x0a, 0x07, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28,
	0x08, 0x52, 0x07, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x09, 0x66, 0x69,
	0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e,
	0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x6f, 0x77, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65,
	0x52, 0x09, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x22, 0x2d, 0x0a, 0x08, 0x50,
	0x65, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x05, 0x70, 0x65, 0x65, 0x72, 0x73,
	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50,
	0x65, 0x65, 0x72, 0x52, 0x05, 0x70, 0x65, 0x65, 0x72, 0x73, 0x22, 0x29, 0x0a, 0x0d, 0x50, 0x32,
	0x50, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x70,
	0x32, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x32,
	0x70, 0x54, 0x79, 0x70, 0x65, 0x22, 0x2c, 0x0a, 0x10, 0x50, 0x32, 0x50, 0x47, 0x65, 0x74, 0x4e,
	0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x32, 0x70,
	0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x32, 0x70, 0x54,
	0x79, 0x70, 0x65, 0x22, 0xb5, 0x02, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x4e, 0x65, 0x74, 0x49,
	0x6e, 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x61,
	0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72,
	0x6e, 0x61, 0x6c, 0x61, 0x64, 0x64, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
	0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61,
	0x6c, 0x61, 0x64, 0x64, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
	0x1c, 0x0a, 0x09, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01,
	0x28, 0x05, 0x52, 0x09, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x1a, 0x0a,
	0x08, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52,
	0x08, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x6f, 0x75,
	0x74, 0x69, 0x6e, 0x67, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52,
	0x0c, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1c, 0x0a,
	0x09, 0x70, 0x65, 0x65, 0x72, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05,
	0x52, 0x09, 0x70, 0x65, 0x65, 0x72, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72,
	0x61, 0x74, 0x65, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x61, 0x74,
	0x65, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x61, 0x74, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x09,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x61, 0x74, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x1c, 0x0a,
	0x09, 0x72, 0x61, 0x74, 0x65, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x09, 0x72, 0x61, 0x74, 0x65, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x34, 0x0a, 0x0a, 0x50,
	0x65, 0x65, 0x72, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x70, 0x65, 0x65,
	0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73,
	0x2e, 0x50, 0x65, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x70, 0x65, 0x65, 0x72,
	0x73, 0x22, 0x85, 0x01, 0x0a, 0x09, 0x50, 0x65, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12,
	0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
	0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x02, 0x69, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6f, 0x66, 0x74, 0x76,
	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6f,
	0x66, 0x74, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x32, 0x70,
	0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x70,
	0x32, 0x70, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0x8c, 0x07, 0x0a, 0x0b, 0x70, 0x32,
	0x70, 0x67, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x0b, 0x42, 0x72, 0x6f,
	0x61, 0x64, 0x43, 0x61, 0x73, 0x74, 0x54, 0x78, 0x12, 0x0c, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73,
	0x2e, 0x50, 0x32, 0x50, 0x54, 0x78, 0x1a, 0x0c, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52,
	0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x0e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x43,
	0x61, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x0f, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73,
	0x2e, 0x50, 0x32, 0x50, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x0c, 0x2e, 0x74, 0x79, 0x70, 0x65,
	0x73, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x28, 0x0a, 0x04, 0x50, 0x69, 0x6e,
	0x67, 0x12, 0x0e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x50, 0x69, 0x6e,
	0x67, 0x1a, 0x0e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x50, 0x6f, 0x6e,
	0x67, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x11,
	0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x47, 0x65, 0x74, 0x41, 0x64, 0x64,
	0x72, 0x1a, 0x0e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x41, 0x64, 0x64,
	0x72, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x4c, 0x69,
	0x73, 0x74, 0x12, 0x11, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x47, 0x65,
	0x74, 0x41, 0x64, 0x64, 0x72, 0x1a, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32,
	0x50, 0x41, 0x64, 0x64, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x00, 0x12, 0x30, 0x0a, 0x07, 0x56,
	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x11, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50,
	0x32, 0x50, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x10, 0x2e, 0x74, 0x79, 0x70, 0x65,
	0x73, 0x2e, 0x50, 0x32, 0x50, 0x56, 0x65, 0x72, 0x41, 0x63, 0x6b, 0x22, 0x00, 0x12, 0x32, 0x0a,
	0x08, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0x12, 0x11, 0x2e, 0x74, 0x79, 0x70, 0x65,
	0x73, 0x2e, 0x50, 0x32, 0x50, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x11, 0x2e, 0x74,
	0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22,
	0x00, 0x12, 0x2d, 0x0a, 0x0b, 0x53, 0x6f, 0x66, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
	0x12, 0x0e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x50, 0x69, 0x6e, 0x67,
	0x1a, 0x0c, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00,
	0x12, 0x31, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x13, 0x2e,
	0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63,
	0x6b, 0x73, 0x1a, 0x0d, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x49, 0x6e,
	0x76, 0x22, 0x00, 0x12, 0x33, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x50, 0x6f, 0x6f,
	0x6c, 0x12, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x47, 0x65, 0x74,
	0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x1a, 0x0d, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e,
	0x50, 0x32, 0x50, 0x49, 0x6e, 0x76, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x44,
	0x61, 0x74, 0x61, 0x12, 0x11, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x47,
	0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x0f, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49,
	0x6e, 0x76, 0x44, 0x61, 0x74, 0x61, 0x73, 0x22, 0x00, 0x30, 0x01, 0x12, 0x37, 0x0a, 0x0a, 0x47,
	0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65,
	0x73, 0x2e, 0x50, 0x32, 0x50, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x1a,
	0x11, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65,
	0x72, 0x73, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49,
	0x6e, 0x66, 0x6f, 0x12, 0x15, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x47,
	0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x12, 0x2e, 0x74, 0x79, 0x70,
	0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x00,
	0x12, 0x3b, 0x0a, 0x10, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
	0x52, 0x65, 0x61, 0x64, 0x12, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x72, 0x6f,
	0x61, 0x64, 0x43, 0x61, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x0d, 0x2e, 0x74, 0x79, 0x70,
	0x65, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x4e, 0x69, 0x6c, 0x22, 0x00, 0x28, 0x01, 0x12, 0x3c, 0x0a,
	0x10, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x6e,
	0x64, 0x12, 0x0e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x50, 0x69, 0x6e,
	0x67, 0x1a, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x43,
	0x61, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x30, 0x01, 0x12, 0x33, 0x0a, 0x0e, 0x43,
	0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x50, 0x65, 0x65, 0x72, 0x73, 0x12, 0x0e, 0x2e,
	0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x50, 0x69, 0x6e, 0x67, 0x1a, 0x0f, 0x2e,
	0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x00,
	0x12, 0x36, 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x50, 0x65, 0x65,
	0x72, 0x73, 0x32, 0x12, 0x0e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x32, 0x50, 0x50,
	0x69, 0x6e, 0x67, 0x1a, 0x11, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x65, 0x65, 0x72,
	0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x1f, 0x5a, 0x1d, 0x67, 0x69, 0x74, 0x68,
	0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x33, 0x33, 0x63, 0x6e, 0x2f, 0x63, 0x68, 0x61, 0x69,
	0x6e, 0x33, 0x33, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x33,
}

var (
	file_p2p_proto_rawDescOnce sync.Once
	file_p2p_proto_rawDescData = file_p2p_proto_rawDesc
)

func file_p2p_proto_rawDescGZIP() []byte {
	file_p2p_proto_rawDescOnce.Do(func() {
		file_p2p_proto_rawDescData = protoimpl.X.CompressGZIP(file_p2p_proto_rawDescData)
	})
	return file_p2p_proto_rawDescData
}

var file_p2p_proto_msgTypes = make([]protoimpl.MessageInfo, 38)
var file_p2p_proto_goTypes = []interface{}{
	(*P2PGetPeerInfo)(nil),   // 0: types.P2PGetPeerInfo
	(*P2PPeerInfo)(nil),      // 1: types.P2PPeerInfo
	(*P2PVersion)(nil),       // 2: types.P2PVersion
	(*P2PVerAck)(nil),        // 3: types.P2PVerAck
	(*P2PPing)(nil),          // 4: types.P2PPing
	(*P2PPong)(nil),          // 5: types.P2PPong
	(*P2PGetAddr)(nil),       // 6: types.P2PGetAddr
	(*P2PAddr)(nil),          // 7: types.P2PAddr
	(*P2PAddrList)(nil),      // 8: types.P2PAddrList
	(*P2PExternalInfo)(nil),  // 9: types.P2PExternalInfo
	(*P2PGetBlocks)(nil),     // 10: types.P2PGetBlocks
	(*P2PGetMempool)(nil),    // 11: types.P2PGetMempool
	(*P2PInv)(nil),           // 12: types.P2PInv
	(*Inventory)(nil),        // 13: types.Inventory
	(*P2PGetData)(nil),       // 14: types.P2PGetData
	(*P2PRoute)(nil),         // 15: types.P2PRoute
	(*P2PTx)(nil),            // 16: types.P2PTx
	(*P2PBlock)(nil),         // 17: types.P2PBlock
	(*LightBlock)(nil),       // 18: types.LightBlock
	(*PeerPubSubMsg)(nil),    // 19: types.PeerPubSubMsg
	(*LightTx)(nil),          // 20: types.LightTx
	(*P2PTxReq)(nil),         // 21: types.P2PTxReq
	(*P2PBlockTxReq)(nil),    // 22: types.P2PBlockTxReq
	(*P2PBlockTxReply)(nil),  // 23: types.P2PBlockTxReply
	(*P2PQueryData)(nil),     // 24: types.P2PQueryData
	(*Versions)(nil),         // 25: types.Versions
	(*BroadCastData)(nil),    // 26: types.BroadCastData
	(*P2PGetHeaders)(nil),    // 27: types.P2PGetHeaders
	(*P2PHeaders)(nil),       // 28: types.P2PHeaders
	(*InvData)(nil),          // 29: types.InvData
	(*InvDatas)(nil),         // 30: types.InvDatas
	(*Peer)(nil),             // 31: types.Peer
	(*PeerList)(nil),         // 32: types.PeerList
	(*P2PGetPeerReq)(nil),    // 33: types.P2PGetPeerReq
	(*P2PGetNetInfoReq)(nil), // 34: types.P2PGetNetInfoReq
	(*NodeNetInfo)(nil),      // 35: types.NodeNetInfo
	(*PeersReply)(nil),       // 36: types.PeersReply
	(*PeersInfo)(nil),        // 37: types.PeersInfo
	(*Header)(nil),           // 38: types.Header
	(*Signature)(nil),        // 39: types.Signature
	(*Transaction)(nil),      // 40: types.Transaction
	(*Block)(nil),            // 41: types.Block
	(*SnowChoice)(nil),       // 42: types.snowChoice
	(*Reply)(nil),            // 43: types.Reply
	(*ReqNil)(nil),           // 44: types.ReqNil
}
var file_p2p_proto_depIdxs = []int32{
	38, // 0: types.P2PPeerInfo.header:type_name -> types.Header
	39, // 1: types.P2PPing.sign:type_name -> types.Signature
	1,  // 2: types.P2PAddrList.peerinfo:type_name -> types.P2PPeerInfo
	13, // 3: types.P2PInv.invs:type_name -> types.Inventory
	13, // 4: types.P2PGetData.invs:type_name -> types.Inventory
	40, // 5: types.P2PTx.tx:type_name -> types.Transaction
	15, // 6: types.P2PTx.route:type_name -> types.P2PRoute
	41, // 7: types.P2PBlock.block:type_name -> types.Block
	38, // 8: types.LightBlock.header:type_name -> types.Header
	40, // 9: types.LightBlock.minerTx:type_name -> types.Transaction
	15, // 10: types.LightTx.route:type_name -> types.P2PRoute
	40, // 11: types.P2PBlockTxReply.txs:type_name -> types.Transaction
	21, // 12: types.P2PQueryData.txReq:type_name -> types.P2PTxReq
	22, // 13: types.P2PQueryData.blockTxReq:type_name -> types.P2PBlockTxReq
	16, // 14: types.BroadCastData.tx:type_name -> types.P2PTx
	17, // 15: types.BroadCastData.block:type_name -> types.P2PBlock
	4,  // 16: types.BroadCastData.ping:type_name -> types.P2PPing
	25, // 17: types.BroadCastData.version:type_name -> types.Versions
	20, // 18: types.BroadCastData.ltTx:type_name -> types.LightTx
	18, // 19: types.BroadCastData.ltBlock:type_name -> types.LightBlock
	24, // 20: types.BroadCastData.query:type_name -> types.P2PQueryData
	23, // 21: types.BroadCastData.blockRep:type_name -> types.P2PBlockTxReply
	38, // 22: types.P2PHeaders.headers:type_name -> types.Header
	40, // 23: types.InvData.tx:type_name -> types.Transaction
	41, // 24: types.InvData.block:type_name -> types.Block
	29, // 25: types.InvDatas.items:type_name -> types.InvData
	38, // 26: types.Peer.header:type_name -> types.Header
	42, // 27: types.Peer.finalized:type_name -> types.snowChoice
	31, // 28: types.PeerList.peers:type_name -> types.Peer
	37, // 29: types.PeersReply.peers:type_name -> types.PeersInfo
	16, // 30: types.p2pgservice.BroadCastTx:input_type -> types.P2PTx
	17, // 31: types.p2pgservice.BroadCastBlock:input_type -> types.P2PBlock
	4,  // 32: types.p2pgservice.Ping:input_type -> types.P2PPing
	6,  // 33: types.p2pgservice.GetAddr:input_type -> types.P2PGetAddr
	6,  // 34: types.p2pgservice.GetAddrList:input_type -> types.P2PGetAddr
	2,  // 35: types.p2pgservice.Version:input_type -> types.P2PVersion
	2,  // 36: types.p2pgservice.Version2:input_type -> types.P2PVersion
	4,  // 37: types.p2pgservice.SoftVersion:input_type -> types.P2PPing
	10, // 38: types.p2pgservice.GetBlocks:input_type -> types.P2PGetBlocks
	11, // 39: types.p2pgservice.GetMemPool:input_type -> types.P2PGetMempool
	14, // 40: types.p2pgservice.GetData:input_type -> types.P2PGetData
	27, // 41: types.p2pgservice.GetHeaders:input_type -> types.P2PGetHeaders
	0,  // 42: types.p2pgservice.GetPeerInfo:input_type -> types.P2PGetPeerInfo
	26, // 43: types.p2pgservice.ServerStreamRead:input_type -> types.BroadCastData
	4,  // 44: types.p2pgservice.ServerStreamSend:input_type -> types.P2PPing
	4,  // 45: types.p2pgservice.CollectInPeers:input_type -> types.P2PPing
	4,  // 46: types.p2pgservice.CollectInPeers2:input_type -> types.P2PPing
	43, // 47: types.p2pgservice.BroadCastTx:output_type -> types.Reply
	43, // 48: types.p2pgservice.BroadCastBlock:output_type -> types.Reply
	5,  // 49: types.p2pgservice.Ping:output_type -> types.P2PPong
	7,  // 50: types.p2pgservice.GetAddr:output_type -> types.P2PAddr
	8,  // 51: types.p2pgservice.GetAddrList:output_type -> types.P2PAddrList
	3,  // 52: types.p2pgservice.Version:output_type -> types.P2PVerAck
	2,  // 53: types.p2pgservice.Version2:output_type -> types.P2PVersion
	43, // 54: types.p2pgservice.SoftVersion:output_type -> types.Reply
	12, // 55: types.p2pgservice.GetBlocks:output_type -> types.P2PInv
	12, // 56: types.p2pgservice.GetMemPool:output_type -> types.P2PInv
	30, // 57: types.p2pgservice.GetData:output_type -> types.InvDatas
	28, // 58: types.p2pgservice.GetHeaders:output_type -> types.P2PHeaders
	1,  // 59: types.p2pgservice.GetPeerInfo:output_type -> types.P2PPeerInfo
	44, // 60: types.p2pgservice.ServerStreamRead:output_type -> types.ReqNil
	26, // 61: types.p2pgservice.ServerStreamSend:output_type -> types.BroadCastData
	32, // 62: types.p2pgservice.CollectInPeers:output_type -> types.PeerList
	36, // 63: types.p2pgservice.CollectInPeers2:output_type -> types.PeersReply
	47, // [47:64] is the sub-list for method output_type
	30, // [30:47] is the sub-list for method input_type
	30, // [30:30] is the sub-list for extension type_name
	30, // [30:30] is the sub-list for extension extendee
	0,  // [0:30] is the sub-list for field type_name
}

func init() { file_p2p_proto_init() }
func file_p2p_proto_init() {
	if File_p2p_proto != nil {
		return
	}
	file_transaction_proto_init()
	file_common_proto_init()
	file_blockchain_proto_init()
	file_snowman_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_p2p_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PGetPeerInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PPeerInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PVersion); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PVerAck); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PPing); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PPong); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PGetAddr); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PAddr); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PAddrList); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PExternalInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PGetBlocks); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PGetMempool); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PInv); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Inventory); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PGetData); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PRoute); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PTx); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PBlock); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*LightBlock); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PeerPubSubMsg); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*LightTx); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PTxReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PBlockTxReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PBlockTxReply); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PQueryData); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Versions); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BroadCastData); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PGetHeaders); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PHeaders); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*InvData); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*InvDatas); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Peer); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PeerList); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PGetPeerReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*P2PGetNetInfoReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*NodeNetInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PeersReply); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_p2p_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PeersInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	file_p2p_proto_msgTypes[24].OneofWrappers = []interface{}{
		(*P2PQueryData_TxReq)(nil),
		(*P2PQueryData_BlockTxReq)(nil),
	}
	file_p2p_proto_msgTypes[26].OneofWrappers = []interface{}{
		(*BroadCastData_Tx)(nil),
		(*BroadCastData_Block)(nil),
		(*BroadCastData_Ping)(nil),
		(*BroadCastData_Version)(nil),
		(*BroadCastData_LtTx)(nil),
		(*BroadCastData_LtBlock)(nil),
		(*BroadCastData_Query)(nil),
		(*BroadCastData_BlockRep)(nil),
	}
	file_p2p_proto_msgTypes[29].OneofWrappers = []interface{}{
		(*InvData_Tx)(nil),
		(*InvData_Block)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_p2p_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   38,
			NumExtensions: 0,
			NumServices:   1,
		},
		GoTypes:           file_p2p_proto_goTypes,
		DependencyIndexes: file_p2p_proto_depIdxs,
		MessageInfos:      file_p2p_proto_msgTypes,
	}.Build()
	File_p2p_proto = out.File
	file_p2p_proto_rawDesc = nil
	file_p2p_proto_goTypes = nil
	file_p2p_proto_depIdxs = nil
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConnInterface

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion6

// P2PgserviceClient is the client API for P2Pgservice service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type P2PgserviceClient interface {
	//广播交易
	BroadCastTx(ctx context.Context, in *P2PTx, opts ...grpc.CallOption) (*Reply, error)
	//广播区块
	BroadCastBlock(ctx context.Context, in *P2PBlock, opts ...grpc.CallOption) (*Reply, error)
	// PING
	Ping(ctx context.Context, in *P2PPing, opts ...grpc.CallOption) (*P2PPong, error)
	//获取地址
	GetAddr(ctx context.Context, in *P2PGetAddr, opts ...grpc.CallOption) (*P2PAddr, error)
	GetAddrList(ctx context.Context, in *P2PGetAddr, opts ...grpc.CallOption) (*P2PAddrList, error)
	//版本
	Version(ctx context.Context, in *P2PVersion, opts ...grpc.CallOption) (*P2PVerAck, error)
	//获取p2p协议的版本号
	Version2(ctx context.Context, in *P2PVersion, opts ...grpc.CallOption) (*P2PVersion, error)
	//获取软件的版本号
	SoftVersion(ctx context.Context, in *P2PPing, opts ...grpc.CallOption) (*Reply, error)
	//获取区块，最高200
	GetBlocks(ctx context.Context, in *P2PGetBlocks, opts ...grpc.CallOption) (*P2PInv, error)
	//获取mempool
	GetMemPool(ctx context.Context, in *P2PGetMempool, opts ...grpc.CallOption) (*P2PInv, error)
	//获取数据
	GetData(ctx context.Context, in *P2PGetData, opts ...grpc.CallOption) (P2Pgservice_GetDataClient, error)
	//获取头部
	GetHeaders(ctx context.Context, in *P2PGetHeaders, opts ...grpc.CallOption) (*P2PHeaders, error)
	//获取 peerinfo
	GetPeerInfo(ctx context.Context, in *P2PGetPeerInfo, opts ...grpc.CallOption) (*P2PPeerInfo, error)
	// grpc server 读客户端发送来的数据
	ServerStreamRead(ctx context.Context, opts ...grpc.CallOption) (P2Pgservice_ServerStreamReadClient, error)
	// grpc server 发送数据给客户端
	ServerStreamSend(ctx context.Context, in *P2PPing, opts ...grpc.CallOption) (P2Pgservice_ServerStreamSendClient, error)
	// grpc 收集inpeers
	CollectInPeers(ctx context.Context, in *P2PPing, opts ...grpc.CallOption) (*PeerList, error)
	CollectInPeers2(ctx context.Context, in *P2PPing, opts ...grpc.CallOption) (*PeersReply, error)
}

type p2PgserviceClient struct {
	cc grpc.ClientConnInterface
}

func NewP2PgserviceClient(cc grpc.ClientConnInterface) P2PgserviceClient {
	return &p2PgserviceClient{cc}
}

func (c *p2PgserviceClient) BroadCastTx(ctx context.Context, in *P2PTx, opts ...grpc.CallOption) (*Reply, error) {
	out := new(Reply)
	err := c.cc.Invoke(ctx, "/types.p2pgservice/BroadCastTx", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *p2PgserviceClient) BroadCastBlock(ctx context.Context, in *P2PBlock, opts ...grpc.CallOption) (*Reply, error) {
	out := new(Reply)
	err := c.cc.Invoke(ctx, "/types.p2pgservice/BroadCastBlock", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *p2PgserviceClient) Ping(ctx context.Context, in *P2PPing, opts ...grpc.CallOption) (*P2PPong, error) {
	out := new(P2PPong)
	err := c.cc.Invoke(ctx, "/types.p2pgservice/Ping", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *p2PgserviceClient) GetAddr(ctx context.Context, in *P2PGetAddr, opts ...grpc.CallOption) (*P2PAddr, error) {
	out := new(P2PAddr)
	err := c.cc.Invoke(ctx, "/types.p2pgservice/GetAddr", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *p2PgserviceClient) GetAddrList(ctx context.Context, in *P2PGetAddr, opts ...grpc.CallOption) (*P2PAddrList, error) {
	out := new(P2PAddrList)
	err := c.cc.Invoke(ctx, "/types.p2pgservice/GetAddrList", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *p2PgserviceClient) Version(ctx context.Context, in *P2PVersion, opts ...grpc.CallOption) (*P2PVerAck, error) {
	out := new(P2PVerAck)
	err := c.cc.Invoke(ctx, "/types.p2pgservice/Version", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *p2PgserviceClient) Version2(ctx context.Context, in *P2PVersion, opts ...grpc.CallOption) (*P2PVersion, error) {
	out := new(P2PVersion)
	err := c.cc.Invoke(ctx, "/types.p2pgservice/Version2", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *p2PgserviceClient) SoftVersion(ctx context.Context, in *P2PPing, opts ...grpc.CallOption) (*Reply, error) {
	out := new(Reply)
	err := c.cc.Invoke(ctx, "/types.p2pgservice/SoftVersion", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *p2PgserviceClient) GetBlocks(ctx context.Context, in *P2PGetBlocks, opts ...grpc.CallOption) (*P2PInv, error) {
	out := new(P2PInv)
	err := c.cc.Invoke(ctx, "/types.p2pgservice/GetBlocks", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *p2PgserviceClient) GetMemPool(ctx context.Context, in *P2PGetMempool, opts ...grpc.CallOption) (*P2PInv, error) {
	out := new(P2PInv)
	err := c.cc.Invoke(ctx, "/types.p2pgservice/GetMemPool", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *p2PgserviceClient) GetData(ctx context.Context, in *P2PGetData, opts ...grpc.CallOption) (P2Pgservice_GetDataClient, error) {
	stream, err := c.cc.NewStream(ctx, &_P2Pgservice_serviceDesc.Streams[0], "/types.p2pgservice/GetData", opts...)
	if err != nil {
		return nil, err
	}
	x := &p2PgserviceGetDataClient{stream}
	if err := x.ClientStream.SendMsg(in); err != nil {
		return nil, err
	}
	if err := x.ClientStream.CloseSend(); err != nil {
		return nil, err
	}
	return x, nil
}

type P2Pgservice_GetDataClient interface {
	Recv() (*InvDatas, error)
	grpc.ClientStream
}

type p2PgserviceGetDataClient struct {
	grpc.ClientStream
}

func (x *p2PgserviceGetDataClient) Recv() (*InvDatas, error) {
	m := new(InvDatas)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *p2PgserviceClient) GetHeaders(ctx context.Context, in *P2PGetHeaders, opts ...grpc.CallOption) (*P2PHeaders, error) {
	out := new(P2PHeaders)
	err := c.cc.Invoke(ctx, "/types.p2pgservice/GetHeaders", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *p2PgserviceClient) GetPeerInfo(ctx context.Context, in *P2PGetPeerInfo, opts ...grpc.CallOption) (*P2PPeerInfo, error) {
	out := new(P2PPeerInfo)
	err := c.cc.Invoke(ctx, "/types.p2pgservice/GetPeerInfo", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *p2PgserviceClient) ServerStreamRead(ctx context.Context, opts ...grpc.CallOption) (P2Pgservice_ServerStreamReadClient, error) {
	stream, err := c.cc.NewStream(ctx, &_P2Pgservice_serviceDesc.Streams[1], "/types.p2pgservice/ServerStreamRead", opts...)
	if err != nil {
		return nil, err
	}
	x := &p2PgserviceServerStreamReadClient{stream}
	return x, nil
}

type P2Pgservice_ServerStreamReadClient interface {
	Send(*BroadCastData) error
	CloseAndRecv() (*ReqNil, error)
	grpc.ClientStream
}

type p2PgserviceServerStreamReadClient struct {
	grpc.ClientStream
}

func (x *p2PgserviceServerStreamReadClient) Send(m *BroadCastData) error {
	return x.ClientStream.SendMsg(m)
}

func (x *p2PgserviceServerStreamReadClient) CloseAndRecv() (*ReqNil, error) {
	if err := x.ClientStream.CloseSend(); err != nil {
		return nil, err
	}
	m := new(ReqNil)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *p2PgserviceClient) ServerStreamSend(ctx context.Context, in *P2PPing, opts ...grpc.CallOption) (P2Pgservice_ServerStreamSendClient, error) {
	stream, err := c.cc.NewStream(ctx, &_P2Pgservice_serviceDesc.Streams[2], "/types.p2pgservice/ServerStreamSend", opts...)
	if err != nil {
		return nil, err
	}
	x := &p2PgserviceServerStreamSendClient{stream}
	if err := x.ClientStream.SendMsg(in); err != nil {
		return nil, err
	}
	if err := x.ClientStream.CloseSend(); err != nil {
		return nil, err
	}
	return x, nil
}

type P2Pgservice_ServerStreamSendClient interface {
	Recv() (*BroadCastData, error)
	grpc.ClientStream
}

type p2PgserviceServerStreamSendClient struct {
	grpc.ClientStream
}

func (x *p2PgserviceServerStreamSendClient) Recv() (*BroadCastData, error) {
	m := new(BroadCastData)
	if err := x.ClientStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func (c *p2PgserviceClient) CollectInPeers(ctx context.Context, in *P2PPing, opts ...grpc.CallOption) (*PeerList, error) {
	out := new(PeerList)
	err := c.cc.Invoke(ctx, "/types.p2pgservice/CollectInPeers", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *p2PgserviceClient) CollectInPeers2(ctx context.Context, in *P2PPing, opts ...grpc.CallOption) (*PeersReply, error) {
	out := new(PeersReply)
	err := c.cc.Invoke(ctx, "/types.p2pgservice/CollectInPeers2", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// P2PgserviceServer is the server API for P2Pgservice service.
type P2PgserviceServer interface {
	//广播交易
	BroadCastTx(context.Context, *P2PTx) (*Reply, error)
	//广播区块
	BroadCastBlock(context.Context, *P2PBlock) (*Reply, error)
	// PING
	Ping(context.Context, *P2PPing) (*P2PPong, error)
	//获取地址
	GetAddr(context.Context, *P2PGetAddr) (*P2PAddr, error)
	GetAddrList(context.Context, *P2PGetAddr) (*P2PAddrList, error)
	//版本
	Version(context.Context, *P2PVersion) (*P2PVerAck, error)
	//获取p2p协议的版本号
	Version2(context.Context, *P2PVersion) (*P2PVersion, error)
	//获取软件的版本号
	SoftVersion(context.Context, *P2PPing) (*Reply, error)
	//获取区块，最高200
	GetBlocks(context.Context, *P2PGetBlocks) (*P2PInv, error)
	//获取mempool
	GetMemPool(context.Context, *P2PGetMempool) (*P2PInv, error)
	//获取数据
	GetData(*P2PGetData, P2Pgservice_GetDataServer) error
	//获取头部
	GetHeaders(context.Context, *P2PGetHeaders) (*P2PHeaders, error)
	//获取 peerinfo
	GetPeerInfo(context.Context, *P2PGetPeerInfo) (*P2PPeerInfo, error)
	// grpc server 读客户端发送来的数据
	ServerStreamRead(P2Pgservice_ServerStreamReadServer) error
	// grpc server 发送数据给客户端
	ServerStreamSend(*P2PPing, P2Pgservice_ServerStreamSendServer) error
	// grpc 收集inpeers
	CollectInPeers(context.Context, *P2PPing) (*PeerList, error)
	CollectInPeers2(context.Context, *P2PPing) (*PeersReply, error)
}

// UnimplementedP2PgserviceServer can be embedded to have forward compatible implementations.
type UnimplementedP2PgserviceServer struct {
}

func (*UnimplementedP2PgserviceServer) BroadCastTx(context.Context, *P2PTx) (*Reply, error) {
	return nil, status.Errorf(codes.Unimplemented, "method BroadCastTx not implemented")
}
func (*UnimplementedP2PgserviceServer) BroadCastBlock(context.Context, *P2PBlock) (*Reply, error) {
	return nil, status.Errorf(codes.Unimplemented, "method BroadCastBlock not implemented")
}
func (*UnimplementedP2PgserviceServer) Ping(context.Context, *P2PPing) (*P2PPong, error) {
	return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented")
}
func (*UnimplementedP2PgserviceServer) GetAddr(context.Context, *P2PGetAddr) (*P2PAddr, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetAddr not implemented")
}
func (*UnimplementedP2PgserviceServer) GetAddrList(context.Context, *P2PGetAddr) (*P2PAddrList, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetAddrList not implemented")
}
func (*UnimplementedP2PgserviceServer) Version(context.Context, *P2PVersion) (*P2PVerAck, error) {
	return nil, status.Errorf(codes.Unimplemented, "method Version not implemented")
}
func (*UnimplementedP2PgserviceServer) Version2(context.Context, *P2PVersion) (*P2PVersion, error) {
	return nil, status.Errorf(codes.Unimplemented, "method Version2 not implemented")
}
func (*UnimplementedP2PgserviceServer) SoftVersion(context.Context, *P2PPing) (*Reply, error) {
	return nil, status.Errorf(codes.Unimplemented, "method SoftVersion not implemented")
}
func (*UnimplementedP2PgserviceServer) GetBlocks(context.Context, *P2PGetBlocks) (*P2PInv, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetBlocks not implemented")
}
func (*UnimplementedP2PgserviceServer) GetMemPool(context.Context, *P2PGetMempool) (*P2PInv, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetMemPool not implemented")
}
func (*UnimplementedP2PgserviceServer) GetData(*P2PGetData, P2Pgservice_GetDataServer) error {
	return status.Errorf(codes.Unimplemented, "method GetData not implemented")
}
func (*UnimplementedP2PgserviceServer) GetHeaders(context.Context, *P2PGetHeaders) (*P2PHeaders, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetHeaders not implemented")
}
func (*UnimplementedP2PgserviceServer) GetPeerInfo(context.Context, *P2PGetPeerInfo) (*P2PPeerInfo, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetPeerInfo not implemented")
}
func (*UnimplementedP2PgserviceServer) ServerStreamRead(P2Pgservice_ServerStreamReadServer) error {
	return status.Errorf(codes.Unimplemented, "method ServerStreamRead not implemented")
}
func (*UnimplementedP2PgserviceServer) ServerStreamSend(*P2PPing, P2Pgservice_ServerStreamSendServer) error {
	return status.Errorf(codes.Unimplemented, "method ServerStreamSend not implemented")
}
func (*UnimplementedP2PgserviceServer) CollectInPeers(context.Context, *P2PPing) (*PeerList, error) {
	return nil, status.Errorf(codes.Unimplemented, "method CollectInPeers not implemented")
}
func (*UnimplementedP2PgserviceServer) CollectInPeers2(context.Context, *P2PPing) (*PeersReply, error) {
	return nil, status.Errorf(codes.Unimplemented, "method CollectInPeers2 not implemented")
}

func RegisterP2PgserviceServer(s *grpc.Server, srv P2PgserviceServer) {
	s.RegisterService(&_P2Pgservice_serviceDesc, srv)
}

func _P2Pgservice_BroadCastTx_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(P2PTx)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(P2PgserviceServer).BroadCastTx(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/types.p2pgservice/BroadCastTx",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(P2PgserviceServer).BroadCastTx(ctx, req.(*P2PTx))
	}
	return interceptor(ctx, in, info, handler)
}

func _P2Pgservice_BroadCastBlock_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(P2PBlock)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(P2PgserviceServer).BroadCastBlock(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/types.p2pgservice/BroadCastBlock",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(P2PgserviceServer).BroadCastBlock(ctx, req.(*P2PBlock))
	}
	return interceptor(ctx, in, info, handler)
}

func _P2Pgservice_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(P2PPing)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(P2PgserviceServer).Ping(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/types.p2pgservice/Ping",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(P2PgserviceServer).Ping(ctx, req.(*P2PPing))
	}
	return interceptor(ctx, in, info, handler)
}

func _P2Pgservice_GetAddr_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(P2PGetAddr)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(P2PgserviceServer).GetAddr(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/types.p2pgservice/GetAddr",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(P2PgserviceServer).GetAddr(ctx, req.(*P2PGetAddr))
	}
	return interceptor(ctx, in, info, handler)
}

func _P2Pgservice_GetAddrList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(P2PGetAddr)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(P2PgserviceServer).GetAddrList(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/types.p2pgservice/GetAddrList",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(P2PgserviceServer).GetAddrList(ctx, req.(*P2PGetAddr))
	}
	return interceptor(ctx, in, info, handler)
}

func _P2Pgservice_Version_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(P2PVersion)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(P2PgserviceServer).Version(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/types.p2pgservice/Version",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(P2PgserviceServer).Version(ctx, req.(*P2PVersion))
	}
	return interceptor(ctx, in, info, handler)
}

func _P2Pgservice_Version2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(P2PVersion)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(P2PgserviceServer).Version2(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/types.p2pgservice/Version2",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(P2PgserviceServer).Version2(ctx, req.(*P2PVersion))
	}
	return interceptor(ctx, in, info, handler)
}

func _P2Pgservice_SoftVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(P2PPing)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(P2PgserviceServer).SoftVersion(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/types.p2pgservice/SoftVersion",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(P2PgserviceServer).SoftVersion(ctx, req.(*P2PPing))
	}
	return interceptor(ctx, in, info, handler)
}

func _P2Pgservice_GetBlocks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(P2PGetBlocks)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(P2PgserviceServer).GetBlocks(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/types.p2pgservice/GetBlocks",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(P2PgserviceServer).GetBlocks(ctx, req.(*P2PGetBlocks))
	}
	return interceptor(ctx, in, info, handler)
}

func _P2Pgservice_GetMemPool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(P2PGetMempool)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(P2PgserviceServer).GetMemPool(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/types.p2pgservice/GetMemPool",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(P2PgserviceServer).GetMemPool(ctx, req.(*P2PGetMempool))
	}
	return interceptor(ctx, in, info, handler)
}

func _P2Pgservice_GetData_Handler(srv interface{}, stream grpc.ServerStream) error {
	m := new(P2PGetData)
	if err := stream.RecvMsg(m); err != nil {
		return err
	}
	return srv.(P2PgserviceServer).GetData(m, &p2PgserviceGetDataServer{stream})
}

type P2Pgservice_GetDataServer interface {
	Send(*InvDatas) error
	grpc.ServerStream
}

type p2PgserviceGetDataServer struct {
	grpc.ServerStream
}

func (x *p2PgserviceGetDataServer) Send(m *InvDatas) error {
	return x.ServerStream.SendMsg(m)
}

func _P2Pgservice_GetHeaders_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(P2PGetHeaders)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(P2PgserviceServer).GetHeaders(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/types.p2pgservice/GetHeaders",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(P2PgserviceServer).GetHeaders(ctx, req.(*P2PGetHeaders))
	}
	return interceptor(ctx, in, info, handler)
}

func _P2Pgservice_GetPeerInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(P2PGetPeerInfo)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(P2PgserviceServer).GetPeerInfo(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/types.p2pgservice/GetPeerInfo",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(P2PgserviceServer).GetPeerInfo(ctx, req.(*P2PGetPeerInfo))
	}
	return interceptor(ctx, in, info, handler)
}

func _P2Pgservice_ServerStreamRead_Handler(srv interface{}, stream grpc.ServerStream) error {
	return srv.(P2PgserviceServer).ServerStreamRead(&p2PgserviceServerStreamReadServer{stream})
}

type P2Pgservice_ServerStreamReadServer interface {
	SendAndClose(*ReqNil) error
	Recv() (*BroadCastData, error)
	grpc.ServerStream
}

type p2PgserviceServerStreamReadServer struct {
	grpc.ServerStream
}

func (x *p2PgserviceServerStreamReadServer) SendAndClose(m *ReqNil) error {
	return x.ServerStream.SendMsg(m)
}

func (x *p2PgserviceServerStreamReadServer) Recv() (*BroadCastData, error) {
	m := new(BroadCastData)
	if err := x.ServerStream.RecvMsg(m); err != nil {
		return nil, err
	}
	return m, nil
}

func _P2Pgservice_ServerStreamSend_Handler(srv interface{}, stream grpc.ServerStream) error {
	m := new(P2PPing)
	if err := stream.RecvMsg(m); err != nil {
		return err
	}
	return srv.(P2PgserviceServer).ServerStreamSend(m, &p2PgserviceServerStreamSendServer{stream})
}

type P2Pgservice_ServerStreamSendServer interface {
	Send(*BroadCastData) error
	grpc.ServerStream
}

type p2PgserviceServerStreamSendServer struct {
	grpc.ServerStream
}

func (x *p2PgserviceServerStreamSendServer) Send(m *BroadCastData) error {
	return x.ServerStream.SendMsg(m)
}

func _P2Pgservice_CollectInPeers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(P2PPing)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(P2PgserviceServer).CollectInPeers(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/types.p2pgservice/CollectInPeers",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(P2PgserviceServer).CollectInPeers(ctx, req.(*P2PPing))
	}
	return interceptor(ctx, in, info, handler)
}

func _P2Pgservice_CollectInPeers2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(P2PPing)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(P2PgserviceServer).CollectInPeers2(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/types.p2pgservice/CollectInPeers2",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(P2PgserviceServer).CollectInPeers2(ctx, req.(*P2PPing))
	}
	return interceptor(ctx, in, info, handler)
}

var _P2Pgservice_serviceDesc = grpc.ServiceDesc{
	ServiceName: "types.p2pgservice",
	HandlerType: (*P2PgserviceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "BroadCastTx",
			Handler:    _P2Pgservice_BroadCastTx_Handler,
		},
		{
			MethodName: "BroadCastBlock",
			Handler:    _P2Pgservice_BroadCastBlock_Handler,
		},
		{
			MethodName: "Ping",
			Handler:    _P2Pgservice_Ping_Handler,
		},
		{
			MethodName: "GetAddr",
			Handler:    _P2Pgservice_GetAddr_Handler,
		},
		{
			MethodName: "GetAddrList",
			Handler:    _P2Pgservice_GetAddrList_Handler,
		},
		{
			MethodName: "Version",
			Handler:    _P2Pgservice_Version_Handler,
		},
		{
			MethodName: "Version2",
			Handler:    _P2Pgservice_Version2_Handler,
		},
		{
			MethodName: "SoftVersion",
			Handler:    _P2Pgservice_SoftVersion_Handler,
		},
		{
			MethodName: "GetBlocks",
			Handler:    _P2Pgservice_GetBlocks_Handler,
		},
		{
			MethodName: "GetMemPool",
			Handler:    _P2Pgservice_GetMemPool_Handler,
		},
		{
			MethodName: "GetHeaders",
			Handler:    _P2Pgservice_GetHeaders_Handler,
		},
		{
			MethodName: "GetPeerInfo",
			Handler:    _P2Pgservice_GetPeerInfo_Handler,
		},
		{
			MethodName: "CollectInPeers",
			Handler:    _P2Pgservice_CollectInPeers_Handler,
		},
		{
			MethodName: "CollectInPeers2",
			Handler:    _P2Pgservice_CollectInPeers2_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "GetData",
			Handler:       _P2Pgservice_GetData_Handler,
			ServerStreams: true,
		},
		{
			StreamName:    "ServerStreamRead",
			Handler:       _P2Pgservice_ServerStreamRead_Handler,
			ClientStreams: true,
		},
		{
			StreamName:    "ServerStreamSend",
			Handler:       _P2Pgservice_ServerStreamSend_Handler,
			ServerStreams: true,
		},
	},
	Metadata: "p2p.proto",
}
