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

package types

import (
	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)
)

//区块头信息
// 	 version : 版本信息
//	 parentHash :父哈希
// 	 txHash : 交易根哈希
//	 stateHash :状态哈希
// 	 height : 区块高度
//	 blockTime :区块产生时的时标
// 	 txCount : 区块上所有交易个数
//	 difficulty :区块难度系数，
//	 signature :交易签名
type Header struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Version    int64      `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"`
	ParentHash []byte     `protobuf:"bytes,2,opt,name=parentHash,proto3" json:"parentHash,omitempty"`
	TxHash     []byte     `protobuf:"bytes,3,opt,name=txHash,proto3" json:"txHash,omitempty"`
	StateHash  []byte     `protobuf:"bytes,4,opt,name=stateHash,proto3" json:"stateHash,omitempty"`
	Height     int64      `protobuf:"varint,5,opt,name=height,proto3" json:"height,omitempty"`
	BlockTime  int64      `protobuf:"varint,6,opt,name=blockTime,proto3" json:"blockTime,omitempty"`
	TxCount    int64      `protobuf:"varint,9,opt,name=txCount,proto3" json:"txCount,omitempty"`
	Hash       []byte     `protobuf:"bytes,10,opt,name=hash,proto3" json:"hash,omitempty"`
	Difficulty uint32     `protobuf:"varint,11,opt,name=difficulty,proto3" json:"difficulty,omitempty"`
	Signature  *Signature `protobuf:"bytes,8,opt,name=signature,proto3" json:"signature,omitempty"`
}

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

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

func (*Header) ProtoMessage() {}

func (x *Header) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_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 Header.ProtoReflect.Descriptor instead.
func (*Header) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{0}
}

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

func (x *Header) GetParentHash() []byte {
	if x != nil {
		return x.ParentHash
	}
	return nil
}

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

func (x *Header) GetStateHash() []byte {
	if x != nil {
		return x.StateHash
	}
	return nil
}

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

func (x *Header) GetBlockTime() int64 {
	if x != nil {
		return x.BlockTime
	}
	return 0
}

func (x *Header) GetTxCount() int64 {
	if x != nil {
		return x.TxCount
	}
	return 0
}

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

func (x *Header) GetDifficulty() uint32 {
	if x != nil {
		return x.Difficulty
	}
	return 0
}

func (x *Header) GetSignature() *Signature {
	if x != nil {
		return x.Signature
	}
	return nil
}

//  参考Header解释
// mainHash 平行链上使用的字段，代表这个区块的主链hash
type Block struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Version    int64          `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"`
	ParentHash []byte         `protobuf:"bytes,2,opt,name=parentHash,proto3" json:"parentHash,omitempty"`
	TxHash     []byte         `protobuf:"bytes,3,opt,name=txHash,proto3" json:"txHash,omitempty"`
	StateHash  []byte         `protobuf:"bytes,4,opt,name=stateHash,proto3" json:"stateHash,omitempty"`
	Height     int64          `protobuf:"varint,5,opt,name=height,proto3" json:"height,omitempty"`
	BlockTime  int64          `protobuf:"varint,6,opt,name=blockTime,proto3" json:"blockTime,omitempty"`
	Difficulty uint32         `protobuf:"varint,11,opt,name=difficulty,proto3" json:"difficulty,omitempty"`
	MainHash   []byte         `protobuf:"bytes,12,opt,name=mainHash,proto3" json:"mainHash,omitempty"`
	MainHeight int64          `protobuf:"varint,13,opt,name=mainHeight,proto3" json:"mainHeight,omitempty"`
	Signature  *Signature     `protobuf:"bytes,8,opt,name=signature,proto3" json:"signature,omitempty"`
	Txs        []*Transaction `protobuf:"bytes,7,rep,name=txs,proto3" json:"txs,omitempty"`
}

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

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

func (*Block) ProtoMessage() {}

func (x *Block) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_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 Block.ProtoReflect.Descriptor instead.
func (*Block) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{1}
}

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

func (x *Block) GetParentHash() []byte {
	if x != nil {
		return x.ParentHash
	}
	return nil
}

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

func (x *Block) GetStateHash() []byte {
	if x != nil {
		return x.StateHash
	}
	return nil
}

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

func (x *Block) GetBlockTime() int64 {
	if x != nil {
		return x.BlockTime
	}
	return 0
}

func (x *Block) GetDifficulty() uint32 {
	if x != nil {
		return x.Difficulty
	}
	return 0
}

func (x *Block) GetMainHash() []byte {
	if x != nil {
		return x.MainHash
	}
	return nil
}

func (x *Block) GetMainHeight() int64 {
	if x != nil {
		return x.MainHeight
	}
	return 0
}

func (x *Block) GetSignature() *Signature {
	if x != nil {
		return x.Signature
	}
	return nil
}

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

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

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

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

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

func (*Blocks) ProtoMessage() {}

func (x *Blocks) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_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 Blocks.ProtoReflect.Descriptor instead.
func (*Blocks) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{2}
}

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

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

	Num    int64          `protobuf:"varint,1,opt,name=num,proto3" json:"num,omitempty"`
	Seq    *BlockSequence `protobuf:"bytes,2,opt,name=seq,proto3" json:"seq,omitempty"`
	Detail *BlockDetail   `protobuf:"bytes,3,opt,name=detail,proto3" json:"detail,omitempty"`
}

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

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

func (*BlockSeq) ProtoMessage() {}

func (x *BlockSeq) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_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 BlockSeq.ProtoReflect.Descriptor instead.
func (*BlockSeq) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{3}
}

func (x *BlockSeq) GetNum() int64 {
	if x != nil {
		return x.Num
	}
	return 0
}

func (x *BlockSeq) GetSeq() *BlockSequence {
	if x != nil {
		return x.Seq
	}
	return nil
}

func (x *BlockSeq) GetDetail() *BlockDetail {
	if x != nil {
		return x.Detail
	}
	return nil
}

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

	Seqs []*BlockSeq `protobuf:"bytes,1,rep,name=seqs,proto3" json:"seqs,omitempty"`
}

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

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

func (*BlockSeqs) ProtoMessage() {}

func (x *BlockSeqs) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_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 BlockSeqs.ProtoReflect.Descriptor instead.
func (*BlockSeqs) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{4}
}

func (x *BlockSeqs) GetSeqs() []*BlockSeq {
	if x != nil {
		return x.Seqs
	}
	return nil
}

//节点ID以及对应的Block
type BlockPid struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

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

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

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

func (*BlockPid) ProtoMessage() {}

func (x *BlockPid) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_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 BlockPid.ProtoReflect.Descriptor instead.
func (*BlockPid) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{5}
}

func (x *BlockPid) GetPid() string {
	if x != nil {
		return x.Pid
	}
	return ""
}

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

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

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

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

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

func (*BlockDetails) ProtoMessage() {}

func (x *BlockDetails) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_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 BlockDetails.ProtoReflect.Descriptor instead.
func (*BlockDetails) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{6}
}

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

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

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

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

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

func (*Headers) ProtoMessage() {}

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

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

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

	Pid     string   `protobuf:"bytes,1,opt,name=pid,proto3" json:"pid,omitempty"`
	Headers *Headers `protobuf:"bytes,2,opt,name=headers,proto3" json:"headers,omitempty"`
}

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

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

func (*HeadersPid) ProtoMessage() {}

func (x *HeadersPid) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_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 HeadersPid.ProtoReflect.Descriptor instead.
func (*HeadersPid) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{8}
}

func (x *HeadersPid) GetPid() string {
	if x != nil {
		return x.Pid
	}
	return ""
}

func (x *HeadersPid) GetHeaders() *Headers {
	if x != nil {
		return x.Headers
	}
	return nil
}

//区块视图
// 	 head : 区块头信息
//	 txCount :区块上交易个数
// 	 txHashes : 区块上交易的哈希列表
type BlockOverview struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Head     *Header  `protobuf:"bytes,1,opt,name=head,proto3" json:"head,omitempty"`
	TxCount  int64    `protobuf:"varint,2,opt,name=txCount,proto3" json:"txCount,omitempty"`
	TxHashes [][]byte `protobuf:"bytes,3,rep,name=txHashes,proto3" json:"txHashes,omitempty"`
}

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

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

func (*BlockOverview) ProtoMessage() {}

func (x *BlockOverview) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_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 BlockOverview.ProtoReflect.Descriptor instead.
func (*BlockOverview) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{9}
}

func (x *BlockOverview) GetHead() *Header {
	if x != nil {
		return x.Head
	}
	return nil
}

func (x *BlockOverview) GetTxCount() int64 {
	if x != nil {
		return x.TxCount
	}
	return 0
}

func (x *BlockOverview) GetTxHashes() [][]byte {
	if x != nil {
		return x.TxHashes
	}
	return nil
}

//区块详细信息
// 	 block : 区块信息
//	 receipts :区块上所有交易的收据信息列表
type BlockDetail struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Block          *Block         `protobuf:"bytes,1,opt,name=block,proto3" json:"block,omitempty"`
	Receipts       []*ReceiptData `protobuf:"bytes,2,rep,name=receipts,proto3" json:"receipts,omitempty"`
	KV             []*KeyValue    `protobuf:"bytes,3,rep,name=KV,proto3" json:"KV,omitempty"`
	PrevStatusHash []byte         `protobuf:"bytes,4,opt,name=prevStatusHash,proto3" json:"prevStatusHash,omitempty"`
}

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

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

func (*BlockDetail) ProtoMessage() {}

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

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

func (x *BlockDetail) GetReceipts() []*ReceiptData {
	if x != nil {
		return x.Receipts
	}
	return nil
}

func (x *BlockDetail) GetKV() []*KeyValue {
	if x != nil {
		return x.KV
	}
	return nil
}

func (x *BlockDetail) GetPrevStatusHash() []byte {
	if x != nil {
		return x.PrevStatusHash
	}
	return nil
}

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

	Receipts []*Receipt `protobuf:"bytes,1,rep,name=receipts,proto3" json:"receipts,omitempty"`
}

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

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

func (*Receipts) ProtoMessage() {}

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

func (x *Receipts) GetReceipts() []*Receipt {
	if x != nil {
		return x.Receipts
	}
	return nil
}

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

	Errs []string `protobuf:"bytes,1,rep,name=errs,proto3" json:"errs,omitempty"`
}

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

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

func (*ReceiptCheckTxList) ProtoMessage() {}

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

func (x *ReceiptCheckTxList) GetErrs() []string {
	if x != nil {
		return x.Errs
	}
	return nil
}

//区块链状态
// 	 currentHeight : 区块最新高度
//	 mempoolSize :内存池大小
// 	 msgQueueSize : 消息队列大小
type ChainStatus struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	CurrentHeight int64 `protobuf:"varint,1,opt,name=currentHeight,proto3" json:"currentHeight,omitempty"`
	MempoolSize   int64 `protobuf:"varint,2,opt,name=mempoolSize,proto3" json:"mempoolSize,omitempty"`
	MsgQueueSize  int64 `protobuf:"varint,3,opt,name=msgQueueSize,proto3" json:"msgQueueSize,omitempty"`
}

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

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

func (*ChainStatus) ProtoMessage() {}

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

func (x *ChainStatus) GetCurrentHeight() int64 {
	if x != nil {
		return x.CurrentHeight
	}
	return 0
}

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

func (x *ChainStatus) GetMsgQueueSize() int64 {
	if x != nil {
		return x.MsgQueueSize
	}
	return 0
}

//获取区块信息
// 	 start : 获取区块的开始高度
//	 end :获取区块的结束高度
// 	 Isdetail : 是否需要获取区块的详细信息
// 	 pid : peer列表
type ReqBlocks struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Start    int64    `protobuf:"varint,1,opt,name=start,proto3" json:"start,omitempty"`
	End      int64    `protobuf:"varint,2,opt,name=end,proto3" json:"end,omitempty"`
	IsDetail bool     `protobuf:"varint,3,opt,name=isDetail,proto3" json:"isDetail,omitempty"`
	Pid      []string `protobuf:"bytes,4,rep,name=pid,proto3" json:"pid,omitempty"`
}

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

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

func (*ReqBlocks) ProtoMessage() {}

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

func (x *ReqBlocks) GetStart() int64 {
	if x != nil {
		return x.Start
	}
	return 0
}

func (x *ReqBlocks) GetEnd() int64 {
	if x != nil {
		return x.End
	}
	return 0
}

func (x *ReqBlocks) GetIsDetail() bool {
	if x != nil {
		return x.IsDetail
	}
	return false
}

func (x *ReqBlocks) GetPid() []string {
	if x != nil {
		return x.Pid
	}
	return nil
}

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

	Size int64 `protobuf:"varint,1,opt,name=size,proto3" json:"size,omitempty"`
}

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

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

func (*MempoolSize) ProtoMessage() {}

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

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

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

	Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"`
}

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

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

func (*ReplyBlockHeight) ProtoMessage() {}

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

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

//区块体信息
// 	 txs : 区块上所有交易列表
//	 receipts :区块上所有交易的收据信息列表
// 	 mainHash : 主链区块hash，平行链使用
//	 mainHeight :主链区块高度，平行链使用
// 	 hash : 本链区块hash
//	 height :本链区块高度
type BlockBody struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Txs        []*Transaction `protobuf:"bytes,1,rep,name=txs,proto3" json:"txs,omitempty"`
	Receipts   []*ReceiptData `protobuf:"bytes,2,rep,name=receipts,proto3" json:"receipts,omitempty"`
	MainHash   []byte         `protobuf:"bytes,3,opt,name=mainHash,proto3" json:"mainHash,omitempty"`
	MainHeight int64          `protobuf:"varint,4,opt,name=mainHeight,proto3" json:"mainHeight,omitempty"`
	Hash       []byte         `protobuf:"bytes,5,opt,name=hash,proto3" json:"hash,omitempty"`
	Height     int64          `protobuf:"varint,6,opt,name=height,proto3" json:"height,omitempty"`
}

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

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

func (*BlockBody) ProtoMessage() {}

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

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

func (x *BlockBody) GetReceipts() []*ReceiptData {
	if x != nil {
		return x.Receipts
	}
	return nil
}

func (x *BlockBody) GetMainHash() []byte {
	if x != nil {
		return x.MainHash
	}
	return nil
}

func (x *BlockBody) GetMainHeight() int64 {
	if x != nil {
		return x.MainHeight
	}
	return 0
}

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

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

//区块回执
//	 receipts :区块上所有交易的收据信息列表
// 	 hash : 本链区块hash
//	 height :本链区块高度
type BlockReceipt struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Receipts []*ReceiptData `protobuf:"bytes,1,rep,name=receipts,proto3" json:"receipts,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 *BlockReceipt) Reset() {
	*x = BlockReceipt{}
	if protoimpl.UnsafeEnabled {
		mi := &file_blockchain_proto_msgTypes[18]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*BlockReceipt) ProtoMessage() {}

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

func (x *BlockReceipt) GetReceipts() []*ReceiptData {
	if x != nil {
		return x.Receipts
	}
	return nil
}

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

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

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

	KVs    []*KeyValue `protobuf:"bytes,1,rep,name=KVs,proto3" json:"KVs,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 *BlockKVs) Reset() {
	*x = BlockKVs{}
	if protoimpl.UnsafeEnabled {
		mi := &file_blockchain_proto_msgTypes[19]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*BlockKVs) ProtoMessage() {}

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

func (x *BlockKVs) GetKVs() []*KeyValue {
	if x != nil {
		return x.KVs
	}
	return nil
}

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

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

//  区块追赶主链状态，用于判断本节点区块是否已经同步好
type IsCaughtUp struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Iscaughtup bool `protobuf:"varint,1,opt,name=Iscaughtup,proto3" json:"Iscaughtup,omitempty"`
}

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

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

func (*IsCaughtUp) ProtoMessage() {}

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

func (x *IsCaughtUp) GetIscaughtup() bool {
	if x != nil {
		return x.Iscaughtup
	}
	return false
}

//  ntp时钟状态
type IsNtpClockSync struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Isntpclocksync bool `protobuf:"varint,1,opt,name=isntpclocksync,proto3" json:"isntpclocksync,omitempty"`
}

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

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

func (*IsNtpClockSync) ProtoMessage() {}

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

func (x *IsNtpClockSync) GetIsntpclocksync() bool {
	if x != nil {
		return x.Isntpclocksync
	}
	return false
}

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

	Driver    string `protobuf:"bytes,1,opt,name=driver,proto3" json:"driver,omitempty"`
	FuncName  string `protobuf:"bytes,2,opt,name=funcName,proto3" json:"funcName,omitempty"`
	StateHash []byte `protobuf:"bytes,3,opt,name=stateHash,proto3" json:"stateHash,omitempty"`
	Param     []byte `protobuf:"bytes,4,opt,name=param,proto3" json:"param,omitempty"`
	//扩展字段，用于额外的用途
	Extra []byte `protobuf:"bytes,5,opt,name=extra,proto3" json:"extra,omitempty"`
}

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

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

func (*ChainExecutor) ProtoMessage() {}

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

func (x *ChainExecutor) GetDriver() string {
	if x != nil {
		return x.Driver
	}
	return ""
}

func (x *ChainExecutor) GetFuncName() string {
	if x != nil {
		return x.FuncName
	}
	return ""
}

func (x *ChainExecutor) GetStateHash() []byte {
	if x != nil {
		return x.StateHash
	}
	return nil
}

func (x *ChainExecutor) GetParam() []byte {
	if x != nil {
		return x.Param
	}
	return nil
}

func (x *ChainExecutor) GetExtra() []byte {
	if x != nil {
		return x.Extra
	}
	return nil
}

//  通过block hash记录block的操作类型及add/del：1/2
type BlockSequence struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Hash []byte `protobuf:"bytes,1,opt,name=Hash,proto3" json:"Hash,omitempty"`
	Type int64  `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"`
}

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

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

func (*BlockSequence) ProtoMessage() {}

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

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

func (x *BlockSequence) GetType() int64 {
	if x != nil {
		return x.Type
	}
	return 0
}

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

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

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

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

func (*BlockSequences) ProtoMessage() {}

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

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

//平行链区块详细信息
// 	 blockdetail : 区块详细信息
//	 sequence :区块序列号
//   isSync:写数据库时是否需要刷盘
type ParaChainBlockDetail struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Blockdetail *BlockDetail `protobuf:"bytes,1,opt,name=blockdetail,proto3" json:"blockdetail,omitempty"`
	Sequence    int64        `protobuf:"varint,2,opt,name=sequence,proto3" json:"sequence,omitempty"`
	IsSync      bool         `protobuf:"varint,3,opt,name=isSync,proto3" json:"isSync,omitempty"`
}

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

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

func (*ParaChainBlockDetail) ProtoMessage() {}

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

func (x *ParaChainBlockDetail) GetBlockdetail() *BlockDetail {
	if x != nil {
		return x.Blockdetail
	}
	return nil
}

func (x *ParaChainBlockDetail) GetSequence() int64 {
	if x != nil {
		return x.Sequence
	}
	return 0
}

func (x *ParaChainBlockDetail) GetIsSync() bool {
	if x != nil {
		return x.IsSync
	}
	return false
}

// 定义para交易结构
type ParaTxDetails struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

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

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

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

func (*ParaTxDetails) ProtoMessage() {}

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

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

// type:平行链交易所在区块add/del操作，方便平行链回滚
// header:平行链交易所在区块头信息
// txDetails:本区块中指定title平行链的所有交易
// proofs:对应平行链子roothash的存在证明路径
// childHash:此平行链交易的子roothash
// index:对应平行链子roothash在整个区块中的索引
type ParaTxDetail struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Type      int64       `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"`
	Header    *Header     `protobuf:"bytes,2,opt,name=header,proto3" json:"header,omitempty"`
	TxDetails []*TxDetail `protobuf:"bytes,3,rep,name=txDetails,proto3" json:"txDetails,omitempty"`
	ChildHash []byte      `protobuf:"bytes,4,opt,name=childHash,proto3" json:"childHash,omitempty"`
	Index     uint32      `protobuf:"varint,5,opt,name=index,proto3" json:"index,omitempty"`
	Proofs    [][]byte    `protobuf:"bytes,6,rep,name=proofs,proto3" json:"proofs,omitempty"`
}

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

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

func (*ParaTxDetail) ProtoMessage() {}

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

func (x *ParaTxDetail) GetType() int64 {
	if x != nil {
		return x.Type
	}
	return 0
}

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

func (x *ParaTxDetail) GetTxDetails() []*TxDetail {
	if x != nil {
		return x.TxDetails
	}
	return nil
}

func (x *ParaTxDetail) GetChildHash() []byte {
	if x != nil {
		return x.ChildHash
	}
	return nil
}

func (x *ParaTxDetail) GetIndex() uint32 {
	if x != nil {
		return x.Index
	}
	return 0
}

func (x *ParaTxDetail) GetProofs() [][]byte {
	if x != nil {
		return x.Proofs
	}
	return nil
}

//交易的详情：
// index:本交易在block中索引值，用于proof的证明
// tx:本交易内容
// receipt:本交易在主链的执行回执
// proofs:本交易hash在block中merkel中的路径
type TxDetail struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Index   uint32       `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"`
	Tx      *Transaction `protobuf:"bytes,2,opt,name=tx,proto3" json:"tx,omitempty"`
	Receipt *ReceiptData `protobuf:"bytes,3,opt,name=receipt,proto3" json:"receipt,omitempty"`
	Proofs  [][]byte     `protobuf:"bytes,4,rep,name=proofs,proto3" json:"proofs,omitempty"`
}

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

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

func (*TxDetail) ProtoMessage() {}

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

func (x *TxDetail) GetIndex() uint32 {
	if x != nil {
		return x.Index
	}
	return 0
}

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

func (x *TxDetail) GetReceipt() *ReceiptData {
	if x != nil {
		return x.Receipt
	}
	return nil
}

func (x *TxDetail) GetProofs() [][]byte {
	if x != nil {
		return x.Proofs
	}
	return nil
}

//通过seq区间和title请求平行链的交易
type ReqParaTxByTitle struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Start int64  `protobuf:"varint,1,opt,name=start,proto3" json:"start,omitempty"`
	End   int64  `protobuf:"varint,2,opt,name=end,proto3" json:"end,omitempty"`
	Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
	IsSeq bool   `protobuf:"varint,4,opt,name=isSeq,proto3" json:"isSeq,omitempty"`
}

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

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

func (*ReqParaTxByTitle) ProtoMessage() {}

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

func (x *ReqParaTxByTitle) GetStart() int64 {
	if x != nil {
		return x.Start
	}
	return 0
}

func (x *ReqParaTxByTitle) GetEnd() int64 {
	if x != nil {
		return x.End
	}
	return 0
}

func (x *ReqParaTxByTitle) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

func (x *ReqParaTxByTitle) GetIsSeq() bool {
	if x != nil {
		return x.IsSeq
	}
	return false
}

//导出block文件头信息
type FileHeader struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	StartHeight int64  `protobuf:"varint,1,opt,name=startHeight,proto3" json:"startHeight,omitempty"`
	Driver      string `protobuf:"bytes,2,opt,name=driver,proto3" json:"driver,omitempty"`
	Title       string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
	TestNet     bool   `protobuf:"varint,4,opt,name=testNet,proto3" json:"testNet,omitempty"`
}

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

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

func (*FileHeader) ProtoMessage() {}

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

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

func (x *FileHeader) GetDriver() string {
	if x != nil {
		return x.Driver
	}
	return ""
}

func (x *FileHeader) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

func (x *FileHeader) GetTestNet() bool {
	if x != nil {
		return x.TestNet
	}
	return false
}

//存储block高度和hash
type EndBlock struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Height int64  `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"`
	Hash   []byte `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"`
}

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

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

func (*EndBlock) ProtoMessage() {}

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

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

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

//通过seq获取区块的header信息
type HeaderSeq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Num    int64          `protobuf:"varint,1,opt,name=num,proto3" json:"num,omitempty"`
	Seq    *BlockSequence `protobuf:"bytes,2,opt,name=seq,proto3" json:"seq,omitempty"`
	Header *Header        `protobuf:"bytes,3,opt,name=header,proto3" json:"header,omitempty"`
}

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

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

func (*HeaderSeq) ProtoMessage() {}

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

func (x *HeaderSeq) GetNum() int64 {
	if x != nil {
		return x.Num
	}
	return 0
}

func (x *HeaderSeq) GetSeq() *BlockSequence {
	if x != nil {
		return x.Seq
	}
	return nil
}

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

//批量推送区块的header信息
type HeaderSeqs struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Seqs []*HeaderSeq `protobuf:"bytes,1,rep,name=seqs,proto3" json:"seqs,omitempty"`
}

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

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

func (*HeaderSeqs) ProtoMessage() {}

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

func (x *HeaderSeqs) GetSeqs() []*HeaderSeq {
	if x != nil {
		return x.Seqs
	}
	return nil
}

//记录本平行链所在区块的信息以及子根hash值
// childHash:平行链子roothash值
// startIndex:此平行链的第一笔交易的index索引值
// childHashIndex:此平行链子roothash在本区块中的索引值
// txCount:此平行链交易的个数
type HeightPara struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Height         int64  `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"`
	Title          string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
	Hash           []byte `protobuf:"bytes,3,opt,name=hash,proto3" json:"hash,omitempty"`
	ChildHash      []byte `protobuf:"bytes,4,opt,name=childHash,proto3" json:"childHash,omitempty"`
	StartIndex     int32  `protobuf:"varint,5,opt,name=startIndex,proto3" json:"startIndex,omitempty"`
	ChildHashIndex uint32 `protobuf:"varint,6,opt,name=childHashIndex,proto3" json:"childHashIndex,omitempty"`
	TxCount        int32  `protobuf:"varint,7,opt,name=txCount,proto3" json:"txCount,omitempty"`
}

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

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

func (*HeightPara) ProtoMessage() {}

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

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

func (x *HeightPara) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

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

func (x *HeightPara) GetChildHash() []byte {
	if x != nil {
		return x.ChildHash
	}
	return nil
}

func (x *HeightPara) GetStartIndex() int32 {
	if x != nil {
		return x.StartIndex
	}
	return 0
}

func (x *HeightPara) GetChildHashIndex() uint32 {
	if x != nil {
		return x.ChildHashIndex
	}
	return 0
}

func (x *HeightPara) GetTxCount() int32 {
	if x != nil {
		return x.TxCount
	}
	return 0
}

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

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

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

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

func (*HeightParas) ProtoMessage() {}

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

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

//记录平行链第一笔交易的index,以及平行链的roothash
// title:子链名字，主链的默认是main
// startIndex:子链第一笔交易的索引
// childHash:子链的根hash
// txCount:子链交易的数量
type ChildChain struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Title      string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`
	StartIndex int32  `protobuf:"varint,2,opt,name=startIndex,proto3" json:"startIndex,omitempty"`
	ChildHash  []byte `protobuf:"bytes,3,opt,name=childHash,proto3" json:"childHash,omitempty"`
	TxCount    int32  `protobuf:"varint,4,opt,name=txCount,proto3" json:"txCount,omitempty"`
}

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

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

func (*ChildChain) ProtoMessage() {}

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

func (x *ChildChain) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

func (x *ChildChain) GetStartIndex() int32 {
	if x != nil {
		return x.StartIndex
	}
	return 0
}

func (x *ChildChain) GetChildHash() []byte {
	if x != nil {
		return x.ChildHash
	}
	return nil
}

func (x *ChildChain) GetTxCount() int32 {
	if x != nil {
		return x.TxCount
	}
	return 0
}

//通过指定title以及height翻页获取拥有此title交易的区块高度列表
type ReqHeightByTitle struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Height    int64  `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"`
	Title     string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
	Count     int32  `protobuf:"varint,3,opt,name=count,proto3" json:"count,omitempty"`
	Direction int32  `protobuf:"varint,4,opt,name=direction,proto3" json:"direction,omitempty"`
}

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

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

func (*ReqHeightByTitle) ProtoMessage() {}

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

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

func (x *ReqHeightByTitle) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

func (x *ReqHeightByTitle) GetCount() int32 {
	if x != nil {
		return x.Count
	}
	return 0
}

func (x *ReqHeightByTitle) GetDirection() int32 {
	if x != nil {
		return x.Direction
	}
	return 0
}

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

	Title string       `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`
	Items []*BlockInfo `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"`
}

func (x *ReplyHeightByTitle) Reset() {
	*x = ReplyHeightByTitle{}
	if protoimpl.UnsafeEnabled {
		mi := &file_blockchain_proto_msgTypes[38]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ReplyHeightByTitle) ProtoMessage() {}

func (x *ReplyHeightByTitle) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_proto_msgTypes[38]
	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 ReplyHeightByTitle.ProtoReflect.Descriptor instead.
func (*ReplyHeightByTitle) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{38}
}

func (x *ReplyHeightByTitle) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

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

// title平行链交易所在主链区块的信息
type BlockInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Height int64  `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"`
	Hash   []byte `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"`
}

func (x *BlockInfo) Reset() {
	*x = BlockInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_blockchain_proto_msgTypes[39]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*BlockInfo) ProtoMessage() {}

func (x *BlockInfo) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_proto_msgTypes[39]
	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 BlockInfo.ProtoReflect.Descriptor instead.
func (*BlockInfo) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{39}
}

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

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

//通过高度列表和title获取平行链交易
type ReqParaTxByHeight struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Items []int64 `protobuf:"varint,1,rep,packed,name=items,proto3" json:"items,omitempty"`
	Title string  `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
}

func (x *ReqParaTxByHeight) Reset() {
	*x = ReqParaTxByHeight{}
	if protoimpl.UnsafeEnabled {
		mi := &file_blockchain_proto_msgTypes[40]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ReqParaTxByHeight) ProtoMessage() {}

func (x *ReqParaTxByHeight) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_proto_msgTypes[40]
	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 ReqParaTxByHeight.ProtoReflect.Descriptor instead.
func (*ReqParaTxByHeight) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{40}
}

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

func (x *ReqParaTxByHeight) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

//用于比较最优区块的消息结构
type CmpBlock struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Block   *Block `protobuf:"bytes,1,opt,name=block,proto3" json:"block,omitempty"`
	CmpHash []byte `protobuf:"bytes,2,opt,name=cmpHash,proto3" json:"cmpHash,omitempty"`
}

func (x *CmpBlock) Reset() {
	*x = CmpBlock{}
	if protoimpl.UnsafeEnabled {
		mi := &file_blockchain_proto_msgTypes[41]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*CmpBlock) ProtoMessage() {}

func (x *CmpBlock) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_proto_msgTypes[41]
	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 CmpBlock.ProtoReflect.Descriptor instead.
func (*CmpBlock) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{41}
}

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

func (x *CmpBlock) GetCmpHash() []byte {
	if x != nil {
		return x.CmpHash
	}
	return nil
}

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

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

func (x *BlockBodys) Reset() {
	*x = BlockBodys{}
	if protoimpl.UnsafeEnabled {
		mi := &file_blockchain_proto_msgTypes[42]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*BlockBodys) ProtoMessage() {}

func (x *BlockBodys) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_proto_msgTypes[42]
	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 BlockBodys.ProtoReflect.Descriptor instead.
func (*BlockBodys) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{42}
}

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

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

	Infos []*ChunkInfo `protobuf:"bytes,1,rep,name=infos,proto3" json:"infos,omitempty"`
}

func (x *ChunkRecords) Reset() {
	*x = ChunkRecords{}
	if protoimpl.UnsafeEnabled {
		mi := &file_blockchain_proto_msgTypes[43]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ChunkRecords) ProtoMessage() {}

func (x *ChunkRecords) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_proto_msgTypes[43]
	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 ChunkRecords.ProtoReflect.Descriptor instead.
func (*ChunkRecords) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{43}
}

func (x *ChunkRecords) GetInfos() []*ChunkInfo {
	if x != nil {
		return x.Infos
	}
	return nil
}

// ChunkInfoMsg 用于消息传递
type ChunkInfoMsg struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	ChunkHash []byte `protobuf:"bytes,1,opt,name=chunkHash,proto3" json:"chunkHash,omitempty"`
	Start     int64  `protobuf:"varint,2,opt,name=start,proto3" json:"start,omitempty"`
	End       int64  `protobuf:"varint,3,opt,name=end,proto3" json:"end,omitempty"`
}

func (x *ChunkInfoMsg) Reset() {
	*x = ChunkInfoMsg{}
	if protoimpl.UnsafeEnabled {
		mi := &file_blockchain_proto_msgTypes[44]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ChunkInfoMsg) ProtoMessage() {}

func (x *ChunkInfoMsg) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_proto_msgTypes[44]
	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 ChunkInfoMsg.ProtoReflect.Descriptor instead.
func (*ChunkInfoMsg) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{44}
}

func (x *ChunkInfoMsg) GetChunkHash() []byte {
	if x != nil {
		return x.ChunkHash
	}
	return nil
}

func (x *ChunkInfoMsg) GetStart() int64 {
	if x != nil {
		return x.Start
	}
	return 0
}

func (x *ChunkInfoMsg) GetEnd() int64 {
	if x != nil {
		return x.End
	}
	return 0
}

// ChunkInfo用于记录chunk的信息
type ChunkInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	ChunkNum  int64  `protobuf:"varint,1,opt,name=chunkNum,proto3" json:"chunkNum,omitempty"`
	ChunkHash []byte `protobuf:"bytes,2,opt,name=chunkHash,proto3" json:"chunkHash,omitempty"`
	Start     int64  `protobuf:"varint,3,opt,name=start,proto3" json:"start,omitempty"`
	End       int64  `protobuf:"varint,4,opt,name=end,proto3" json:"end,omitempty"`
}

func (x *ChunkInfo) Reset() {
	*x = ChunkInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_blockchain_proto_msgTypes[45]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ChunkInfo) ProtoMessage() {}

func (x *ChunkInfo) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_proto_msgTypes[45]
	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 ChunkInfo.ProtoReflect.Descriptor instead.
func (*ChunkInfo) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{45}
}

func (x *ChunkInfo) GetChunkNum() int64 {
	if x != nil {
		return x.ChunkNum
	}
	return 0
}

func (x *ChunkInfo) GetChunkHash() []byte {
	if x != nil {
		return x.ChunkHash
	}
	return nil
}

func (x *ChunkInfo) GetStart() int64 {
	if x != nil {
		return x.Start
	}
	return 0
}

func (x *ChunkInfo) GetEnd() int64 {
	if x != nil {
		return x.End
	}
	return 0
}

//获取ChunkRecord信息
// 	 start : 获取Chunk的开始高度
//	 end :获取Chunk的结束高度
// 	 Isdetail : 是否需要获取所有Chunk Record 信息，false时候获取到chunkNum--->chunkhash的KV对，true获取全部
// 	 pid : peer列表
type ReqChunkRecords struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Start    int64    `protobuf:"varint,1,opt,name=start,proto3" json:"start,omitempty"`
	End      int64    `protobuf:"varint,2,opt,name=end,proto3" json:"end,omitempty"`
	IsDetail bool     `protobuf:"varint,3,opt,name=isDetail,proto3" json:"isDetail,omitempty"`
	Pid      []string `protobuf:"bytes,4,rep,name=pid,proto3" json:"pid,omitempty"`
}

func (x *ReqChunkRecords) Reset() {
	*x = ReqChunkRecords{}
	if protoimpl.UnsafeEnabled {
		mi := &file_blockchain_proto_msgTypes[46]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ReqChunkRecords) ProtoMessage() {}

func (x *ReqChunkRecords) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_proto_msgTypes[46]
	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 ReqChunkRecords.ProtoReflect.Descriptor instead.
func (*ReqChunkRecords) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{46}
}

func (x *ReqChunkRecords) GetStart() int64 {
	if x != nil {
		return x.Start
	}
	return 0
}

func (x *ReqChunkRecords) GetEnd() int64 {
	if x != nil {
		return x.End
	}
	return 0
}

func (x *ReqChunkRecords) GetIsDetail() bool {
	if x != nil {
		return x.IsDetail
	}
	return false
}

func (x *ReqChunkRecords) GetPid() []string {
	if x != nil {
		return x.Pid
	}
	return nil
}

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

	Name          string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	URL           string `protobuf:"bytes,2,opt,name=URL,proto3" json:"URL,omitempty"`
	Encode        string `protobuf:"bytes,3,opt,name=encode,proto3" json:"encode,omitempty"`
	LastSequence  int64  `protobuf:"varint,4,opt,name=lastSequence,proto3" json:"lastSequence,omitempty"`
	LastHeight    int64  `protobuf:"varint,5,opt,name=lastHeight,proto3" json:"lastHeight,omitempty"`
	LastBlockHash string `protobuf:"bytes,6,opt,name=lastBlockHash,proto3" json:"lastBlockHash,omitempty"`
	// 0:代表区块；1:代表区块头信息；2：代表交易回执
	Type int32 `protobuf:"varint,7,opt,name=type,proto3" json:"type,omitempty"`
	//允许订阅多个类型的交易回执
	Contract map[string]bool `protobuf:"bytes,8,rep,name=contract,proto3" json:"contract,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
}

func (x *PushSubscribeReq) Reset() {
	*x = PushSubscribeReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_blockchain_proto_msgTypes[47]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*PushSubscribeReq) ProtoMessage() {}

func (x *PushSubscribeReq) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_proto_msgTypes[47]
	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 PushSubscribeReq.ProtoReflect.Descriptor instead.
func (*PushSubscribeReq) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{47}
}

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

func (x *PushSubscribeReq) GetURL() string {
	if x != nil {
		return x.URL
	}
	return ""
}

func (x *PushSubscribeReq) GetEncode() string {
	if x != nil {
		return x.Encode
	}
	return ""
}

func (x *PushSubscribeReq) GetLastSequence() int64 {
	if x != nil {
		return x.LastSequence
	}
	return 0
}

func (x *PushSubscribeReq) GetLastHeight() int64 {
	if x != nil {
		return x.LastHeight
	}
	return 0
}

func (x *PushSubscribeReq) GetLastBlockHash() string {
	if x != nil {
		return x.LastBlockHash
	}
	return ""
}

func (x *PushSubscribeReq) GetType() int32 {
	if x != nil {
		return x.Type
	}
	return 0
}

func (x *PushSubscribeReq) GetContract() map[string]bool {
	if x != nil {
		return x.Contract
	}
	return nil
}

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

	Push *PushSubscribeReq `protobuf:"bytes,1,opt,name=push,proto3" json:"push,omitempty"`
	// 1:active,2:noactive
	Status int32 `protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"`
}

func (x *PushWithStatus) Reset() {
	*x = PushWithStatus{}
	if protoimpl.UnsafeEnabled {
		mi := &file_blockchain_proto_msgTypes[48]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*PushWithStatus) ProtoMessage() {}

func (x *PushWithStatus) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_proto_msgTypes[48]
	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 PushWithStatus.ProtoReflect.Descriptor instead.
func (*PushWithStatus) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{48}
}

func (x *PushWithStatus) GetPush() *PushSubscribeReq {
	if x != nil {
		return x.Push
	}
	return nil
}

func (x *PushWithStatus) GetStatus() int32 {
	if x != nil {
		return x.Status
	}
	return 0
}

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

	Pushes []*PushSubscribeReq `protobuf:"bytes,1,rep,name=pushes,proto3" json:"pushes,omitempty"`
}

func (x *PushSubscribes) Reset() {
	*x = PushSubscribes{}
	if protoimpl.UnsafeEnabled {
		mi := &file_blockchain_proto_msgTypes[49]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*PushSubscribes) ProtoMessage() {}

func (x *PushSubscribes) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_proto_msgTypes[49]
	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 PushSubscribes.ProtoReflect.Descriptor instead.
func (*PushSubscribes) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{49}
}

func (x *PushSubscribes) GetPushes() []*PushSubscribeReq {
	if x != nil {
		return x.Pushes
	}
	return nil
}

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

	IsOk bool   `protobuf:"varint,1,opt,name=isOk,proto3" json:"isOk,omitempty"`
	Msg  string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"`
}

func (x *ReplySubscribePush) Reset() {
	*x = ReplySubscribePush{}
	if protoimpl.UnsafeEnabled {
		mi := &file_blockchain_proto_msgTypes[50]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ReplySubscribePush) ProtoMessage() {}

func (x *ReplySubscribePush) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_proto_msgTypes[50]
	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 ReplySubscribePush.ProtoReflect.Descriptor instead.
func (*ReplySubscribePush) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{50}
}

func (x *ReplySubscribePush) GetIsOk() bool {
	if x != nil {
		return x.IsOk
	}
	return false
}

func (x *ReplySubscribePush) GetMsg() string {
	if x != nil {
		return x.Msg
	}
	return ""
}

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

	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// 0:代表区块；1:代表区块头信息；2：代表交易回执,4 evm event
	Type      int32 `protobuf:"varint,2,opt,name=type,proto3" json:"type,omitempty"`
	FromBlock int64 `protobuf:"varint,3,opt,name=fromBlock,proto3" json:"fromBlock,omitempty"`
	ToBlock   int64 `protobuf:"varint,4,opt,name=toBlock,proto3" json:"toBlock,omitempty"`
	//允许订阅多个类型的交易回执
	Contract map[string]bool `protobuf:"bytes,5,rep,name=contract,proto3" json:"contract,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
}

func (x *ReqSubscribe) Reset() {
	*x = ReqSubscribe{}
	if protoimpl.UnsafeEnabled {
		mi := &file_blockchain_proto_msgTypes[51]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ReqSubscribe) ProtoMessage() {}

func (x *ReqSubscribe) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_proto_msgTypes[51]
	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 ReqSubscribe.ProtoReflect.Descriptor instead.
func (*ReqSubscribe) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{51}
}

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

func (x *ReqSubscribe) GetType() int32 {
	if x != nil {
		return x.Type
	}
	return 0
}

func (x *ReqSubscribe) GetFromBlock() int64 {
	if x != nil {
		return x.FromBlock
	}
	return 0
}

func (x *ReqSubscribe) GetToBlock() int64 {
	if x != nil {
		return x.ToBlock
	}
	return 0
}

func (x *ReqSubscribe) GetContract() map[string]bool {
	if x != nil {
		return x.Contract
	}
	return nil
}

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

	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// 1:active,2:noactive
	Status int32 `protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"`
}

func (x *SubscribeStatus) Reset() {
	*x = SubscribeStatus{}
	if protoimpl.UnsafeEnabled {
		mi := &file_blockchain_proto_msgTypes[52]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*SubscribeStatus) ProtoMessage() {}

func (x *SubscribeStatus) ProtoReflect() protoreflect.Message {
	mi := &file_blockchain_proto_msgTypes[52]
	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 SubscribeStatus.ProtoReflect.Descriptor instead.
func (*SubscribeStatus) Descriptor() ([]byte, []int) {
	return file_blockchain_proto_rawDescGZIP(), []int{52}
}

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

func (x *SubscribeStatus) GetStatus() int32 {
	if x != nil {
		return x.Status
	}
	return 0
}

var File_blockchain_proto protoreflect.FileDescriptor

var file_blockchain_proto_rawDesc = []byte{
	0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 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, 0x22, 0xac, 0x02, 0x0a, 0x06, 0x48,
	0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12,
	0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12,
	0x16, 0x0a, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52,
	0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65,
	0x48, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74,
	0x65, 0x48, 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18,
	0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1c, 0x0a,
	0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03,
	0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74,
	0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, 0x78,
	0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x0a, 0x20,
	0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66,
	0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64,
	0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x09, 0x73, 0x69, 0x67,
	0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74,
	0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09,
	0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xdf, 0x02, 0x0a, 0x05, 0x42, 0x6c,
	0x6f, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a,
	0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x0c, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a,
	0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74,
	0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x48, 0x61,
	0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x48,
	0x61, 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, 0x20,
	0x01, 0x28, 0x03, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x62,
	0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09,
	0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66,
	0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64,
	0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x69,
	0x6e, 0x48, 0x61, 0x73, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6d, 0x61, 0x69,
	0x6e, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x48, 0x65, 0x69,
	0x67, 0x68, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x48,
	0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2e, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75,
	0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73,
	0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e,
	0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x03, 0x74, 0x78, 0x73, 0x18, 0x07, 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, 0x2c, 0x0a, 0x06, 0x42,
	0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x22, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x6c, 0x6f,
	0x63, 0x6b, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x70, 0x0a, 0x08, 0x42, 0x6c, 0x6f,
	0x63, 0x6b, 0x53, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x03, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x26, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x6c, 0x6f,
	0x63, 0x6b, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x03, 0x73, 0x65, 0x71, 0x12,
	0x2a, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x74,
	0x61, 0x69, 0x6c, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x30, 0x0a, 0x09, 0x42,
	0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x71, 0x73, 0x12, 0x23, 0x0a, 0x04, 0x73, 0x65, 0x71, 0x73,
	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42,
	0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x71, 0x52, 0x04, 0x73, 0x65, 0x71, 0x73, 0x22, 0x40, 0x0a,
	0x08, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x22, 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, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22,
	0x38, 0x0a, 0x0c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12,
	0x28, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12,
	0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61,
	0x69, 0x6c, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x2e, 0x0a, 0x07, 0x48, 0x65, 0x61,
	0x64, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64,
	0x65, 0x72, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x48, 0x0a, 0x0a, 0x48, 0x65, 0x61,
	0x64, 0x65, 0x72, 0x73, 0x50, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x07, 0x68, 0x65, 0x61,
	0x64, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x74, 0x79, 0x70,
	0x65, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64,
	0x65, 0x72, 0x73, 0x22, 0x68, 0x0a, 0x0d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x76, 0x65, 0x72,
	0x76, 0x69, 0x65, 0x77, 0x12, 0x21, 0x0a, 0x04, 0x68, 0x65, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65,
	0x72, 0x52, 0x04, 0x68, 0x65, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x78, 0x43, 0x6f, 0x75,
	0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, 0x78, 0x43, 0x6f, 0x75, 0x6e,
	0x74, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20,
	0x03, 0x28, 0x0c, 0x52, 0x08, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x22, 0xaa, 0x01,
	0x0a, 0x0b, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 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, 0x12, 0x2e, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x18, 0x02, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x63, 0x65,
	0x69, 0x70, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74,
	0x73, 0x12, 0x1f, 0x0a, 0x02, 0x4b, 0x56, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e,
	0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x02,
	0x4b, 0x56, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x76, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
	0x48, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x76,
	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x61, 0x73, 0x68, 0x22, 0x36, 0x0a, 0x08, 0x52, 0x65,
	0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70,
	0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73,
	0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70,
	0x74, 0x73, 0x22, 0x28, 0x0a, 0x12, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x43, 0x68, 0x65,
	0x63, 0x6b, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x72, 0x72, 0x73,
	0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x65, 0x72, 0x72, 0x73, 0x22, 0x79, 0x0a, 0x0b,
	0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x63,
	0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x03, 0x52, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68,
	0x74, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53, 0x69, 0x7a, 0x65,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53,
	0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x73, 0x67, 0x51, 0x75, 0x65, 0x75, 0x65, 0x53,
	0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x73, 0x67, 0x51, 0x75,
	0x65, 0x75, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x61, 0x0a, 0x09, 0x52, 0x65, 0x71, 0x42, 0x6c,
	0x6f, 0x63, 0x6b, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e,
	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08,
	0x69, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08,
	0x69, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18,
	0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x21, 0x0a, 0x0b, 0x4d, 0x65,
	0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a,
	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x2a, 0x0a,
	0x10, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68,
	0x74, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x03, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xc9, 0x01, 0x0a, 0x09, 0x42, 0x6c,
	0x6f, 0x63, 0x6b, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x24, 0x0a, 0x03, 0x74, 0x78, 0x73, 0x18, 0x01,
	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, 0x12, 0x2e, 0x0a,
	0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
	0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x44,
	0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x12, 0x1a, 0x0a,
	0x08, 0x6d, 0x61, 0x69, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52,
	0x08, 0x6d, 0x61, 0x69, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x69,
	0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6d,
	0x61, 0x69, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73,
	0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a,
	0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x68,
	0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x6a, 0x0a, 0x0c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65,
	0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x2e, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74,
	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e,
	0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x65, 0x63,
	0x65, 0x69, 0x70, 0x74, 0x73, 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, 0x59, 0x0a, 0x08, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4b, 0x56, 0x73, 0x12, 0x21, 0x0a,
	0x03, 0x4b, 0x56, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x79, 0x70,
	0x65, 0x73, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x4b, 0x56, 0x73,
	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, 0x2c, 0x0a, 0x0a,
	0x49, 0x73, 0x43, 0x61, 0x75, 0x67, 0x68, 0x74, 0x55, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x49, 0x73,
	0x63, 0x61, 0x75, 0x67, 0x68, 0x74, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a,
	0x49, 0x73, 0x63, 0x61, 0x75, 0x67, 0x68, 0x74, 0x75, 0x70, 0x22, 0x38, 0x0a, 0x0e, 0x49, 0x73,
	0x4e, 0x74, 0x70, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x26, 0x0a, 0x0e,
	0x69, 0x73, 0x6e, 0x74, 0x70, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x6e, 0x74, 0x70, 0x63, 0x6c, 0x6f, 0x63, 0x6b,
	0x73, 0x79, 0x6e, 0x63, 0x22, 0x8d, 0x01, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x45, 0x78,
	0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x12, 0x1a,
	0x0a, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74,
	0x61, 0x74, 0x65, 0x48, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73,
	0x74, 0x61, 0x74, 0x65, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x61,
	0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x14,
	0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x65,
	0x78, 0x74, 0x72, 0x61, 0x22, 0x37, 0x0a, 0x0d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x71,
	0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x0c, 0x52, 0x04, 0x48, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70,
	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3c, 0x0a,
	0x0e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12,
	0x2a, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14,
	0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x71, 0x75,
	0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x14,
	0x50, 0x61, 0x72, 0x61, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65,
	0x74, 0x61, 0x69, 0x6c, 0x12, 0x34, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x64, 0x65, 0x74,
	0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65,
	0x73, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x0b, 0x62,
	0x6c, 0x6f, 0x63, 0x6b, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65,
	0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x65,
	0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x22, 0x3a,
	0x0a, 0x0d, 0x50, 0x61, 0x72, 0x61, 0x54, 0x78, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12,
	0x29, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13,
	0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x54, 0x78, 0x44, 0x65, 0x74,
	0x61, 0x69, 0x6c, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x0c, 0x50,
	0x61, 0x72, 0x61, 0x54, 0x78, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74,
	0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 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, 0x2d, 0x0a, 0x09, 0x74, 0x78, 0x44, 0x65, 0x74, 0x61,
	0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x79, 0x70, 0x65,
	0x73, 0x2e, 0x54, 0x78, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x09, 0x74, 0x78, 0x44, 0x65,
	0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x48, 0x61,
	0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x48,
	0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01,
	0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x6f,
	0x6f, 0x66, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x72, 0x6f, 0x6f, 0x66,
	0x73, 0x22, 0x8a, 0x01, 0x0a, 0x08, 0x54, 0x78, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x14,
	0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69,
	0x6e, 0x64, 0x65, 0x78, 0x12, 0x22, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x02, 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, 0x2c, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x65,
	0x69, 0x70, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x79, 0x70, 0x65,
	0x73, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x72,
	0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73,
	0x18, 0x04, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x22, 0x66,
	0x0a, 0x10, 0x52, 0x65, 0x71, 0x50, 0x61, 0x72, 0x61, 0x54, 0x78, 0x42, 0x79, 0x54, 0x69, 0x74,
	0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69,
	0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65,
	0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x53, 0x65, 0x71, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
	0x05, 0x69, 0x73, 0x53, 0x65, 0x71, 0x22, 0x76, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x48, 0x65,
	0x61, 0x64, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69,
	0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74,
	0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x12, 0x14,
	0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74,
	0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x74, 0x18,
	0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x74, 0x22, 0x36,
	0x0a, 0x08, 0x45, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65,
	0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67,
	0x68, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c,
	0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0x6c, 0x0a, 0x09, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72,
	0x53, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
	0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x26, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b,
	0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x03, 0x73, 0x65, 0x71, 0x12, 0x25, 0x0a,
	0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 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, 0x22, 0x32, 0x0a, 0x0a, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x53, 0x65,
	0x71, 0x73, 0x12, 0x24, 0x0a, 0x04, 0x73, 0x65, 0x71, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x10, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x53,
	0x65, 0x71, 0x52, 0x04, 0x73, 0x65, 0x71, 0x73, 0x22, 0xce, 0x01, 0x0a, 0x0a, 0x48, 0x65, 0x69,
	0x67, 0x68, 0x74, 0x50, 0x61, 0x72, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68,
	0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12,
	0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
	0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x69,
	0x6c, 0x64, 0x48, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x63, 0x68,
	0x69, 0x6c, 0x64, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74,
	0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61,
	0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x68, 0x69, 0x6c, 0x64,
	0x48, 0x61, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52,
	0x0e, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x48, 0x61, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12,
	0x18, 0x0a, 0x07, 0x74, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05,
	0x52, 0x07, 0x74, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x36, 0x0a, 0x0b, 0x48, 0x65, 0x69,
	0x67, 0x68, 0x74, 0x50, 0x61, 0x72, 0x61, 0x73, 0x12, 0x27, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d,
	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e,
	0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x50, 0x61, 0x72, 0x61, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d,
	0x73, 0x22, 0x7a, 0x0a, 0x0a, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12,
	0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
	0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e,
	0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74,
	0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x48, 0x61,
	0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x48,
	0x61, 0x73, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04,
	0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x74, 0x0a,
	0x10, 0x52, 0x65, 0x71, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x42, 0x79, 0x54, 0x69, 0x74, 0x6c,
	0x65, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x03, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74,
	0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12,
	0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05,
	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69,
	0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74,
	0x69, 0x6f, 0x6e, 0x22, 0x52, 0x0a, 0x12, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x48, 0x65, 0x69, 0x67,
	0x68, 0x74, 0x42, 0x79, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74,
	0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12,
	0x26, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10,
	0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f,
	0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x37, 0x0a, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b,
	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x12, 0x0a, 0x04,
	0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68,
	0x22, 0x3f, 0x0a, 0x11, 0x52, 0x65, 0x71, 0x50, 0x61, 0x72, 0x61, 0x54, 0x78, 0x42, 0x79, 0x48,
	0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01,
	0x20, 0x03, 0x28, 0x03, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74,
	0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c,
	0x65, 0x22, 0x48, 0x0a, 0x08, 0x43, 0x6d, 0x70, 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, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6d, 0x70, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x0c, 0x52, 0x07, 0x63, 0x6d, 0x70, 0x48, 0x61, 0x73, 0x68, 0x22, 0x34, 0x0a, 0x0a, 0x42,
	0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x6f, 0x64, 0x79, 0x73, 0x12, 0x26, 0x0a, 0x05, 0x69, 0x74, 0x65,
	0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73,
	0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d,
	0x73, 0x22, 0x36, 0x0a, 0x0c, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64,
	0x73, 0x12, 0x26, 0x0a, 0x05, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x10, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x49, 0x6e,
	0x66, 0x6f, 0x52, 0x05, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x22, 0x54, 0x0a, 0x0c, 0x43, 0x68, 0x75,
	0x6e, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x4d, 0x73, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x75,
	0x6e, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x63, 0x68,
	0x75, 0x6e, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a,
	0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22,
	0x6d, 0x0a, 0x09, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08,
	0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08,
	0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x75, 0x6e,
	0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x63, 0x68, 0x75,
	0x6e, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18,
	0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03,
	0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x67,
	0x0a, 0x0f, 0x52, 0x65, 0x71, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64,
	0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
	0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x44,
	0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x44,
	0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x04, 0x20, 0x03,
	0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0xce, 0x02, 0x0a, 0x10, 0x50, 0x75, 0x73, 0x68,
	0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04,
	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
	0x12, 0x10, 0x0a, 0x03, 0x55, 0x52, 0x4c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55,
	0x52, 0x4c, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6c, 0x61,
	0x73, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03,
	0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1e,
	0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, 0x20, 0x01,
	0x28, 0x03, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x24,
	0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18,
	0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b,
	0x48, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01,
	0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x41, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74,
	0x72, 0x61, 0x63, 0x74, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x79, 0x70,
	0x65, 0x73, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
	0x52, 0x65, 0x71, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72,
	0x79, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x1a, 0x3b, 0x0a, 0x0d, 0x43,
	0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
	0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76,
	0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x55, 0x0a, 0x0e, 0x50, 0x75, 0x73, 0x68,
	0x57, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2b, 0x0a, 0x04, 0x70, 0x75,
	0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73,
	0x2e, 0x50, 0x75, 0x73, 0x68, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65,
	0x71, 0x52, 0x04, 0x70, 0x75, 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
	0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22,
	0x41, 0x0a, 0x0e, 0x50, 0x75, 0x73, 0x68, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
	0x73, 0x12, 0x2f, 0x0a, 0x06, 0x70, 0x75, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
	0x0b, 0x32, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x53, 0x75,
	0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x52, 0x06, 0x70, 0x75, 0x73, 0x68,
	0x65, 0x73, 0x22, 0x3a, 0x0a, 0x12, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x75, 0x62, 0x73, 0x63,
	0x72, 0x69, 0x62, 0x65, 0x50, 0x75, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x73, 0x4f, 0x6b,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x69, 0x73, 0x4f, 0x6b, 0x12, 0x10, 0x0a, 0x03,
	0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0xea,
	0x01, 0x0a, 0x0c, 0x52, 0x65, 0x71, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12,
	0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
	0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x42,
	0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x66, 0x72, 0x6f, 0x6d,
	0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x6f, 0x42, 0x6c, 0x6f, 0x63, 0x6b,
	0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, 0x6f, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12,
	0x3d, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28,
	0x0b, 0x32, 0x21, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x53, 0x75, 0x62,
	0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x45,
	0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x1a, 0x3b,
	0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
	0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
	0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08,
	0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3d, 0x0a, 0x0f, 0x53,
	0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12,
	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
	0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 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_blockchain_proto_rawDescOnce sync.Once
	file_blockchain_proto_rawDescData = file_blockchain_proto_rawDesc
)

func file_blockchain_proto_rawDescGZIP() []byte {
	file_blockchain_proto_rawDescOnce.Do(func() {
		file_blockchain_proto_rawDescData = protoimpl.X.CompressGZIP(file_blockchain_proto_rawDescData)
	})
	return file_blockchain_proto_rawDescData
}

var file_blockchain_proto_msgTypes = make([]protoimpl.MessageInfo, 55)
var file_blockchain_proto_goTypes = []interface{}{
	(*Header)(nil),               // 0: types.Header
	(*Block)(nil),                // 1: types.Block
	(*Blocks)(nil),               // 2: types.Blocks
	(*BlockSeq)(nil),             // 3: types.BlockSeq
	(*BlockSeqs)(nil),            // 4: types.BlockSeqs
	(*BlockPid)(nil),             // 5: types.BlockPid
	(*BlockDetails)(nil),         // 6: types.BlockDetails
	(*Headers)(nil),              // 7: types.Headers
	(*HeadersPid)(nil),           // 8: types.HeadersPid
	(*BlockOverview)(nil),        // 9: types.BlockOverview
	(*BlockDetail)(nil),          // 10: types.BlockDetail
	(*Receipts)(nil),             // 11: types.Receipts
	(*ReceiptCheckTxList)(nil),   // 12: types.ReceiptCheckTxList
	(*ChainStatus)(nil),          // 13: types.ChainStatus
	(*ReqBlocks)(nil),            // 14: types.ReqBlocks
	(*MempoolSize)(nil),          // 15: types.MempoolSize
	(*ReplyBlockHeight)(nil),     // 16: types.ReplyBlockHeight
	(*BlockBody)(nil),            // 17: types.BlockBody
	(*BlockReceipt)(nil),         // 18: types.BlockReceipt
	(*BlockKVs)(nil),             // 19: types.BlockKVs
	(*IsCaughtUp)(nil),           // 20: types.IsCaughtUp
	(*IsNtpClockSync)(nil),       // 21: types.IsNtpClockSync
	(*ChainExecutor)(nil),        // 22: types.ChainExecutor
	(*BlockSequence)(nil),        // 23: types.BlockSequence
	(*BlockSequences)(nil),       // 24: types.BlockSequences
	(*ParaChainBlockDetail)(nil), // 25: types.ParaChainBlockDetail
	(*ParaTxDetails)(nil),        // 26: types.ParaTxDetails
	(*ParaTxDetail)(nil),         // 27: types.ParaTxDetail
	(*TxDetail)(nil),             // 28: types.TxDetail
	(*ReqParaTxByTitle)(nil),     // 29: types.ReqParaTxByTitle
	(*FileHeader)(nil),           // 30: types.FileHeader
	(*EndBlock)(nil),             // 31: types.EndBlock
	(*HeaderSeq)(nil),            // 32: types.HeaderSeq
	(*HeaderSeqs)(nil),           // 33: types.HeaderSeqs
	(*HeightPara)(nil),           // 34: types.HeightPara
	(*HeightParas)(nil),          // 35: types.HeightParas
	(*ChildChain)(nil),           // 36: types.ChildChain
	(*ReqHeightByTitle)(nil),     // 37: types.ReqHeightByTitle
	(*ReplyHeightByTitle)(nil),   // 38: types.ReplyHeightByTitle
	(*BlockInfo)(nil),            // 39: types.BlockInfo
	(*ReqParaTxByHeight)(nil),    // 40: types.ReqParaTxByHeight
	(*CmpBlock)(nil),             // 41: types.CmpBlock
	(*BlockBodys)(nil),           // 42: types.BlockBodys
	(*ChunkRecords)(nil),         // 43: types.ChunkRecords
	(*ChunkInfoMsg)(nil),         // 44: types.ChunkInfoMsg
	(*ChunkInfo)(nil),            // 45: types.ChunkInfo
	(*ReqChunkRecords)(nil),      // 46: types.ReqChunkRecords
	(*PushSubscribeReq)(nil),     // 47: types.PushSubscribeReq
	(*PushWithStatus)(nil),       // 48: types.PushWithStatus
	(*PushSubscribes)(nil),       // 49: types.PushSubscribes
	(*ReplySubscribePush)(nil),   // 50: types.ReplySubscribePush
	(*ReqSubscribe)(nil),         // 51: types.ReqSubscribe
	(*SubscribeStatus)(nil),      // 52: types.SubscribeStatus
	nil,                          // 53: types.PushSubscribeReq.ContractEntry
	nil,                          // 54: types.ReqSubscribe.ContractEntry
	(*Signature)(nil),            // 55: types.Signature
	(*Transaction)(nil),          // 56: types.Transaction
	(*ReceiptData)(nil),          // 57: types.ReceiptData
	(*KeyValue)(nil),             // 58: types.KeyValue
	(*Receipt)(nil),              // 59: types.Receipt
}
var file_blockchain_proto_depIdxs = []int32{
	55, // 0: types.Header.signature:type_name -> types.Signature
	55, // 1: types.Block.signature:type_name -> types.Signature
	56, // 2: types.Block.txs:type_name -> types.Transaction
	1,  // 3: types.Blocks.items:type_name -> types.Block
	23, // 4: types.BlockSeq.seq:type_name -> types.BlockSequence
	10, // 5: types.BlockSeq.detail:type_name -> types.BlockDetail
	3,  // 6: types.BlockSeqs.seqs:type_name -> types.BlockSeq
	1,  // 7: types.BlockPid.block:type_name -> types.Block
	10, // 8: types.BlockDetails.items:type_name -> types.BlockDetail
	0,  // 9: types.Headers.items:type_name -> types.Header
	7,  // 10: types.HeadersPid.headers:type_name -> types.Headers
	0,  // 11: types.BlockOverview.head:type_name -> types.Header
	1,  // 12: types.BlockDetail.block:type_name -> types.Block
	57, // 13: types.BlockDetail.receipts:type_name -> types.ReceiptData
	58, // 14: types.BlockDetail.KV:type_name -> types.KeyValue
	59, // 15: types.Receipts.receipts:type_name -> types.Receipt
	56, // 16: types.BlockBody.txs:type_name -> types.Transaction
	57, // 17: types.BlockBody.receipts:type_name -> types.ReceiptData
	57, // 18: types.BlockReceipt.receipts:type_name -> types.ReceiptData
	58, // 19: types.BlockKVs.KVs:type_name -> types.KeyValue
	23, // 20: types.BlockSequences.items:type_name -> types.BlockSequence
	10, // 21: types.ParaChainBlockDetail.blockdetail:type_name -> types.BlockDetail
	27, // 22: types.ParaTxDetails.items:type_name -> types.ParaTxDetail
	0,  // 23: types.ParaTxDetail.header:type_name -> types.Header
	28, // 24: types.ParaTxDetail.txDetails:type_name -> types.TxDetail
	56, // 25: types.TxDetail.tx:type_name -> types.Transaction
	57, // 26: types.TxDetail.receipt:type_name -> types.ReceiptData
	23, // 27: types.HeaderSeq.seq:type_name -> types.BlockSequence
	0,  // 28: types.HeaderSeq.header:type_name -> types.Header
	32, // 29: types.HeaderSeqs.seqs:type_name -> types.HeaderSeq
	34, // 30: types.HeightParas.items:type_name -> types.HeightPara
	39, // 31: types.ReplyHeightByTitle.items:type_name -> types.BlockInfo
	1,  // 32: types.CmpBlock.block:type_name -> types.Block
	17, // 33: types.BlockBodys.items:type_name -> types.BlockBody
	45, // 34: types.ChunkRecords.infos:type_name -> types.ChunkInfo
	53, // 35: types.PushSubscribeReq.contract:type_name -> types.PushSubscribeReq.ContractEntry
	47, // 36: types.PushWithStatus.push:type_name -> types.PushSubscribeReq
	47, // 37: types.PushSubscribes.pushes:type_name -> types.PushSubscribeReq
	54, // 38: types.ReqSubscribe.contract:type_name -> types.ReqSubscribe.ContractEntry
	39, // [39:39] is the sub-list for method output_type
	39, // [39:39] is the sub-list for method input_type
	39, // [39:39] is the sub-list for extension type_name
	39, // [39:39] is the sub-list for extension extendee
	0,  // [0:39] is the sub-list for field type_name
}

func init() { file_blockchain_proto_init() }
func file_blockchain_proto_init() {
	if File_blockchain_proto != nil {
		return
	}
	file_transaction_proto_init()
	file_common_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_blockchain_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Header); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Block); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Blocks); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BlockSeq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BlockSeqs); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BlockPid); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BlockDetails); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Headers); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*HeadersPid); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BlockOverview); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BlockDetail); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Receipts); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReceiptCheckTxList); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ChainStatus); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReqBlocks); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*MempoolSize); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReplyBlockHeight); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BlockBody); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BlockReceipt); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BlockKVs); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*IsCaughtUp); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*IsNtpClockSync); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ChainExecutor); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BlockSequence); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BlockSequences); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ParaChainBlockDetail); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ParaTxDetails); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ParaTxDetail); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*TxDetail); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReqParaTxByTitle); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*FileHeader); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*EndBlock); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*HeaderSeq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*HeaderSeqs); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*HeightPara); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*HeightParas); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ChildChain); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReqHeightByTitle); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReplyHeightByTitle); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BlockInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReqParaTxByHeight); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CmpBlock); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BlockBodys); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ChunkRecords); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ChunkInfoMsg); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ChunkInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReqChunkRecords); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PushSubscribeReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PushWithStatus); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PushSubscribes); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReplySubscribePush); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReqSubscribe); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_blockchain_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SubscribeStatus); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_blockchain_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   55,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_blockchain_proto_goTypes,
		DependencyIndexes: file_blockchain_proto_depIdxs,
		MessageInfos:      file_blockchain_proto_msgTypes,
	}.Build()
	File_blockchain_proto = out.File
	file_blockchain_proto_rawDesc = nil
	file_blockchain_proto_goTypes = nil
	file_blockchain_proto_depIdxs = nil
}
