From 3a33c0ffa81319ec0abe372ab05175914b1d9e17 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Mon, 20 Jun 2022 16:32:26 +0200 Subject: [PATCH 01/47] starting checkpoint --- .../database/serialization/dbobjects.pb.go | 102 +++++++-- .../database/serialization/dbobjects.proto | 5 + .../database/serialization/tx_block_data.go | 37 ++++ domain/txindex.go/log.go | 11 + domain/txindex.go/model.go | 27 +++ domain/txindex.go/serialization.go | 72 +++++++ domain/txindex.go/serialization_test.go | 44 ++++ domain/txindex.go/store.go | 203 ++++++++++++++++++ domain/txindex.go/txindex.go | 200 +++++++++++++++++ 9 files changed, 689 insertions(+), 12 deletions(-) create mode 100644 domain/consensus/database/serialization/tx_block_data.go create mode 100644 domain/txindex.go/log.go create mode 100644 domain/txindex.go/model.go create mode 100644 domain/txindex.go/serialization.go create mode 100644 domain/txindex.go/serialization_test.go create mode 100644 domain/txindex.go/store.go create mode 100644 domain/txindex.go/txindex.go diff --git a/domain/consensus/database/serialization/dbobjects.pb.go b/domain/consensus/database/serialization/dbobjects.pb.go index f237621c37..943ce895ca 100644 --- a/domain/consensus/database/serialization/dbobjects.pb.go +++ b/domain/consensus/database/serialization/dbobjects.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.26.0 // protoc v3.17.2 // source: dbobjects.proto @@ -1743,6 +1743,61 @@ func (x *DbBlockGHOSTDAGDataHashPair) GetGhostdagData() *DbBlockGhostdagData { return nil } +type DbTxBlockData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AcceptingBlock *DbHash `protobuf:"bytes,1,opt,name=acceptingBlock,proto3" json:"acceptingBlock,omitempty"` + MergeBlock *DbHash `protobuf:"bytes,2,opt,name=mergeBlock,proto3" json:"mergeBlock,omitempty"` +} + +func (x *DbTxBlockData) Reset() { + *x = DbTxBlockData{} + if protoimpl.UnsafeEnabled { + mi := &file_dbobjects_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DbTxBlockData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbTxBlockData) ProtoMessage() {} + +func (x *DbTxBlockData) ProtoReflect() protoreflect.Message { + mi := &file_dbobjects_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 DbTxBlockData.ProtoReflect.Descriptor instead. +func (*DbTxBlockData) Descriptor() ([]byte, []int) { + return file_dbobjects_proto_rawDescGZIP(), []int{29} +} + +func (x *DbTxBlockData) GetAcceptingBlock() *DbHash { + if x != nil { + return x.AcceptingBlock + } + return nil +} + +func (x *DbTxBlockData) GetMergeBlock() *DbHash { + if x != nil { + return x.MergeBlock + } + return nil +} + var File_dbobjects_proto protoreflect.FileDescriptor var file_dbobjects_proto_rawDesc = []byte{ @@ -2000,10 +2055,18 @@ var file_dbobjects_proto_rawDesc = []byte{ 0x2e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x62, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x47, 0x68, 0x6f, 0x73, 0x74, 0x64, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x47, 0x68, 0x6f, 0x73, 0x74, 0x64, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, - 0x42, 0x2a, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, - 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x73, - 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x22, 0x85, 0x01, 0x0a, 0x0d, 0x44, 0x62, 0x54, 0x78, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, + 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x62, 0x48, 0x61, 0x73, + 0x68, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x12, 0x35, 0x0a, 0x0a, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x62, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0a, 0x6d, 0x65, + 0x72, 0x67, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x2a, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, + 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2018,7 +2081,7 @@ func file_dbobjects_proto_rawDescGZIP() []byte { return file_dbobjects_proto_rawDescData } -var file_dbobjects_proto_msgTypes = make([]protoimpl.MessageInfo, 29) +var file_dbobjects_proto_msgTypes = make([]protoimpl.MessageInfo, 30) var file_dbobjects_proto_goTypes = []interface{}{ (*DbBlock)(nil), // 0: serialization.DbBlock (*DbBlockHeader)(nil), // 1: serialization.DbBlockHeader @@ -2049,6 +2112,7 @@ var file_dbobjects_proto_goTypes = []interface{}{ (*DbBlockCount)(nil), // 26: serialization.DbBlockCount (*DbBlockHeaderCount)(nil), // 27: serialization.DbBlockHeaderCount (*DbBlockGHOSTDAGDataHashPair)(nil), // 28: serialization.DbBlockGHOSTDAGDataHashPair + (*DbTxBlockData)(nil), // 29: serialization.DbTxBlockData } var file_dbobjects_proto_depIdxs = []int32{ 1, // 0: serialization.DbBlock.header:type_name -> serialization.DbBlockHeader @@ -2090,11 +2154,13 @@ var file_dbobjects_proto_depIdxs = []int32{ 3, // 36: serialization.DbTips.tips:type_name -> serialization.DbHash 3, // 37: serialization.DbBlockGHOSTDAGDataHashPair.hash:type_name -> serialization.DbHash 15, // 38: serialization.DbBlockGHOSTDAGDataHashPair.GhostdagData:type_name -> serialization.DbBlockGhostdagData - 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 + 3, // 39: serialization.DbTxBlockData.acceptingBlock:type_name -> serialization.DbHash + 3, // 40: serialization.DbTxBlockData.mergeBlock:type_name -> serialization.DbHash + 41, // [41:41] is the sub-list for method output_type + 41, // [41:41] is the sub-list for method input_type + 41, // [41:41] is the sub-list for extension type_name + 41, // [41:41] is the sub-list for extension extendee + 0, // [0:41] is the sub-list for field type_name } func init() { file_dbobjects_proto_init() } @@ -2451,6 +2517,18 @@ func file_dbobjects_proto_init() { return nil } } + file_dbobjects_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DbTxBlockData); 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{ @@ -2458,7 +2536,7 @@ func file_dbobjects_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_dbobjects_proto_rawDesc, NumEnums: 0, - NumMessages: 29, + NumMessages: 30, NumExtensions: 0, NumServices: 0, }, diff --git a/domain/consensus/database/serialization/dbobjects.proto b/domain/consensus/database/serialization/dbobjects.proto index 1248ad33da..98d3586fce 100644 --- a/domain/consensus/database/serialization/dbobjects.proto +++ b/domain/consensus/database/serialization/dbobjects.proto @@ -163,3 +163,8 @@ message DbBlockGHOSTDAGDataHashPair { DbHash hash = 1; DbBlockGhostdagData GhostdagData = 2; } + +message DbTxBlockData { + DbHash acceptingBlock = 1; + DbHash mergeBlock = 2; +} \ No newline at end of file diff --git a/domain/consensus/database/serialization/tx_block_data.go b/domain/consensus/database/serialization/tx_block_data.go new file mode 100644 index 0000000000..d120c53921 --- /dev/null +++ b/domain/consensus/database/serialization/tx_block_data.go @@ -0,0 +1,37 @@ +package serialization + +import ( + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" +) + +// DbHashToDomainHash converts a DbHash to a DomainHash +func DbTToDomainHash(dbHash *DbHash) (*externalapi.DomainHash, error) { + return externalapi.NewDomainHashFromByteSlice(dbHash.Hash) +} + +// DomainHashToDbHash converts a DomainHash to a DbHash +func DomainHashToDbHash(domainHash *externalapi.DomainHash) *DbHash { + return &DbHash{Hash: domainHash.ByteSlice()} +} + +// DomainHashesToDbHashes converts a slice of DomainHash to a slice of DbHash +func DomainHashesToDbHashes(domainHashes []*externalapi.DomainHash) []*DbHash { + dbHashes := make([]*DbHash, len(domainHashes)) + for i, domainHash := range domainHashes { + dbHashes[i] = DomainHashToDbHash(domainHash) + } + return dbHashes +} + +// DbHashesToDomainHashes converts a slice of DbHash to a slice of DomainHash +func DbHashesToDomainHashes(dbHashes []*DbHash) ([]*externalapi.DomainHash, error) { + domainHashes := make([]*externalapi.DomainHash, len(dbHashes)) + for i, domainHash := range dbHashes { + var err error + domainHashes[i], err = DbHashToDomainHash(domainHash) + if err != nil { + return nil, err + } + } + return domainHashes, nil +} diff --git a/domain/txindex.go/log.go b/domain/txindex.go/log.go new file mode 100644 index 0000000000..898b14a7b2 --- /dev/null +++ b/domain/txindex.go/log.go @@ -0,0 +1,11 @@ +// Copyright (c) 2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package txindex + +import ( + "github.com/kaspanet/kaspad/infrastructure/logger" +) + +var log = logger.RegisterSubSystem("TXIN") diff --git a/domain/txindex.go/model.go b/domain/txindex.go/model.go new file mode 100644 index 0000000000..9638647c6e --- /dev/null +++ b/domain/txindex.go/model.go @@ -0,0 +1,27 @@ +package txindex + +import ( + "encoding/binary" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" +) + +// TxBlockData represents +type TxBlockData struct { + acceptingBlockHash *externalapi.DomainHash + mergeBlockHash *externalapi.DomainHash +} + +// TxAcceptingChanges is the set of changes made to the tx index after +// a successful update +type TxAcceptingChanges struct { + toAddAccepting map[externalapi.DomainHash][]*externalapi.DomainHash + toRemoveAccepting map[externalapi.DomainHash][]*externalapi.DomainHash +} + +// TxAcceptingChanges is the set of changes made to the tx index after +// a successful update +type TxMergingChanges struct { + toAddMerge map[externalapi.DomainHash][]*externalapi.DomainHash + toRemoveMeroge map[externalapi.DomainHash][]*externalapi.DomainHash +} + diff --git a/domain/txindex.go/serialization.go b/domain/txindex.go/serialization.go new file mode 100644 index 0000000000..2ec144ea17 --- /dev/null +++ b/domain/txindex.go/serialization.go @@ -0,0 +1,72 @@ +package txindex + +import ( + "encoding/binary" + "github.com/kaspanet/kaspad/domain/consensus/database/serialization" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/pkg/errors" + "google.golang.org/protobuf/proto" + "io" +) + +func serializeOutpoint(outpoint *externalapi.DomainOutpoint) ([]byte, error) { + dbOutpoint := serialization.DomainOutpointToDbOutpoint(outpoint) + return proto.Marshal(dbOutpoint) +} + +func deserializeOutpoint(serializedOutpoint []byte) (*externalapi.DomainOutpoint, error) { + var dbOutpoint serialization.DbOutpoint + err := proto.Unmarshal(serializedOutpoint, &dbOutpoint) + if err != nil { + return nil, err + } + return serialization.DbOutpointToDomainOutpoint(&dbOutpoint) +} + +func serializeUTXOEntry(utxoEntry externalapi.UTXOEntry) ([]byte, error) { + dbUTXOEntry := serialization.UTXOEntryToDBUTXOEntry(utxoEntry) + return proto.Marshal(dbUTXOEntry) +} + +func deserializeUTXOEntry(serializedUTXOEntry []byte) (externalapi.UTXOEntry, error) { + var dbUTXOEntry serialization.DbUtxoEntry + err := proto.Unmarshal(serializedUTXOEntry, &dbUTXOEntry) + if err != nil { + return nil, err + } + return serialization.DBUTXOEntryToUTXOEntry(&dbUTXOEntry) +} + +const hashesLengthSize = 8 + +func serializeHashes(hashes []*externalapi.DomainHash) []byte { + serializedHashes := make([]byte, hashesLengthSize+externalapi.DomainHashSize*len(hashes)) + binary.LittleEndian.PutUint64(serializedHashes[:hashesLengthSize], uint64(len(hashes))) + for i, hash := range hashes { + start := hashesLengthSize + externalapi.DomainHashSize*i + end := start + externalapi.DomainHashSize + copy(serializedHashes[start:end], hash.ByteSlice()) + } + return serializedHashes +} + +func deserializeHashes(serializedHashes []byte) ([]*externalapi.DomainHash, error) { + length := binary.LittleEndian.Uint64(serializedHashes[:hashesLengthSize]) + hashes := make([]*externalapi.DomainHash, length) + for i := uint64(0); i < length; i++ { + start := hashesLengthSize + externalapi.DomainHashSize*i + end := start + externalapi.DomainHashSize + + if end > uint64(len(serializedHashes)) { + return nil, errors.Wrapf(io.ErrUnexpectedEOF, "unexpected EOF while deserializing hashes") + } + + var err error + hashes[i], err = externalapi.NewDomainHashFromByteSlice(serializedHashes[start:end]) + if err != nil { + return nil, err + } + } + + return hashes, nil +} diff --git a/domain/txindex.go/serialization_test.go b/domain/txindex.go/serialization_test.go new file mode 100644 index 0000000000..34ff59dc34 --- /dev/null +++ b/domain/txindex.go/serialization_test.go @@ -0,0 +1,44 @@ +package txindex + +import ( + "encoding/binary" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/pkg/errors" + "io" + "math/rand" + "testing" +) + +func Test_serializeHashes(t *testing.T) { + r := rand.New(rand.NewSource(0)) + + for length := 0; length < 32; length++ { + hashes := make([]*externalapi.DomainHash, length) + for i := range hashes { + var hashBytes [32]byte + r.Read(hashBytes[:]) + hashes[i] = externalapi.NewDomainHashFromByteArray(&hashBytes) + } + result, err := deserializeHashes(serializeHashes(hashes)) + if err != nil { + t.Fatalf("Failed deserializing hashes: %v", err) + } + if !externalapi.HashesEqual(hashes, result) { + t.Fatalf("Expected \n %s \n==\n %s\n", hashes, result) + } + } +} + +func Test_deserializeHashesFailure(t *testing.T) { + hashes := []*externalapi.DomainHash{ + externalapi.NewDomainHashFromByteArray(&[externalapi.DomainHashSize]byte{1}), + externalapi.NewDomainHashFromByteArray(&[externalapi.DomainHashSize]byte{2}), + externalapi.NewDomainHashFromByteArray(&[externalapi.DomainHashSize]byte{3}), + } + serialized := serializeHashes(hashes) + binary.LittleEndian.PutUint64(serialized[:8], uint64(len(hashes)+1)) + _, err := deserializeHashes(serialized) + if !errors.Is(err, io.ErrUnexpectedEOF) { + t.Fatalf("Expected error to be EOF, instead got: %v", err) + } +} diff --git a/domain/txindex.go/store.go b/domain/txindex.go/store.go new file mode 100644 index 0000000000..47e25af7b4 --- /dev/null +++ b/domain/txindex.go/store.go @@ -0,0 +1,203 @@ +package txindex + +import ( + "encoding/binary" + + "github.com/kaspanet/kaspad/domain/consensus/database/binaryserialization" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/infrastructure/db/database" + "github.com/kaspanet/kaspad/infrastructure/logger" + "github.com/pkg/errors" +) + +var txMergeIndexBucket = database.MakeBucket([]byte("tx-merge-index")) +var txAcceptedIndexBuced = database.MakeBucket([]byte("tx-accepted-index")) +var virtualParentsKey = database.MakeBucket([]byte("")).Key([]byte("tx-index-virtual-parents")) +var ghostDagBlocksKey = database.MakeBucket([]byte("")).Key([]byte("tx-index-ghostdagblocks")) + +type txIndexStore struct { + database database.Database + toAddMerge map[externalapi.DomainHash][]*externalapi.DomainTransactionID + toRemoveMerge map[externalapi.DomainHash][]*externalapi.DomainTransactionID + toAddAccepted map[externalapi.DomainHash][]*externalapi.DomainTransactionID + toRemoveAccepted map[externalapi.DomainHash][]*externalapi.DomainTransactionID + virtualParents []*externalapi.DomainHash + ghostdagBlocks []*externalapi.DomainHash +} + +func newTXIndexStore(database database.Database) *txIndexStore { + return &txIndexStore{ + database: database, + toAddMerge: make(map[externalapi.DomainHash][]*externalapi.DomainTransactionID), + toRemoveMerge: make(map[externalapi.DomainHash][]*externalapi.DomainTransactionID), + toAddAccepted: make(map[externalapi.DomainHash][]*externalapi.DomainTransactionID), + toRemoveAccepted: make(map[externalapi.DomainHash][]*externalapi.DomainTransactionID), + virtualParents: nil, + ghostdagBlocks: nil, + } +} + +func (tis *txIndexStore) addMerged(txIDs []*externalapi.DomainTransactionID, mergingBlockHash *externalapi.DomainHash) { + log.Tracef("Adding %d Txs from mergingBlockHash %s", len(txIDs), mergingBlockHash.String()) + if _, found := tis.toRemoveMerge[*mergingBlockHash]; found { + delete(tis.toRemoveMerge, *mergingBlockHash) + } + tis.toAddMerge[*mergingBlockHash] = txIDs +} + +func (tis *txIndexStore) removeMerged(txIDs []*externalapi.DomainTransactionID, mergingBlockHash *externalapi.DomainHash) { + log.Tracef("Removing %d Txs from mergingBlockHash %s", len(txIDs), mergingBlockHash.String()) + if _, found := tis.toAddMerge[*mergingBlockHash]; found { + delete(tis.toAddMerge, *mergingBlockHash) + } + tis.toRemoveMerge[*mergingBlockHash] = txIDs +} + +func (tis *txIndexStore) addAccepted(txIDs []*externalapi.DomainTransactionID, acceptingBlockHash *externalapi.DomainHash) { + log.Tracef("Adding %d Txs from acceptingBlockHash %s", len(txIDs), acceptingBlockHash.String()) + if _, found := tis.toRemoveAccepted[*acceptingBlockHash]; found { + delete(tis.toRemoveAccepted, *acceptingBlockHash) + } + tis.toAddAccepted[*acceptingBlockHash] = txIDs +} + +func (tis *txIndexStore) removeAccepted(txIDs []*externalapi.DomainTransactionID, acceptingBlockHash *externalapi.DomainHash) { + log.Tracef("Removing %d Txs from acceptingBlockHash %s", len(txIDs), acceptingBlockHash.String()) + if _, found := tis.toAddAccepted[*acceptingBlockHash]; found { + delete(tis.toAddAccepted, *acceptingBlockHash) + } + tis.toRemoveMerge[*acceptingBlockHash] = txIDs +} + +func (tis *txIndexStore) discardMerged() { + tis.toAddMerge = make(map[externalapi.DomainHash][]*externalapi.DomainTransactionID) + tis.toRemoveMerge = make(map[externalapi.DomainHash][]*externalapi.DomainTransactionID) + tis.virtualParents = nil +} + +func (tis *txIndexStore) discardAccepted() { + tis.toAddAccepted = make(map[externalapi.DomainHash][]*externalapi.DomainTransactionID) + tis.toRemoveAccepted = make(map[externalapi.DomainHash][]*externalapi.DomainTransactionID) + tis.ghostdagBlocks = nil +} + +func (tis *txIndexStore) discardAll() { + tis.discardAccepted() + tis.discardMerged() +} + +func (tis *txIndexStore) removeAll() error { + tis.removeAccepted() + tis.removeAll() + return nil +} + + +func (tis *txIndexStore) commitAll() error { + tis.commitAccepted() + tis.commitMerged() + return nil +} + +func (tis *txIndexStore) commitMerged() error { + if tis.isAnythingMergingStaged() { + return errors.Errorf("cannot commit merging TxIds while merge staging isn't empty") + } + return nil +} + +func (tis *txIndexStore) commitAccepted() error { + return nil +} + + +func (tis *txIndexStore) convertTxIDToKey(bucket *database.Bucket, txID *externalapi.DomainTransactionID) *database.Key { + return bucket.Key(txID.ByteSlice()) +} + +func (tis *txIndexStore) updateVirtualParents(virtualParents []*externalapi.DomainHash) { + tis.virtualParents = virtualParents +} + +func (tis *txIndexStore) updateGhostDagBlocks(ghostdagBlocks []*externalapi.DomainHash) { + tis.ghostdagBlocks = ghostdagBlocks +} + + +func (tis *txIndexStore) convertKeyToTxID(key *database.Key) (*externalapi.DomainTransactionID, error) { + serializedTxID := key.Suffix() + return externalapi.NewDomainTransactionIDFromByteSlice(serializedTxID) +} + +func (tis *txIndexStore) stagedAcceptingData() error { + return nil +} + +func (tis *txIndexStore) stagedMergingData() error { + return nil +} + +func (tis *txIndexStore) stagedData() error { + return nil +} + +func (tis *txIndexStore) isAnythingStaged() bool { + return tis.isAnythingAcceptingStaged() || tis.isAnythingMergingStaged() +} + +func (tis *txIndexStore) isAnythingAcceptingStaged() bool { + return len(tis.toAddAccepted) > 0 || len(tis.toRemoveAccepted) > 0 +} + +func (tis *txIndexStore) isAnythingMergingStaged() bool { + return len(tis.toAddMerge) > 0 || len(tis.ToRemoveMerge) > 0 +} + +func (tis *txIndexStore) getTxAcceptingBlockHash(scriptPublicKey *externalapi.ScriptPublicKey) (externalapi.DomainHash, error) { + if tis.isAnythingAcceptingStaged() { + return nil, errors.Errorf("cannot get utxo outpoint entry pairs while staging isn't empty") + } + return nil, nil +} + +func (tis *txIndexStore) getTxMergeBlockHash(scriptPublicKey *externalapi.ScriptPublicKey) (externalapi.DomainHash, error) { + if tis.isAnythingMergingMergingStaged() { + return nil, errors.Errorf("cannot get utxo outpoint entry pairs while staging isn't empty") + } + return nil, nil +} + +func (tis *txIndexStore) getTxBlockHashes(scriptPublicKey *externalapi.ScriptPublicKey) (externalapi.DomainHash, error) { + if tis.isAnythingStaged() { + return nil, errors.Errorf("cannot get utxo outpoint entry pairs while staging isn't empty") + } + return nil, nil +} + +func (tis *txIndexStore) deleteAccepptingData() error { + return nil +} + +func (tis *txIndexStore) deleteMergingData() error { + return nil +} + +func (tis *txIndexStore) deleteAll() error { + tis.deleteAccepptingData() + tis.deleteMergingData() + return nil +} + +func (tis *txIndexStore) resetAcceptingData() error { + return nil +} + +func (tis *txIndexStore) resetMergingData() error { + return nil +} + +func (tis *txIndexStore) resetAll() error { + tis.resetAcceptingData() + tis.resetMergingData() + return nil +} diff --git a/domain/txindex.go/txindex.go b/domain/txindex.go/txindex.go new file mode 100644 index 0000000000..e58a121754 --- /dev/null +++ b/domain/txindex.go/txindex.go @@ -0,0 +1,200 @@ +package txindex + +import ( + "github.com/kaspanet/kaspad/domain" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/infrastructure/db/database" + "github.com/kaspanet/kaspad/infrastructure/logger" + "sync" +) + +// TXIndex maintains an index between transaction IDs and accepting block hashes +type TXIndex struct { + domain domain.Domain + store *txIndexStore + + mutex sync.Mutex +} + +// New creates a new UTXO index. +// +// NOTE: While this is called no new blocks can be added to the consensus. +func New(domain domain.Domain, database database.Database) (*TXIndex, error) { + utxoIndex := &TXIndex{ + domain: domain, + store: newTXIndexStore(database), + } + isSynced, err := utxoIndex.isSynced() + if err != nil { + return nil, err + } + + ///Has check is for migration to circulating supply, can be removed eventually. + hasCirculatingSupplyKey, err := utxoIndex.store.database.Has(circulatingSupplyKey) + if err != nil { + return nil, err + } + + if !isSynced || !hasCirculatingSupplyKey { + + err := utxoIndex.Reset() + if err != nil { + return nil, err + } + } + + return utxoIndex, nil +} + +// Reset deletes the whole UTXO index and resyncs it from consensus. +func (ui *UTXOIndex) Reset() error { + ui.mutex.Lock() + defer ui.mutex.Unlock() + + err := ui.store.deleteAll() + if err != nil { + return err + } + + virtualInfo, err := ui.domain.Consensus().GetVirtualInfo() + if err != nil { + return err + } + + err = ui.store.initializeCirculatingSompiSupply() //At this point the database is empty, so the sole purpose of this call is to initialize the circulating supply key + if err != nil { + return err + } + + var fromOutpoint *externalapi.DomainOutpoint + for { + const step = 1000 + virtualUTXOs, err := ui.domain.Consensus().GetVirtualUTXOs(virtualInfo.ParentHashes, fromOutpoint, step) + if err != nil { + return err + } + + err = ui.store.addAndCommitOutpointsWithoutTransaction(virtualUTXOs) + if err != nil { + return err + } + + if len(virtualUTXOs) < step { + break + } + + fromOutpoint = virtualUTXOs[len(virtualUTXOs)-1].Outpoint + } + + // This has to be done last to mark that the reset went smoothly and no reset has to be called next time. + return ui.store.updateAndCommitVirtualParentsWithoutTransaction(virtualInfo.ParentHashes) +} + +func (ui *UTXOIndex) isSynced() (bool, error) { + utxoIndexVirtualParents, err := ui.store.getVirtualParents() + if err != nil { + if database.IsNotFoundError(err) { + return false, nil + } + return false, err + } + + virtualInfo, err := ui.domain.Consensus().GetVirtualInfo() + if err != nil { + return false, err + } + + return externalapi.HashesEqual(virtualInfo.ParentHashes, utxoIndexVirtualParents), nil +} + +// Update updates the UTXO index with the given DAG selected parent chain changes +func (ui *UTXOIndex) Update(virtualChangeSet *externalapi.VirtualChangeSet) (*UTXOChanges, error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "UTXOIndex.Update") + defer onEnd() + + ui.mutex.Lock() + defer ui.mutex.Unlock() + + log.Tracef("Updating UTXO index with VirtualUTXODiff: %+v", virtualChangeSet.VirtualUTXODiff) + err := ui.removeUTXOs(virtualChangeSet.VirtualUTXODiff.ToRemove()) + if err != nil { + return nil, err + } + + err = ui.addUTXOs(virtualChangeSet.VirtualUTXODiff.ToAdd()) + if err != nil { + return nil, err + } + + ui.store.updateVirtualParents(virtualChangeSet.VirtualParents) + + added, removed, _ := ui.store.stagedData() + utxoIndexChanges := &UTXOChanges{ + Added: added, + Removed: removed, + } + + err = ui.store.commit() + if err != nil { + return nil, err + } + + log.Tracef("UTXO index updated with the UTXOChanged: %+v", utxoIndexChanges) + return utxoIndexChanges, nil +} + +func (ui *UTXOIndex) addUTXOs(toAdd externalapi.UTXOCollection) error { + iterator := toAdd.Iterator() + defer iterator.Close() + for ok := iterator.First(); ok; ok = iterator.Next() { + outpoint, entry, err := iterator.Get() + if err != nil { + return err + } + + log.Tracef("Adding outpoint %s to UTXO index", outpoint) + err = ui.store.add(entry.ScriptPublicKey(), outpoint, entry) + if err != nil { + return err + } + } + return nil +} + +func (ui *UTXOIndex) removeUTXOs(toRemove externalapi.UTXOCollection) error { + iterator := toRemove.Iterator() + defer iterator.Close() + for ok := iterator.First(); ok; ok = iterator.Next() { + outpoint, entry, err := iterator.Get() + if err != nil { + return err + } + + log.Tracef("Removing outpoint %s from UTXO index", outpoint) + err = ui.store.remove(entry.ScriptPublicKey(), outpoint, entry) + if err != nil { + return err + } + } + return nil +} + +// UTXOs returns all the UTXOs for the given scriptPublicKey +func (ui *UTXOIndex) UTXOs(scriptPublicKey *externalapi.ScriptPublicKey) (UTXOOutpointEntryPairs, error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "UTXOIndex.UTXOs") + defer onEnd() + + ui.mutex.Lock() + defer ui.mutex.Unlock() + + return ui.store.getUTXOOutpointEntryPairs(scriptPublicKey) +} + +// GetCirculatingSompiSupply returns the current circulating supply of sompis in the network +func (ui *UTXOIndex) GetCirculatingSompiSupply() (uint64, error) { + + ui.mutex.Lock() + defer ui.mutex.Unlock() + + return ui.store.getCirculatingSompiSupply() +} From 345eaac498402a5ac00c3e27162db7c3f7985824 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Tue, 21 Jun 2022 23:12:06 +0200 Subject: [PATCH 02/47] preliminary draft --- app/appmessage/rpc_get_info.go | 2 +- app/component_manager.go | 15 +- app/rpc/manager.go | 3 + app/rpc/rpccontext/context.go | 4 + app/rpc/rpccontext/notificationmanager.go | 1 + domain/consensus/consensus.go | 42 +++ .../database/serialization/dbobjects.pb.go | 61 ++-- .../database/serialization/dbobjects.proto | 6 +- .../database/serialization/tx_block_data.go | 47 ++- .../consensus/model/externalapi/consensus.go | 1 + domain/txindex.go/model.go | 25 +- domain/txindex.go/serialization.go | 37 +-- domain/txindex.go/store.go | 285 ++++++++++-------- domain/txindex.go/txindex.go | 201 ++++++------ infrastructure/config/config.go | 1 + 15 files changed, 398 insertions(+), 333 deletions(-) diff --git a/app/appmessage/rpc_get_info.go b/app/appmessage/rpc_get_info.go index 00c9882e7d..0bb02534c1 100644 --- a/app/appmessage/rpc_get_info.go +++ b/app/appmessage/rpc_get_info.go @@ -35,7 +35,7 @@ func (msg *GetInfoResponseMessage) Command() MessageCommand { } // NewGetInfoResponseMessage returns a instance of the message -func NewGetInfoResponseMessage(p2pID string, mempoolSize uint64, serverVersion string, isUtxoIndexed bool, isSynced bool) *GetInfoResponseMessage { +func NewGetInfoResponseMessage(p2pID string, mempoolSize uint64, serverVersion string, isUtxoIndexed bool, isTxIndexed bool, isSynced bool) *GetInfoResponseMessage { return &GetInfoResponseMessage{ P2PID: p2pID, MempoolSize: mempoolSize, diff --git a/app/component_manager.go b/app/component_manager.go index 33b9a2c097..186cc5c584 100644 --- a/app/component_manager.go +++ b/app/component_manager.go @@ -13,6 +13,7 @@ import ( "github.com/kaspanet/kaspad/domain" "github.com/kaspanet/kaspad/domain/consensus" "github.com/kaspanet/kaspad/domain/utxoindex" + "github.com/kaspanet/kaspad/domain/txindex" "github.com/kaspanet/kaspad/infrastructure/config" infrastructuredatabase "github.com/kaspanet/kaspad/infrastructure/db/database" "github.com/kaspanet/kaspad/infrastructure/network/addressmanager" @@ -113,6 +114,16 @@ func NewComponentManager(cfg *config.Config, db infrastructuredatabase.Database, log.Infof("UTXO index started") } + var txindex *txindex.TXIndex + if cfg.TXIndex { + txindex, err = txindex.New(domain, db) + if err != nil { + return nil, err + } + + log.Infof("UTXO index started") + } + connectionManager, err := connmanager.New(cfg, netAdapter, addressManager) if err != nil { return nil, err @@ -121,7 +132,7 @@ func NewComponentManager(cfg *config.Config, db infrastructuredatabase.Database, if err != nil { return nil, err } - rpcManager := setupRPC(cfg, domain, netAdapter, protocolManager, connectionManager, addressManager, utxoIndex, domain.ConsensusEventsChannel(), interrupt) + rpcManager := setupRPC(cfg, domain, netAdapter, protocolManager, connectionManager, addressManager, utxoIndex, txindex, domain.ConsensusEventsChannel(), interrupt) return &ComponentManager{ cfg: cfg, @@ -142,6 +153,7 @@ func setupRPC( connectionManager *connmanager.ConnectionManager, addressManager *addressmanager.AddressManager, utxoIndex *utxoindex.UTXOIndex, + txIndex *txindex.TXIndex, consensusEventsChan chan externalapi.ConsensusEvent, shutDownChan chan<- struct{}, ) *rpc.Manager { @@ -154,6 +166,7 @@ func setupRPC( connectionManager, addressManager, utxoIndex, + txIndex, consensusEventsChan, shutDownChan, ) diff --git a/app/rpc/manager.go b/app/rpc/manager.go index 137fd65555..39b6bbc421 100644 --- a/app/rpc/manager.go +++ b/app/rpc/manager.go @@ -7,6 +7,7 @@ import ( "github.com/kaspanet/kaspad/domain" "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/kaspanet/kaspad/domain/utxoindex" + "github.com/kaspanet/kaspad/domain/txindex" "github.com/kaspanet/kaspad/infrastructure/config" "github.com/kaspanet/kaspad/infrastructure/logger" "github.com/kaspanet/kaspad/infrastructure/network/addressmanager" @@ -29,6 +30,7 @@ func NewManager( connectionManager *connmanager.ConnectionManager, addressManager *addressmanager.AddressManager, utxoIndex *utxoindex.UTXOIndex, + txIndex *txindex.TXIndex, consensusEventsChan chan externalapi.ConsensusEvent, shutDownChan chan<- struct{}) *Manager { @@ -41,6 +43,7 @@ func NewManager( connectionManager, addressManager, utxoIndex, + txIndex, shutDownChan, ), } diff --git a/app/rpc/rpccontext/context.go b/app/rpc/rpccontext/context.go index e4674ef620..9ef297fc41 100644 --- a/app/rpc/rpccontext/context.go +++ b/app/rpc/rpccontext/context.go @@ -4,6 +4,7 @@ import ( "github.com/kaspanet/kaspad/app/protocol" "github.com/kaspanet/kaspad/domain" "github.com/kaspanet/kaspad/domain/utxoindex" + "github.com/kaspanet/kaspad/domain/txindex" "github.com/kaspanet/kaspad/infrastructure/config" "github.com/kaspanet/kaspad/infrastructure/network/addressmanager" "github.com/kaspanet/kaspad/infrastructure/network/connmanager" @@ -19,6 +20,7 @@ type Context struct { ConnectionManager *connmanager.ConnectionManager AddressManager *addressmanager.AddressManager UTXOIndex *utxoindex.UTXOIndex + TXIndex *txindex.TXIndex ShutDownChan chan<- struct{} NotificationManager *NotificationManager @@ -32,6 +34,7 @@ func NewContext(cfg *config.Config, connectionManager *connmanager.ConnectionManager, addressManager *addressmanager.AddressManager, utxoIndex *utxoindex.UTXOIndex, + txIndex *txindex.TXIndex shutDownChan chan<- struct{}) *Context { context := &Context{ @@ -42,6 +45,7 @@ func NewContext(cfg *config.Config, ConnectionManager: connectionManager, AddressManager: addressManager, UTXOIndex: utxoIndex, + TXIndex: txIndex, ShutDownChan: shutDownChan, } context.NotificationManager = NewNotificationManager(cfg.ActiveNetParams) diff --git a/app/rpc/rpccontext/notificationmanager.go b/app/rpc/rpccontext/notificationmanager.go index e9b3ef98c2..b83447870f 100644 --- a/app/rpc/rpccontext/notificationmanager.go +++ b/app/rpc/rpccontext/notificationmanager.go @@ -9,6 +9,7 @@ import ( "github.com/kaspanet/kaspad/app/appmessage" "github.com/kaspanet/kaspad/domain/utxoindex" + //"github.com/kaspanet/kaspad/domain/txindex" routerpkg "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" "github.com/pkg/errors" ) diff --git a/domain/consensus/consensus.go b/domain/consensus/consensus.go index aaddf88e5d..71b5c8e01c 100644 --- a/domain/consensus/consensus.go +++ b/domain/consensus/consensus.go @@ -820,6 +820,48 @@ func (s *consensus) GetVirtualSelectedParentChainFromBlock(blockHash *externalap return s.consensusStateManager.GetVirtualSelectedParentChainFromBlock(stagingArea, blockHash) } +func (s *consensus) GetVirtualSelectedParentChainBlockAcceptanceDataFromBlocksInBatches(blockHash *externalapi.DomainHash, *batchSize int) ([]*externalapi.AcceptanceData, error) { + s.lock.Lock() + defer s.lock.Unlock() + + stagingArea := model.NewStagingArea() + + err := s.validateBlockHashExists(stagingArea, blockHash) + if err != nil { + return nil, err + } + + BlocksAcceptanceData := make([]*externalapi.AcceptanceData, 0) + + pruningPoint, err := s.pruningStore.PruningPoint(s.databaseContext, stagingArea) + if err != nil { + return nil, err + } + + if blockHash.Less(pruningPoint) { + return + } + + for i := 0; i < batchSize; i++ { + virtualGHOSTDAGData, err := s.ghostdagDataStores[0].Get(s.databaseContext, stagingArea, blockHash, true) + if err != nil { + return nil, err + } + acceptanceData, err := s.acceptanceDataStore.Get(s.databaseContext, stagingArea, virtualGHOSTDAGData.SelectedParent()) + if err != nil { + return nil, err + } + BlocksAcceptanceData = append(BlocksAcceptanceData, &acceptanceData) + + if virtualGHOSTDAGData.SelectedParent().Equal(pruningPoint) { //acceptnce data is pruned beyoned the pruning point + return BlocksAcceptanceData, nil + } + + } + + return BlocksAcceptanceData, nil +} + func (s *consensus) validateBlockHashExists(stagingArea *model.StagingArea, blockHash *externalapi.DomainHash) error { exists, err := s.blockStatusStore.Exists(s.databaseContext, stagingArea, blockHash) if err != nil { diff --git a/domain/consensus/database/serialization/dbobjects.pb.go b/domain/consensus/database/serialization/dbobjects.pb.go index 943ce895ca..45120e138c 100644 --- a/domain/consensus/database/serialization/dbobjects.pb.go +++ b/domain/consensus/database/serialization/dbobjects.pb.go @@ -1743,17 +1743,17 @@ func (x *DbBlockGHOSTDAGDataHashPair) GetGhostdagData() *DbBlockGhostdagData { return nil } -type DbTxBlockData struct { +type DbTxBlockHashes struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - AcceptingBlock *DbHash `protobuf:"bytes,1,opt,name=acceptingBlock,proto3" json:"acceptingBlock,omitempty"` - MergeBlock *DbHash `protobuf:"bytes,2,opt,name=mergeBlock,proto3" json:"mergeBlock,omitempty"` + AcceptingBlockHash *DbHash `protobuf:"bytes,1,opt,name=acceptingBlockHash,proto3" json:"acceptingBlockHash,omitempty"` + MergeBlockHash *DbHash `protobuf:"bytes,2,opt,name=mergeBlockHash,proto3" json:"mergeBlockHash,omitempty"` } -func (x *DbTxBlockData) Reset() { - *x = DbTxBlockData{} +func (x *DbTxBlockHashes) Reset() { + *x = DbTxBlockHashes{} if protoimpl.UnsafeEnabled { mi := &file_dbobjects_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1761,13 +1761,13 @@ func (x *DbTxBlockData) Reset() { } } -func (x *DbTxBlockData) String() string { +func (x *DbTxBlockHashes) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DbTxBlockData) ProtoMessage() {} +func (*DbTxBlockHashes) ProtoMessage() {} -func (x *DbTxBlockData) ProtoReflect() protoreflect.Message { +func (x *DbTxBlockHashes) ProtoReflect() protoreflect.Message { mi := &file_dbobjects_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1779,21 +1779,21 @@ func (x *DbTxBlockData) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DbTxBlockData.ProtoReflect.Descriptor instead. -func (*DbTxBlockData) Descriptor() ([]byte, []int) { +// Deprecated: Use DbTxBlockHashes.ProtoReflect.Descriptor instead. +func (*DbTxBlockHashes) Descriptor() ([]byte, []int) { return file_dbobjects_proto_rawDescGZIP(), []int{29} } -func (x *DbTxBlockData) GetAcceptingBlock() *DbHash { +func (x *DbTxBlockHashes) GetAcceptingBlockHash() *DbHash { if x != nil { - return x.AcceptingBlock + return x.AcceptingBlockHash } return nil } -func (x *DbTxBlockData) GetMergeBlock() *DbHash { +func (x *DbTxBlockHashes) GetMergeBlockHash() *DbHash { if x != nil { - return x.MergeBlock + return x.MergeBlockHash } return nil } @@ -2055,18 +2055,19 @@ var file_dbobjects_proto_rawDesc = []byte{ 0x2e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x62, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x47, 0x68, 0x6f, 0x73, 0x74, 0x64, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x47, 0x68, 0x6f, 0x73, 0x74, 0x64, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, - 0x22, 0x85, 0x01, 0x0a, 0x0d, 0x44, 0x62, 0x54, 0x78, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, - 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x62, 0x48, 0x61, 0x73, - 0x68, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x12, 0x35, 0x0a, 0x0a, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x62, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0a, 0x6d, 0x65, - 0x72, 0x67, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x2a, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, - 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x22, 0x97, 0x01, 0x0a, 0x0f, 0x44, 0x62, 0x54, 0x78, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, + 0x73, 0x68, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, + 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x44, 0x62, 0x48, 0x61, 0x73, 0x68, 0x52, 0x12, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, + 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x3d, 0x0a, 0x0e, 0x6d, + 0x65, 0x72, 0x67, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x62, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0e, 0x6d, 0x65, 0x72, 0x67, + 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x42, 0x2a, 0x5a, 0x28, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, + 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2112,7 +2113,7 @@ var file_dbobjects_proto_goTypes = []interface{}{ (*DbBlockCount)(nil), // 26: serialization.DbBlockCount (*DbBlockHeaderCount)(nil), // 27: serialization.DbBlockHeaderCount (*DbBlockGHOSTDAGDataHashPair)(nil), // 28: serialization.DbBlockGHOSTDAGDataHashPair - (*DbTxBlockData)(nil), // 29: serialization.DbTxBlockData + (*DbTxBlockHashes)(nil), // 29: serialization.DbTxBlockHashes } var file_dbobjects_proto_depIdxs = []int32{ 1, // 0: serialization.DbBlock.header:type_name -> serialization.DbBlockHeader @@ -2154,8 +2155,8 @@ var file_dbobjects_proto_depIdxs = []int32{ 3, // 36: serialization.DbTips.tips:type_name -> serialization.DbHash 3, // 37: serialization.DbBlockGHOSTDAGDataHashPair.hash:type_name -> serialization.DbHash 15, // 38: serialization.DbBlockGHOSTDAGDataHashPair.GhostdagData:type_name -> serialization.DbBlockGhostdagData - 3, // 39: serialization.DbTxBlockData.acceptingBlock:type_name -> serialization.DbHash - 3, // 40: serialization.DbTxBlockData.mergeBlock:type_name -> serialization.DbHash + 3, // 39: serialization.DbTxBlockHashes.acceptingBlockHash:type_name -> serialization.DbHash + 3, // 40: serialization.DbTxBlockHashes.mergeBlockHash:type_name -> serialization.DbHash 41, // [41:41] is the sub-list for method output_type 41, // [41:41] is the sub-list for method input_type 41, // [41:41] is the sub-list for extension type_name @@ -2518,7 +2519,7 @@ func file_dbobjects_proto_init() { } } file_dbobjects_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DbTxBlockData); i { + switch v := v.(*DbTxBlockHashes); i { case 0: return &v.state case 1: diff --git a/domain/consensus/database/serialization/dbobjects.proto b/domain/consensus/database/serialization/dbobjects.proto index 98d3586fce..7bc2729fd8 100644 --- a/domain/consensus/database/serialization/dbobjects.proto +++ b/domain/consensus/database/serialization/dbobjects.proto @@ -164,7 +164,7 @@ message DbBlockGHOSTDAGDataHashPair { DbBlockGhostdagData GhostdagData = 2; } -message DbTxBlockData { - DbHash acceptingBlock = 1; - DbHash mergeBlock = 2; +message DbTxBlockHashes { + DbHash acceptingBlockHash = 1; + DbHash mergeBlockHash = 2; } \ No newline at end of file diff --git a/domain/consensus/database/serialization/tx_block_data.go b/domain/consensus/database/serialization/tx_block_data.go index d120c53921..5008c7c643 100644 --- a/domain/consensus/database/serialization/tx_block_data.go +++ b/domain/consensus/database/serialization/tx_block_data.go @@ -1,37 +1,30 @@ package serialization import ( - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/domain/txindex" ) -// DbHashToDomainHash converts a DbHash to a DomainHash -func DbTToDomainHash(dbHash *DbHash) (*externalapi.DomainHash, error) { - return externalapi.NewDomainHashFromByteSlice(dbHash.Hash) -} - -// DomainHashToDbHash converts a DomainHash to a DbHash -func DomainHashToDbHash(domainHash *externalapi.DomainHash) *DbHash { - return &DbHash{Hash: domainHash.ByteSlice()} -} - -// DomainHashesToDbHashes converts a slice of DomainHash to a slice of DbHash -func DomainHashesToDbHashes(domainHashes []*externalapi.DomainHash) []*DbHash { - dbHashes := make([]*DbHash, len(domainHashes)) - for i, domainHash := range domainHashes { - dbHashes[i] = DomainHashToDbHash(domainHash) +// DomainOutpointToDbOutpoint converts DomainOutpoint to DbOutpoint +func TxBlockHashesToDbTxBlockHashes(txBlockHashes *txindex.TxBlockHashes) *DbTxBlockHashes { + return &DbTxBlockHashes{ + AcceptingBlockHash: DomainHashToDbHash(txBlockHashes.acceptingBlockHash), + MergeBlockHash: DomainHashToDbHash(txBlockHashes.mergeBlockHash), } - return dbHashes } -// DbHashesToDomainHashes converts a slice of DbHash to a slice of DomainHash -func DbHashesToDomainHashes(dbHashes []*DbHash) ([]*externalapi.DomainHash, error) { - domainHashes := make([]*externalapi.DomainHash, len(dbHashes)) - for i, domainHash := range dbHashes { - var err error - domainHashes[i], err = DbHashToDomainHash(domainHash) - if err != nil { - return nil, err - } +// DbOutpointToDomainOutpoint converts DbOutpoint to DomainOutpoint +func DbTxBlockHashesToTxBlockHashes(dbTxBlockHashes *DbTxBlockHashes) (*txindex.TxBlockHashes, error) { + acceptingBlockHash, err := DbHashToDomainHash(dbTxBlockHashes.AcceptingBlockHash) + if err != nil { + return nil, err + } + mergeBlockHash, err := DbHashToDomainHash(dbTxBlockHashes.AcceptingBlockHash) + if err != nil { + return nil, err } - return domainHashes, nil + + return &txindex.TxBlockHashes{ + AcceptingBlockHash: mergeBlockHash, + MergeBlockHash: acceptingBlockHash, + }, nil } diff --git a/domain/consensus/model/externalapi/consensus.go b/domain/consensus/model/externalapi/consensus.go index adaa81bc4a..8e1e9bbee5 100644 --- a/domain/consensus/model/externalapi/consensus.go +++ b/domain/consensus/model/externalapi/consensus.go @@ -49,6 +49,7 @@ type Consensus interface { EstimateNetworkHashesPerSecond(startHash *DomainHash, windowSize int) (uint64, error) PopulateMass(transaction *DomainTransaction) ResolveVirtual() (bool, error) + GetVirtualSelectedParentChainBlockAcceptanceDataFromBlocksInBatches(startHash *DomainHash, batchSize uint64) ([]*AcceptanceData, error) BlockDAAWindowHashes(blockHash *DomainHash) ([]*DomainHash, error) TrustedDataDataDAAHeader(trustedBlockHash, daaBlockHash *DomainHash, daaBlockWindowIndex uint64) (*TrustedDataDataDAAHeader, error) TrustedBlockAssociatedGHOSTDAGDataBlockHashes(blockHash *DomainHash) ([]*DomainHash, error) diff --git a/domain/txindex.go/model.go b/domain/txindex.go/model.go index 9638647c6e..a2ba153edc 100644 --- a/domain/txindex.go/model.go +++ b/domain/txindex.go/model.go @@ -1,27 +1,12 @@ package txindex import ( - "encoding/binary" "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" ) -// TxBlockData represents -type TxBlockData struct { - acceptingBlockHash *externalapi.DomainHash - mergeBlockHash *externalapi.DomainHash -} - -// TxAcceptingChanges is the set of changes made to the tx index after -// a successful update -type TxAcceptingChanges struct { - toAddAccepting map[externalapi.DomainHash][]*externalapi.DomainHash - toRemoveAccepting map[externalapi.DomainHash][]*externalapi.DomainHash -} - -// TxAcceptingChanges is the set of changes made to the tx index after +// TXChanges is the set of changes made to the UTXO index after // a successful update -type TxMergingChanges struct { - toAddMerge map[externalapi.DomainHash][]*externalapi.DomainHash - toRemoveMeroge map[externalapi.DomainHash][]*externalapi.DomainHash -} - +type TXAcceptanceChange struct { + Added map[externalapi.DomainTransactionID]*externalapi.DomainHash + Removed map[externalapi.DomainTransactionID]*externalapi.DomainHash +} \ No newline at end of file diff --git a/domain/txindex.go/serialization.go b/domain/txindex.go/serialization.go index 2ec144ea17..152921735f 100644 --- a/domain/txindex.go/serialization.go +++ b/domain/txindex.go/serialization.go @@ -1,43 +1,12 @@ package txindex import ( + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "encoding/binary" - "github.com/kaspanet/kaspad/domain/consensus/database/serialization" - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/pkg/errors" - "google.golang.org/protobuf/proto" "io" ) -func serializeOutpoint(outpoint *externalapi.DomainOutpoint) ([]byte, error) { - dbOutpoint := serialization.DomainOutpointToDbOutpoint(outpoint) - return proto.Marshal(dbOutpoint) -} - -func deserializeOutpoint(serializedOutpoint []byte) (*externalapi.DomainOutpoint, error) { - var dbOutpoint serialization.DbOutpoint - err := proto.Unmarshal(serializedOutpoint, &dbOutpoint) - if err != nil { - return nil, err - } - return serialization.DbOutpointToDomainOutpoint(&dbOutpoint) -} - -func serializeUTXOEntry(utxoEntry externalapi.UTXOEntry) ([]byte, error) { - dbUTXOEntry := serialization.UTXOEntryToDBUTXOEntry(utxoEntry) - return proto.Marshal(dbUTXOEntry) -} - -func deserializeUTXOEntry(serializedUTXOEntry []byte) (externalapi.UTXOEntry, error) { - var dbUTXOEntry serialization.DbUtxoEntry - err := proto.Unmarshal(serializedUTXOEntry, &dbUTXOEntry) - if err != nil { - return nil, err - } - return serialization.DBUTXOEntryToUTXOEntry(&dbUTXOEntry) -} - -const hashesLengthSize = 8 func serializeHashes(hashes []*externalapi.DomainHash) []byte { serializedHashes := make([]byte, hashesLengthSize+externalapi.DomainHashSize*len(hashes)) @@ -50,6 +19,8 @@ func serializeHashes(hashes []*externalapi.DomainHash) []byte { return serializedHashes } +const hashesLengthSize = 8 + func deserializeHashes(serializedHashes []byte) ([]*externalapi.DomainHash, error) { length := binary.LittleEndian.Uint64(serializedHashes[:hashesLengthSize]) hashes := make([]*externalapi.DomainHash, length) @@ -69,4 +40,4 @@ func deserializeHashes(serializedHashes []byte) ([]*externalapi.DomainHash, erro } return hashes, nil -} +} \ No newline at end of file diff --git a/domain/txindex.go/store.go b/domain/txindex.go/store.go index 47e25af7b4..21ba4e3c1d 100644 --- a/domain/txindex.go/store.go +++ b/domain/txindex.go/store.go @@ -1,203 +1,238 @@ package txindex import ( - "encoding/binary" - "github.com/kaspanet/kaspad/domain/consensus/database/binaryserialization" "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/kaspanet/kaspad/infrastructure/db/database" "github.com/kaspanet/kaspad/infrastructure/logger" "github.com/pkg/errors" ) -var txMergeIndexBucket = database.MakeBucket([]byte("tx-merge-index")) -var txAcceptedIndexBuced = database.MakeBucket([]byte("tx-accepted-index")) -var virtualParentsKey = database.MakeBucket([]byte("")).Key([]byte("tx-index-virtual-parents")) -var ghostDagBlocksKey = database.MakeBucket([]byte("")).Key([]byte("tx-index-ghostdagblocks")) - +var txAcceptedIndexBucket = database.MakeBucket([]byte("tx-index")) +var virtualParentsKey = database.MakeBucket([]byte("")).Key([]byte("tx-index-virtual-parent")) +var pruningPointKey = database.MakeBucket([]byte("")).Key([]byte("tx-index-prunning-point")) type txIndexStore struct { database database.Database - toAddMerge map[externalapi.DomainHash][]*externalapi.DomainTransactionID - toRemoveMerge map[externalapi.DomainHash][]*externalapi.DomainTransactionID - toAddAccepted map[externalapi.DomainHash][]*externalapi.DomainTransactionID - toRemoveAccepted map[externalapi.DomainHash][]*externalapi.DomainTransactionID + toAdd map[externalapi.DomainTransactionID]*externalapi.DomainHash virtualParents []*externalapi.DomainHash - ghostdagBlocks []*externalapi.DomainHash + pruningPoint *externalapi.DomainHash } func newTXIndexStore(database database.Database) *txIndexStore { return &txIndexStore{ database: database, - toAddMerge: make(map[externalapi.DomainHash][]*externalapi.DomainTransactionID), - toRemoveMerge: make(map[externalapi.DomainHash][]*externalapi.DomainTransactionID), - toAddAccepted: make(map[externalapi.DomainHash][]*externalapi.DomainTransactionID), - toRemoveAccepted: make(map[externalapi.DomainHash][]*externalapi.DomainTransactionID), + toAdd: make(map[externalapi.DomainTransactionID]*externalapi.DomainHash), virtualParents: nil, - ghostdagBlocks: nil, + pruningPoint: nil, } } -func (tis *txIndexStore) addMerged(txIDs []*externalapi.DomainTransactionID, mergingBlockHash *externalapi.DomainHash) { - log.Tracef("Adding %d Txs from mergingBlockHash %s", len(txIDs), mergingBlockHash.String()) - if _, found := tis.toRemoveMerge[*mergingBlockHash]; found { - delete(tis.toRemoveMerge, *mergingBlockHash) +func (tis *txIndexStore) deleteAll() error { + err := tis.database.Delete(virtualParentsKey) + if err != nil { + return err } - tis.toAddMerge[*mergingBlockHash] = txIDs -} -func (tis *txIndexStore) removeMerged(txIDs []*externalapi.DomainTransactionID, mergingBlockHash *externalapi.DomainHash) { - log.Tracef("Removing %d Txs from mergingBlockHash %s", len(txIDs), mergingBlockHash.String()) - if _, found := tis.toAddMerge[*mergingBlockHash]; found { - delete(tis.toAddMerge, *mergingBlockHash) + err = tis.database.Delete(pruningPointKey) + if err != nil { + return err } - tis.toRemoveMerge[*mergingBlockHash] = txIDs -} -func (tis *txIndexStore) addAccepted(txIDs []*externalapi.DomainTransactionID, acceptingBlockHash *externalapi.DomainHash) { - log.Tracef("Adding %d Txs from acceptingBlockHash %s", len(txIDs), acceptingBlockHash.String()) - if _, found := tis.toRemoveAccepted[*acceptingBlockHash]; found { - delete(tis.toRemoveAccepted, *acceptingBlockHash) + cursor, err := tis.database.Cursor(txAcceptedIndexBucket) + if err != nil { + return err + } + defer cursor.Close() + for cursor.Next() { + key, err := cursor.Key() + if err != nil { + return err + } + + err = tis.database.Delete(key) + if err != nil { + return err + } } - tis.toAddAccepted[*acceptingBlockHash] = txIDs + + return nil } -func (tis *txIndexStore) removeAccepted(txIDs []*externalapi.DomainTransactionID, acceptingBlockHash *externalapi.DomainHash) { - log.Tracef("Removing %d Txs from acceptingBlockHash %s", len(txIDs), acceptingBlockHash.String()) - if _, found := tis.toAddAccepted[*acceptingBlockHash]; found { - delete(tis.toAddAccepted, *acceptingBlockHash) +func (tis *txIndexStore) add(txID externalapi.DomainTransactionID, blockHash *externalapi.DomainHash) { + log.Tracef("Adding %d Txs from blockHash %s", len(txIDs), acceptingBlockHash.String()) + for _, txID := range txID { + if _, found := tis.toRemove[*txID]; found { + delete(tis.toRemove, *txID) + } + tis.toAdd[*txID] = *blockHash } - tis.toRemoveMerge[*acceptingBlockHash] = txIDs } -func (tis *txIndexStore) discardMerged() { - tis.toAddMerge = make(map[externalapi.DomainHash][]*externalapi.DomainTransactionID) - tis.toRemoveMerge = make(map[externalapi.DomainHash][]*externalapi.DomainTransactionID) - tis.virtualParents = nil +func (tis *txIndexStore) remove(txIDs []*externalapi.DomainTransactionID, blockHash *externalapi.DomainHash) { + log.Tracef("Removing %d Txs from blockHash %s", len(txIDs), blockHash.String()) + for _, txID := range txIDs { + if _, found := tis.toAdd[*txID]; found { + delete(tis.toAdd, *txID) + } + tis.toRemove[*txID] = *blockHash + } } -func (tis *txIndexStore) discardAccepted() { - tis.toAddAccepted = make(map[externalapi.DomainHash][]*externalapi.DomainTransactionID) - tis.toRemoveAccepted = make(map[externalapi.DomainHash][]*externalapi.DomainTransactionID) - tis.ghostdagBlocks = nil +func (tis *txIndexStore) discard() { + tis.toAdd = make(map[externalapi.DomainTransactionID]*externalapi.DomainHash) + tis.virtualParents = nil + tis.pruningPoint = nil } -func (tis *txIndexStore) discardAll() { - tis.discardAccepted() - tis.discardMerged() -} +func (tis *txIndexStore) commitAndReturnRemoved() ( + removed map[externalapi.DomainTransactionID]*externalapi.DomainHash, + err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "txIndexStore.commit") + defer onEnd() -func (tis *txIndexStore) removeAll() error { - tis.removeAccepted() - tis.removeAll() - return nil -} -func (tis *txIndexStore) commitAll() error { - tis.commitAccepted() - tis.commitMerged() - return nil -} + dbTransaction, err := tis.database.Begin() + if err != nil { + return err + } -func (tis *txIndexStore) commitMerged() error { - if tis.isAnythingMergingStaged() { - return errors.Errorf("cannot commit merging TxIds while merge staging isn't empty") + defer dbTransaction.RollbackUnlessClosed() + + removed := make(map[externalapi.DomainTransactionID]*externalapi.DomainHash) + + for txID, blockHash := range tis.toAdd { + key := convertTxIDToKey(txAcceptedIndexBucket, TxID) + if dbTransaction.Has(key) { + removedBlockHash, err := dbTransaction.Get(key) + if err != nil { + return nil, err + } + removed[txID] = externalapi.NewDomainHashFromByteSlice(removedBlockHash) + } + dbTransaction.Put(key, blockHash.ByteSlice()) + if err != nil { + return nil, err + } + } + err = dbTransaction.Put(virtualParentsKey, serializeHashes(ti.virtualSelectedParents)) + if err != nil { + return err + } + err = dbTransaction.Put(pruningPointKey, tis.pruningPoint.ByteSlice()) + if err != nil { + return nil, err } - return nil -} -func (tis *txIndexStore) commitAccepted() error { - return nil -} -func (tis *txIndexStore) convertTxIDToKey(bucket *database.Bucket, txID *externalapi.DomainTransactionID) *database.Key { - return bucket.Key(txID.ByteSlice()) -} + err = dbTransaction.Commit() + if err != nil { + return nil, err + } -func (tis *txIndexStore) updateVirtualParents(virtualParents []*externalapi.DomainHash) { - tis.virtualParents = virtualParents + tis.discard() + + return removed, nil } -func (tis *txIndexStore) updateGhostDagBlocks(ghostdagBlocks []*externalapi.DomainHash) { - tis.ghostdagBlocks = ghostdagBlocks +func (tis *txIndexStore) updateAndCommitVirtualParentsWithoutTransaction(virtualParents []*externalapi.DomainHash) error { + serializeParentHashes := serializeHashes(virtualParents) + return tis.database.Put(virtualParentsKey, serializeParentHashes) } +func (tis *txIndexStore) updateAndCommitPruningPointWithoutTransaction(pruningPoint *externalapi.DomainHash) error { + return tis.database.Put(pruningPointKey, pruningPoint.ByteSlice()) -func (tis *txIndexStore) convertKeyToTxID(key *database.Key) (*externalapi.DomainTransactionID, error) { - serializedTxID := key.Suffix() - return externalapi.NewDomainTransactionIDFromByteSlice(serializedTxID) } -func (tis *txIndexStore) stagedAcceptingData() error { - return nil +func (tis *txIndexStore) updateVirtualParents(virtualParents []*externalapi.DomainHash) { + tis.virtualParents = virtualParents } -func (tis *txIndexStore) stagedMergingData() error { - return nil -} +func (tis *txIndexStore) CommitWithoutTransaction() error { + for txID, blockHash := range tis.toAdd { + key := tis.convertTxIDToKey(txAcceptedIndexBucket, txID) + err = tis.database.Put(key, blockHash.ByteSlice()) + if err != nil { + return err + } + } -func (tis *txIndexStore) stagedData() error { return nil } -func (tis *txIndexStore) isAnythingStaged() bool { - return tis.isAnythingAcceptingStaged() || tis.isAnythingMergingStaged() -} +func (tis *txIndexStore) getVirtualParents() ([]*externalapi.DomainHash, error) { + if tis.isAnythingStaged() { + return nil, errors.Errorf("cannot get the virtual parent while staging isn't empty") + } -func (tis *txIndexStore) isAnythingAcceptingStaged() bool { - return len(tis.toAddAccepted) > 0 || len(tis.toRemoveAccepted) > 0 -} + serializedVirtualParentHash, err := tis.database.Get(virtualParentsKey) + if err != nil { + return nil, err + } -func (tis *txIndexStore) isAnythingMergingStaged() bool { - return len(tis.toAddMerge) > 0 || len(tis.ToRemoveMerge) > 0 + return deserializeHashes(serializedVirtualParentHash) } -func (tis *txIndexStore) getTxAcceptingBlockHash(scriptPublicKey *externalapi.ScriptPublicKey) (externalapi.DomainHash, error) { - if tis.isAnythingAcceptingStaged() { - return nil, errors.Errorf("cannot get utxo outpoint entry pairs while staging isn't empty") +func (tis *txIndexStore) getPruningPoint() (*externalapi.DomainHash, error) { + if tis.isAnythingStaged() { + return nil, errors.Errorf("cannot get the Pruning point while staging isn't empty") } - return nil, nil -} -func (tis *txIndexStore) getTxMergeBlockHash(scriptPublicKey *externalapi.ScriptPublicKey) (externalapi.DomainHash, error) { - if tis.isAnythingMergingMergingStaged() { - return nil, errors.Errorf("cannot get utxo outpoint entry pairs while staging isn't empty") + serializedPruningPointHash, err := uis.database.Get(pruningPointKey) + if err != nil { + return nil, err } - return nil, nil -} -func (tis *txIndexStore) getTxBlockHashes(scriptPublicKey *externalapi.ScriptPublicKey) (externalapi.DomainHash, error) { - if tis.isAnythingStaged() { - return nil, errors.Errorf("cannot get utxo outpoint entry pairs while staging isn't empty") - } - return nil, nil + return externalapi.NewDomainHashFromByteSlice(serializedPruningPointHash) } -func (tis *txIndexStore) deleteAccepptingData() error { - return nil +func (tis *txIndexStore) convertTxIDToKey(bucket *database.Bucket, txID *externalapi.DomainTransactionID) *database.Key { + return bucket.Key(txID.ByteSlice()) } -func (tis *txIndexStore) deleteMergingData() error { - return nil +func (tis *txIndexStore) updateVirtualParent(virtualParent externalapi.DomainHash) { + tis.virtualParents = virtualParent } -func (tis *txIndexStore) deleteAll() error { - tis.deleteAccepptingData() - tis.deleteMergingData() - return nil +func (tis *txIndexStore) convertKeyToTxID(key *database.Key) (*externalapi.DomainTransactionID, error) { + return externalapi.NewDomainTransactionIDFromByteSlice(key.Suffix()) } -func (tis *txIndexStore) resetAcceptingData() error { - return nil -} +func (tis *txIndexStore) stagedData() ( + toAdd map[externalapi.DomainTransactionID]*externalapi.DomainHash, + virtualParents []*externalapi.DomainHash, + pruningPoint *externalapi.DomainHash,) { + toAddClone := make(map[externalapi.DomainTransactionID]*externalapi.DomainHash) + for txID, blockHash := range tis.toAdd { + toAddClone[txID] = blockHash -func (tis *txIndexStore) resetMergingData() error { - return nil + } + return toAddClone, tis.virtualParents, tis.pruningPoint } -func (tis *txIndexStore) resetAll() error { - tis.resetAcceptingData() - tis.resetMergingData() - return nil +func (tis *txIndexStore) isAnythingStaged() bool { + return len(tis.toAdd) > 0 } + +func (tis *txIndexStore) getTxAcceptingBlockHash(txID *externalapi.DomainTransactionID) (externalapi.DomainHash, error) { + + if tis.isAnythingAcceptingStaged() { + return nil, errors.Errorf("cannot get TX accepting Block hash while staging isn't empty") + } + + key := tis.convertTxIDToKey(txAcceptedIndexBucket, txID) + serializedAcceptingBlockHash, err := tis.database.Get(key) + + if err != nil { + return nil, err + } + + acceptingBlockHash, err := externalapi.NewDomainHashFromByteSlice(serializedAcceptingBlockHash) + if err != nil { + return nil, err + } + + return acceptingBlockHash, nil +} \ No newline at end of file diff --git a/domain/txindex.go/txindex.go b/domain/txindex.go/txindex.go index e58a121754..684b3d0647 100644 --- a/domain/txindex.go/txindex.go +++ b/domain/txindex.go/txindex.go @@ -1,13 +1,16 @@ package txindex import ( + "sync" + "github.com/kaspanet/kaspad/domain" "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/kaspanet/kaspad/infrastructure/db/database" "github.com/kaspanet/kaspad/infrastructure/logger" - "sync" ) +//TO DO: For archival nodes pruningPoint references should be substituted with the virtualchainBlock with the lowest bluescore! + // TXIndex maintains an index between transaction IDs and accepting block hashes type TXIndex struct { domain domain.Domain @@ -16,82 +19,83 @@ type TXIndex struct { mutex sync.Mutex } -// New creates a new UTXO index. +// New creates a new TX index. // // NOTE: While this is called no new blocks can be added to the consensus. func New(domain domain.Domain, database database.Database) (*TXIndex, error) { - utxoIndex := &TXIndex{ + txIndex := &TXIndex{ domain: domain, store: newTXIndexStore(database), } - isSynced, err := utxoIndex.isSynced() - if err != nil { - return nil, err - } - - ///Has check is for migration to circulating supply, can be removed eventually. - hasCirculatingSupplyKey, err := utxoIndex.store.database.Has(circulatingSupplyKey) + isSynced, err := txIndex.isSynced() if err != nil { return nil, err } - if !isSynced || !hasCirculatingSupplyKey { + if !isSynced { - err := utxoIndex.Reset() + err := txIndex.Reset() if err != nil { return nil, err } } - return utxoIndex, nil + return txIndex, nil } -// Reset deletes the whole UTXO index and resyncs it from consensus. -func (ui *UTXOIndex) Reset() error { - ui.mutex.Lock() - defer ui.mutex.Unlock() +// Reset deletes the whole Txindex and resyncs it from consensus. +func (ti *TXIndex) Reset() error { + ti.mutex.Lock() + defer ti.mutex.Unlock() - err := ui.store.deleteAll() + err := ti.store.deleteAll() if err != nil { return err } - virtualInfo, err := ui.domain.Consensus().GetVirtualInfo() + virtualInfo, err := ti.domain.Consensus().GetVirtualInfo() if err != nil { return err } - err = ui.store.initializeCirculatingSompiSupply() //At this point the database is empty, so the sole purpose of this call is to initialize the circulating supply key + pruningPoint, err := ti.domain.Consensus().PruningPoint() if err != nil { return err } - var fromOutpoint *externalapi.DomainOutpoint - for { - const step = 1000 - virtualUTXOs, err := ui.domain.Consensus().GetVirtualUTXOs(virtualInfo.ParentHashes, fromOutpoint, step) - if err != nil { - return err - } + const chunkSize = 1000 - err = ui.store.addAndCommitOutpointsWithoutTransaction(virtualUTXOs) - if err != nil { - return err - } + //we iterate from pruningPoint up - this gurantees that newer accepting blocks overwrite older ones in the store mapping + //we also do not collect data before pruning point, since relevent blockData is pruned (see `TO DO`` note at the top regarding archival nodes) + selectedParentChainChanges, err := ti.domain.Consensus().GetVirtualSelectedParentChainFromBlock(pruningPoint) + if err != nil { + return err + } - if len(virtualUTXOs) < step { - break - } + ti.addTXIDs(selectedParentChainChanges, 1000) - fromOutpoint = virtualUTXOs[len(virtualUTXOs)-1].Outpoint + err = ti.store.CommitWithoutTransaction() + if err != nil { + return err } - // This has to be done last to mark that the reset went smoothly and no reset has to be called next time. - return ui.store.updateAndCommitVirtualParentsWithoutTransaction(virtualInfo.ParentHashes) + err = ti.store.updateAndCommitPruningPointWithoutTransaction(pruningPoint) + if err != nil { + return err + } + + return ti.store.updateAndCommitVirtualParentsWithoutTransaction(virtualInfo.ParentHashes) + } -func (ui *UTXOIndex) isSynced() (bool, error) { - utxoIndexVirtualParents, err := ui.store.getVirtualParents() +func (ti *TXIndex) isSynced() (bool, error) { + + txIndexVirtualParents, err := ti.store.getVirtualParents() + if err != nil { + return false, err + } + + txIndexPruningPoint, err := ti.store.getPruningPoint() if err != nil { if database.IsNotFoundError(err) { return false, nil @@ -99,89 +103,91 @@ func (ui *UTXOIndex) isSynced() (bool, error) { return false, err } - virtualInfo, err := ui.domain.Consensus().GetVirtualInfo() + virtualInfo, err := ti.domain.Consensus().GetVirtualInfo() + if err != nil { + return false, err + } + + PruningPoint, err := ti.domain.Consensus().PruningPoint() if err != nil { return false, err } - return externalapi.HashesEqual(virtualInfo.ParentHashes, utxoIndexVirtualParents), nil + return externalapi.HashesEqual(virtualInfo.ParentHashes, txIndexVirtualParents) || txIndexPruningPoint.Equal(PruningPoint), nil } -// Update updates the UTXO index with the given DAG selected parent chain changes -func (ui *UTXOIndex) Update(virtualChangeSet *externalapi.VirtualChangeSet) (*UTXOChanges, error) { - onEnd := logger.LogAndMeasureExecutionTime(log, "UTXOIndex.Update") +// Update updates the TX index with the given DAG selected parent chain changes +func (ti *TXIndex) Update(virtualChangeSet *externalapi.VirtualChangeSet) (*TXAcceptanceChange, error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.Update") defer onEnd() - ui.mutex.Lock() - defer ui.mutex.Unlock() + ti.mutex.Lock() + defer ti.mutex.Unlock() - log.Tracef("Updating UTXO index with VirtualUTXODiff: %+v", virtualChangeSet.VirtualUTXODiff) - err := ui.removeUTXOs(virtualChangeSet.VirtualUTXODiff.ToRemove()) - if err != nil { - return nil, err - } + log.Tracef("Updating TX index with VirtualSelectedParentChainChanges: %+v", virtualChangeSet.VirtualSelectedParentChainChanges) - err = ui.addUTXOs(virtualChangeSet.VirtualUTXODiff.ToAdd()) + err := ti.addTXIDs(virtualChangeSet.VirtualSelectedParentChainChanges, 1000) if err != nil { return nil, err } - ui.store.updateVirtualParents(virtualChangeSet.VirtualParents) + ti.store.updateVirtualParents(virtualChangeSet.VirtualParents) - added, removed, _ := ui.store.stagedData() - utxoIndexChanges := &UTXOChanges{ - Added: added, - Removed: removed, + added, _, _ := ti.store.stagedData() + txIndexChanges := &TXAcceptanceChange{ + Added: added, } - err = ui.store.commit() + removed, err := ti.store.commitAndReturnRemoved() if err != nil { return nil, err } - log.Tracef("UTXO index updated with the UTXOChanged: %+v", utxoIndexChanges) - return utxoIndexChanges, nil + txIndexChanges.Removed = removed + + log.Tracef("TX index updated with the TXAcceptanceChange: %+v", txIndexChanges) + return txIndexChanges, nil } -func (ui *UTXOIndex) addUTXOs(toAdd externalapi.UTXOCollection) error { - iterator := toAdd.Iterator() - defer iterator.Close() - for ok := iterator.First(); ok; ok = iterator.Next() { - outpoint, entry, err := iterator.Get() - if err != nil { - return err +func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChainPath, chunkSize int) error { + position := 0 + for position < len(selectedParentChainChanges.Added) { + var chainBlocksChunk []*externalapi.DomainHash + if position+chunkSize > len(selectedParentChainChanges.Added) { + chainBlocksChunk = selectedParentChainChanges.Added[position:] + } else { + chainBlocksChunk = selectedParentChainChanges.Added[position : position+chunkSize] } - log.Tracef("Adding outpoint %s to UTXO index", outpoint) - err = ui.store.add(entry.ScriptPublicKey(), outpoint, entry) - if err != nil { - return err + if position+chunkSize > len(selectedParentChainChanges.Added) { + chainBlocksChunk = selectedParentChainChanges.Added[position:] + } else { + chainBlocksChunk = selectedParentChainChanges.Added[position : position+chunkSize] } - } - return nil -} - -func (ui *UTXOIndex) removeUTXOs(toRemove externalapi.UTXOCollection) error { - iterator := toRemove.Iterator() - defer iterator.Close() - for ok := iterator.First(); ok; ok = iterator.Next() { - outpoint, entry, err := iterator.Get() + // We use chunks in order to avoid blocking consensus for too long + // note: this might not be needed here, but unsure how kaspad handles pruning / when reset might be called. + chainBlocksAcceptanceData, err := ti.domain.Consensus().GetBlocksAcceptanceData(chainBlocksChunk) if err != nil { return err } - - log.Tracef("Removing outpoint %s from UTXO index", outpoint) - err = ui.store.remove(entry.ScriptPublicKey(), outpoint, entry) - if err != nil { - return err + for i, addedChainBlock := range chainBlocksChunk { + chainBlockAcceptanceData := chainBlocksAcceptanceData[i] + for _, blockAcceptanceData := range chainBlockAcceptanceData { + for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { + if transactionAcceptanceData.IsAccepted { + ti.store.add(*transactionAcceptanceData.Transaction.ID, addedChainBlock) + } + } + } } + position += chunkSize } return nil } -// UTXOs returns all the UTXOs for the given scriptPublicKey -func (ui *UTXOIndex) UTXOs(scriptPublicKey *externalapi.ScriptPublicKey) (UTXOOutpointEntryPairs, error) { - onEnd := logger.LogAndMeasureExecutionTime(log, "UTXOIndex.UTXOs") +// TXAcceptingBlockHash returns all the UTXOs for the given scriptPublicKey +func (ui *TXIndex) TXAcceptingBlockHash(txID *externalapi.DomainTransactionID) (*externalapi.DomainHash, error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlockHash") defer onEnd() ui.mutex.Lock() @@ -190,11 +196,20 @@ func (ui *UTXOIndex) UTXOs(scriptPublicKey *externalapi.ScriptPublicKey) (UTXOOu return ui.store.getUTXOOutpointEntryPairs(scriptPublicKey) } -// GetCirculatingSompiSupply returns the current circulating supply of sompis in the network -func (ui *UTXOIndex) GetCirculatingSompiSupply() (uint64, error) { +func (ti *TXIndex) TXAcceptingBlock(txID *externalapi.DomainTransactionID) (externalapi.DomainHash, error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlock") + defer onEnd() - ui.mutex.Lock() - defer ui.mutex.Unlock() + ti.mutex.Lock() + defer ti.mutex.Unlock() - return ui.store.getCirculatingSompiSupply() + return ti.store.getUTXOOutpointEntryPairs(scriptPublicKey) } + +//TO DO: Get Block from TxID + +//TO DO: Get Including BlockHash from AcceptingBlock + +//TO DO: Get Including Block from AcceptingBlock + +//TO DO: Get Confirmations \ No newline at end of file diff --git a/infrastructure/config/config.go b/infrastructure/config/config.go index bba91219b5..7259975ea4 100644 --- a/infrastructure/config/config.go +++ b/infrastructure/config/config.go @@ -121,6 +121,7 @@ type Flags struct { ResetDatabase bool `long:"reset-db" description:"Reset database before starting node. It's needed when switching between subnetworks."` MaxUTXOCacheSize uint64 `long:"maxutxocachesize" description:"Max size of loaded UTXO into ram from the disk in bytes"` UTXOIndex bool `long:"utxoindex" description:"Enable the UTXO index"` + TXIndex bool `long:"txindex" description:"Enable the TX index"` IsArchivalNode bool `long:"archival" description:"Run as an archival node: don't delete old block data when moving the pruning point (Warning: heavy disk usage)'"` AllowSubmitBlockWhenNotSynced bool `long:"allow-submit-block-when-not-synced" hidden:"true" description:"Allow the node to accept blocks from RPC while not synced (this flag is mainly used for testing)"` EnableSanityCheckPruningUTXOSet bool `long:"enable-sanity-check-pruning-utxo" hidden:"true" description:"When moving the pruning point - check that the utxo set matches the utxo commitment"` From c3393988c10356f4d487130237892119f88d7aeb Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Tue, 21 Jun 2022 23:32:00 +0200 Subject: [PATCH 03/47] mostly remove old code from first round. --- app/appmessage/rpc_get_info.go | 2 +- app/component_manager.go | 2 +- app/rpc/rpccontext/notificationmanager.go | 1 - domain/consensus/consensus.go | 42 -------- .../database/serialization/dbobjects.pb.go | 101 ++---------------- .../database/serialization/dbobjects.proto | 5 - .../database/serialization/tx_block_data.go | 30 ------ .../consensus/model/externalapi/consensus.go | 1 - go.mod | 2 +- 9 files changed, 14 insertions(+), 172 deletions(-) delete mode 100644 domain/consensus/database/serialization/tx_block_data.go diff --git a/app/appmessage/rpc_get_info.go b/app/appmessage/rpc_get_info.go index 0bb02534c1..00c9882e7d 100644 --- a/app/appmessage/rpc_get_info.go +++ b/app/appmessage/rpc_get_info.go @@ -35,7 +35,7 @@ func (msg *GetInfoResponseMessage) Command() MessageCommand { } // NewGetInfoResponseMessage returns a instance of the message -func NewGetInfoResponseMessage(p2pID string, mempoolSize uint64, serverVersion string, isUtxoIndexed bool, isTxIndexed bool, isSynced bool) *GetInfoResponseMessage { +func NewGetInfoResponseMessage(p2pID string, mempoolSize uint64, serverVersion string, isUtxoIndexed bool, isSynced bool) *GetInfoResponseMessage { return &GetInfoResponseMessage{ P2PID: p2pID, MempoolSize: mempoolSize, diff --git a/app/component_manager.go b/app/component_manager.go index 186cc5c584..615a0b51e6 100644 --- a/app/component_manager.go +++ b/app/component_manager.go @@ -121,7 +121,7 @@ func NewComponentManager(cfg *config.Config, db infrastructuredatabase.Database, return nil, err } - log.Infof("UTXO index started") + log.Infof("TX index started") } connectionManager, err := connmanager.New(cfg, netAdapter, addressManager) diff --git a/app/rpc/rpccontext/notificationmanager.go b/app/rpc/rpccontext/notificationmanager.go index b83447870f..e9b3ef98c2 100644 --- a/app/rpc/rpccontext/notificationmanager.go +++ b/app/rpc/rpccontext/notificationmanager.go @@ -9,7 +9,6 @@ import ( "github.com/kaspanet/kaspad/app/appmessage" "github.com/kaspanet/kaspad/domain/utxoindex" - //"github.com/kaspanet/kaspad/domain/txindex" routerpkg "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" "github.com/pkg/errors" ) diff --git a/domain/consensus/consensus.go b/domain/consensus/consensus.go index 71b5c8e01c..aaddf88e5d 100644 --- a/domain/consensus/consensus.go +++ b/domain/consensus/consensus.go @@ -820,48 +820,6 @@ func (s *consensus) GetVirtualSelectedParentChainFromBlock(blockHash *externalap return s.consensusStateManager.GetVirtualSelectedParentChainFromBlock(stagingArea, blockHash) } -func (s *consensus) GetVirtualSelectedParentChainBlockAcceptanceDataFromBlocksInBatches(blockHash *externalapi.DomainHash, *batchSize int) ([]*externalapi.AcceptanceData, error) { - s.lock.Lock() - defer s.lock.Unlock() - - stagingArea := model.NewStagingArea() - - err := s.validateBlockHashExists(stagingArea, blockHash) - if err != nil { - return nil, err - } - - BlocksAcceptanceData := make([]*externalapi.AcceptanceData, 0) - - pruningPoint, err := s.pruningStore.PruningPoint(s.databaseContext, stagingArea) - if err != nil { - return nil, err - } - - if blockHash.Less(pruningPoint) { - return - } - - for i := 0; i < batchSize; i++ { - virtualGHOSTDAGData, err := s.ghostdagDataStores[0].Get(s.databaseContext, stagingArea, blockHash, true) - if err != nil { - return nil, err - } - acceptanceData, err := s.acceptanceDataStore.Get(s.databaseContext, stagingArea, virtualGHOSTDAGData.SelectedParent()) - if err != nil { - return nil, err - } - BlocksAcceptanceData = append(BlocksAcceptanceData, &acceptanceData) - - if virtualGHOSTDAGData.SelectedParent().Equal(pruningPoint) { //acceptnce data is pruned beyoned the pruning point - return BlocksAcceptanceData, nil - } - - } - - return BlocksAcceptanceData, nil -} - func (s *consensus) validateBlockHashExists(stagingArea *model.StagingArea, blockHash *externalapi.DomainHash) error { exists, err := s.blockStatusStore.Exists(s.databaseContext, stagingArea, blockHash) if err != nil { diff --git a/domain/consensus/database/serialization/dbobjects.pb.go b/domain/consensus/database/serialization/dbobjects.pb.go index 45120e138c..e37c40a320 100644 --- a/domain/consensus/database/serialization/dbobjects.pb.go +++ b/domain/consensus/database/serialization/dbobjects.pb.go @@ -1743,61 +1743,6 @@ func (x *DbBlockGHOSTDAGDataHashPair) GetGhostdagData() *DbBlockGhostdagData { return nil } -type DbTxBlockHashes struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AcceptingBlockHash *DbHash `protobuf:"bytes,1,opt,name=acceptingBlockHash,proto3" json:"acceptingBlockHash,omitempty"` - MergeBlockHash *DbHash `protobuf:"bytes,2,opt,name=mergeBlockHash,proto3" json:"mergeBlockHash,omitempty"` -} - -func (x *DbTxBlockHashes) Reset() { - *x = DbTxBlockHashes{} - if protoimpl.UnsafeEnabled { - mi := &file_dbobjects_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DbTxBlockHashes) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DbTxBlockHashes) ProtoMessage() {} - -func (x *DbTxBlockHashes) ProtoReflect() protoreflect.Message { - mi := &file_dbobjects_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 DbTxBlockHashes.ProtoReflect.Descriptor instead. -func (*DbTxBlockHashes) Descriptor() ([]byte, []int) { - return file_dbobjects_proto_rawDescGZIP(), []int{29} -} - -func (x *DbTxBlockHashes) GetAcceptingBlockHash() *DbHash { - if x != nil { - return x.AcceptingBlockHash - } - return nil -} - -func (x *DbTxBlockHashes) GetMergeBlockHash() *DbHash { - if x != nil { - return x.MergeBlockHash - } - return nil -} - var File_dbobjects_proto protoreflect.FileDescriptor var file_dbobjects_proto_rawDesc = []byte{ @@ -2055,19 +2000,10 @@ var file_dbobjects_proto_rawDesc = []byte{ 0x2e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x62, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x47, 0x68, 0x6f, 0x73, 0x74, 0x64, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x47, 0x68, 0x6f, 0x73, 0x74, 0x64, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, - 0x22, 0x97, 0x01, 0x0a, 0x0f, 0x44, 0x62, 0x54, 0x78, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, - 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x44, 0x62, 0x48, 0x61, 0x73, 0x68, 0x52, 0x12, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, - 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x3d, 0x0a, 0x0e, 0x6d, - 0x65, 0x72, 0x67, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x62, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0e, 0x6d, 0x65, 0x72, 0x67, - 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x42, 0x2a, 0x5a, 0x28, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, - 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x42, 0x2a, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, + 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x73, + 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2082,7 +2018,7 @@ func file_dbobjects_proto_rawDescGZIP() []byte { return file_dbobjects_proto_rawDescData } -var file_dbobjects_proto_msgTypes = make([]protoimpl.MessageInfo, 30) +var file_dbobjects_proto_msgTypes = make([]protoimpl.MessageInfo, 29) var file_dbobjects_proto_goTypes = []interface{}{ (*DbBlock)(nil), // 0: serialization.DbBlock (*DbBlockHeader)(nil), // 1: serialization.DbBlockHeader @@ -2113,7 +2049,6 @@ var file_dbobjects_proto_goTypes = []interface{}{ (*DbBlockCount)(nil), // 26: serialization.DbBlockCount (*DbBlockHeaderCount)(nil), // 27: serialization.DbBlockHeaderCount (*DbBlockGHOSTDAGDataHashPair)(nil), // 28: serialization.DbBlockGHOSTDAGDataHashPair - (*DbTxBlockHashes)(nil), // 29: serialization.DbTxBlockHashes } var file_dbobjects_proto_depIdxs = []int32{ 1, // 0: serialization.DbBlock.header:type_name -> serialization.DbBlockHeader @@ -2155,13 +2090,11 @@ var file_dbobjects_proto_depIdxs = []int32{ 3, // 36: serialization.DbTips.tips:type_name -> serialization.DbHash 3, // 37: serialization.DbBlockGHOSTDAGDataHashPair.hash:type_name -> serialization.DbHash 15, // 38: serialization.DbBlockGHOSTDAGDataHashPair.GhostdagData:type_name -> serialization.DbBlockGhostdagData - 3, // 39: serialization.DbTxBlockHashes.acceptingBlockHash:type_name -> serialization.DbHash - 3, // 40: serialization.DbTxBlockHashes.mergeBlockHash:type_name -> serialization.DbHash - 41, // [41:41] is the sub-list for method output_type - 41, // [41:41] is the sub-list for method input_type - 41, // [41:41] is the sub-list for extension type_name - 41, // [41:41] is the sub-list for extension extendee - 0, // [0:41] is the sub-list for field type_name + 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_dbobjects_proto_init() } @@ -2518,18 +2451,6 @@ func file_dbobjects_proto_init() { return nil } } - file_dbobjects_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DbTxBlockHashes); 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{ @@ -2537,7 +2458,7 @@ func file_dbobjects_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_dbobjects_proto_rawDesc, NumEnums: 0, - NumMessages: 30, + NumMessages: 29, NumExtensions: 0, NumServices: 0, }, diff --git a/domain/consensus/database/serialization/dbobjects.proto b/domain/consensus/database/serialization/dbobjects.proto index 7bc2729fd8..5844f1f77a 100644 --- a/domain/consensus/database/serialization/dbobjects.proto +++ b/domain/consensus/database/serialization/dbobjects.proto @@ -162,9 +162,4 @@ message DbBlockHeaderCount { message DbBlockGHOSTDAGDataHashPair { DbHash hash = 1; DbBlockGhostdagData GhostdagData = 2; -} - -message DbTxBlockHashes { - DbHash acceptingBlockHash = 1; - DbHash mergeBlockHash = 2; } \ No newline at end of file diff --git a/domain/consensus/database/serialization/tx_block_data.go b/domain/consensus/database/serialization/tx_block_data.go deleted file mode 100644 index 5008c7c643..0000000000 --- a/domain/consensus/database/serialization/tx_block_data.go +++ /dev/null @@ -1,30 +0,0 @@ -package serialization - -import ( - "github.com/kaspanet/kaspad/domain/txindex" -) - -// DomainOutpointToDbOutpoint converts DomainOutpoint to DbOutpoint -func TxBlockHashesToDbTxBlockHashes(txBlockHashes *txindex.TxBlockHashes) *DbTxBlockHashes { - return &DbTxBlockHashes{ - AcceptingBlockHash: DomainHashToDbHash(txBlockHashes.acceptingBlockHash), - MergeBlockHash: DomainHashToDbHash(txBlockHashes.mergeBlockHash), - } -} - -// DbOutpointToDomainOutpoint converts DbOutpoint to DomainOutpoint -func DbTxBlockHashesToTxBlockHashes(dbTxBlockHashes *DbTxBlockHashes) (*txindex.TxBlockHashes, error) { - acceptingBlockHash, err := DbHashToDomainHash(dbTxBlockHashes.AcceptingBlockHash) - if err != nil { - return nil, err - } - mergeBlockHash, err := DbHashToDomainHash(dbTxBlockHashes.AcceptingBlockHash) - if err != nil { - return nil, err - } - - return &txindex.TxBlockHashes{ - AcceptingBlockHash: mergeBlockHash, - MergeBlockHash: acceptingBlockHash, - }, nil -} diff --git a/domain/consensus/model/externalapi/consensus.go b/domain/consensus/model/externalapi/consensus.go index 8e1e9bbee5..adaa81bc4a 100644 --- a/domain/consensus/model/externalapi/consensus.go +++ b/domain/consensus/model/externalapi/consensus.go @@ -49,7 +49,6 @@ type Consensus interface { EstimateNetworkHashesPerSecond(startHash *DomainHash, windowSize int) (uint64, error) PopulateMass(transaction *DomainTransaction) ResolveVirtual() (bool, error) - GetVirtualSelectedParentChainBlockAcceptanceDataFromBlocksInBatches(startHash *DomainHash, batchSize uint64) ([]*AcceptanceData, error) BlockDAAWindowHashes(blockHash *DomainHash) ([]*DomainHash, error) TrustedDataDataDAAHeader(trustedBlockHash, daaBlockHash *DomainHash, daaBlockWindowIndex uint64) (*TrustedDataDataDAAHeader, error) TrustedBlockAssociatedGHOSTDAGDataBlockHashes(blockHash *DomainHash) ([]*DomainHash, error) diff --git a/go.mod b/go.mod index cdfa11128b..988df6d566 100644 --- a/go.mod +++ b/go.mod @@ -29,4 +29,4 @@ require ( golang.org/x/text v0.3.5 // indirect google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08 // indirect gopkg.in/yaml.v2 v2.3.0 // indirect -) +) \ No newline at end of file From 540d77ff1777e9f0aa67004eab52eb1e79653985 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Tue, 21 Jun 2022 23:45:44 +0200 Subject: [PATCH 04/47] remove leftover from copy pasting and bug splattering --- domain/txindex.go/store.go | 62 ++++++++++++++++-------------------- domain/txindex.go/txindex.go | 24 ++++++++++---- 2 files changed, 45 insertions(+), 41 deletions(-) diff --git a/domain/txindex.go/store.go b/domain/txindex.go/store.go index 21ba4e3c1d..8101dfca1e 100644 --- a/domain/txindex.go/store.go +++ b/domain/txindex.go/store.go @@ -11,6 +11,7 @@ import ( var txAcceptedIndexBucket = database.MakeBucket([]byte("tx-index")) var virtualParentsKey = database.MakeBucket([]byte("")).Key([]byte("tx-index-virtual-parent")) var pruningPointKey = database.MakeBucket([]byte("")).Key([]byte("tx-index-prunning-point")) + type txIndexStore struct { database database.Database toAdd map[externalapi.DomainTransactionID]*externalapi.DomainHash @@ -59,24 +60,9 @@ func (tis *txIndexStore) deleteAll() error { } func (tis *txIndexStore) add(txID externalapi.DomainTransactionID, blockHash *externalapi.DomainHash) { - log.Tracef("Adding %d Txs from blockHash %s", len(txIDs), acceptingBlockHash.String()) - for _, txID := range txID { - if _, found := tis.toRemove[*txID]; found { - delete(tis.toRemove, *txID) - } - tis.toAdd[*txID] = *blockHash + log.Tracef("Adding %s Txs from blockHash %s", txID.String(), blockHash.String()) + tis.toAdd[txID] = blockHash } -} - -func (tis *txIndexStore) remove(txIDs []*externalapi.DomainTransactionID, blockHash *externalapi.DomainHash) { - log.Tracef("Removing %d Txs from blockHash %s", len(txIDs), blockHash.String()) - for _, txID := range txIDs { - if _, found := tis.toAdd[*txID]; found { - delete(tis.toAdd, *txID) - } - tis.toRemove[*txID] = *blockHash - } -} func (tis *txIndexStore) discard() { tis.toAdd = make(map[externalapi.DomainTransactionID]*externalapi.DomainHash) @@ -94,30 +80,40 @@ func (tis *txIndexStore) commitAndReturnRemoved() ( dbTransaction, err := tis.database.Begin() if err != nil { - return err + return nil, err } defer dbTransaction.RollbackUnlessClosed() - removed := make(map[externalapi.DomainTransactionID]*externalapi.DomainHash) + removed = make(map[externalapi.DomainTransactionID]*externalapi.DomainHash) for txID, blockHash := range tis.toAdd { - key := convertTxIDToKey(txAcceptedIndexBucket, TxID) - if dbTransaction.Has(key) { - removedBlockHash, err := dbTransaction.Get(key) + key := tis.convertTxIDToKey(txAcceptedIndexBucket, txID) + found, err := dbTransaction.Has(key) + if err != nil { + return nil, err + } + + if found { + serializedRemovedBlockHash, err := dbTransaction.Get(key) + if err != nil { + return nil, err + } + removedBlockHash, err := externalapi.NewDomainHashFromByteSlice(serializedRemovedBlockHash) if err != nil { return nil, err } - removed[txID] = externalapi.NewDomainHashFromByteSlice(removedBlockHash) + removed[txID] = removedBlockHash } + dbTransaction.Put(key, blockHash.ByteSlice()) if err != nil { return nil, err } } - err = dbTransaction.Put(virtualParentsKey, serializeHashes(ti.virtualSelectedParents)) + err = dbTransaction.Put(virtualParentsKey, serializeHashes(tis.virtualParents)) if err != nil { - return err + return nil, err } err = dbTransaction.Put(pruningPointKey, tis.pruningPoint.ByteSlice()) if err != nil { @@ -153,7 +149,7 @@ func (tis *txIndexStore) updateVirtualParents(virtualParents []*externalapi.Doma func (tis *txIndexStore) CommitWithoutTransaction() error { for txID, blockHash := range tis.toAdd { key := tis.convertTxIDToKey(txAcceptedIndexBucket, txID) - err = tis.database.Put(key, blockHash.ByteSlice()) + err := tis.database.Put(key, blockHash.ByteSlice()) if err != nil { return err } @@ -180,7 +176,7 @@ func (tis *txIndexStore) getPruningPoint() (*externalapi.DomainHash, error) { return nil, errors.Errorf("cannot get the Pruning point while staging isn't empty") } - serializedPruningPointHash, err := uis.database.Get(pruningPointKey) + serializedPruningPointHash, err := tis.database.Get(pruningPointKey) if err != nil { return nil, err } @@ -188,14 +184,10 @@ func (tis *txIndexStore) getPruningPoint() (*externalapi.DomainHash, error) { return externalapi.NewDomainHashFromByteSlice(serializedPruningPointHash) } -func (tis *txIndexStore) convertTxIDToKey(bucket *database.Bucket, txID *externalapi.DomainTransactionID) *database.Key { +func (tis *txIndexStore) convertTxIDToKey(bucket *database.Bucket, txID externalapi.DomainTransactionID) *database.Key { return bucket.Key(txID.ByteSlice()) } -func (tis *txIndexStore) updateVirtualParent(virtualParent externalapi.DomainHash) { - tis.virtualParents = virtualParent -} - func (tis *txIndexStore) convertKeyToTxID(key *database.Key) (*externalapi.DomainTransactionID, error) { return externalapi.NewDomainTransactionIDFromByteSlice(key.Suffix()) } @@ -216,13 +208,13 @@ func (tis *txIndexStore) isAnythingStaged() bool { return len(tis.toAdd) > 0 } -func (tis *txIndexStore) getTxAcceptingBlockHash(txID *externalapi.DomainTransactionID) (externalapi.DomainHash, error) { +func (tis *txIndexStore) getTxAcceptingBlockHash(txID *externalapi.DomainTransactionID) (*externalapi.DomainHash, error) { - if tis.isAnythingAcceptingStaged() { + if tis.isAnythingStaged() { return nil, errors.Errorf("cannot get TX accepting Block hash while staging isn't empty") } - key := tis.convertTxIDToKey(txAcceptedIndexBucket, txID) + key := tis.convertTxIDToKey(txAcceptedIndexBucket, *txID) serializedAcceptingBlockHash, err := tis.database.Get(key) if err != nil { diff --git a/domain/txindex.go/txindex.go b/domain/txindex.go/txindex.go index 684b3d0647..1e94fe8178 100644 --- a/domain/txindex.go/txindex.go +++ b/domain/txindex.go/txindex.go @@ -186,24 +186,36 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai } // TXAcceptingBlockHash returns all the UTXOs for the given scriptPublicKey -func (ui *TXIndex) TXAcceptingBlockHash(txID *externalapi.DomainTransactionID) (*externalapi.DomainHash, error) { +func (ti *TXIndex) TXAcceptingBlockHash(txID *externalapi.DomainTransactionID) (*externalapi.DomainHash, error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlockHash") defer onEnd() - ui.mutex.Lock() - defer ui.mutex.Unlock() + ti.mutex.Lock() + defer ti.mutex.Unlock() - return ui.store.getUTXOOutpointEntryPairs(scriptPublicKey) + acceptingBlockHash, err := ti.store.getTxAcceptingBlockHash(txID) + if err != nil { + return nil, err + } + return acceptingBlockHash, nil } -func (ti *TXIndex) TXAcceptingBlock(txID *externalapi.DomainTransactionID) (externalapi.DomainHash, error) { +func (ti *TXIndex) TXAcceptingBlock(txID *externalapi.DomainTransactionID) (*externalapi.DomainBlock, error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlock") defer onEnd() ti.mutex.Lock() defer ti.mutex.Unlock() - return ti.store.getUTXOOutpointEntryPairs(scriptPublicKey) + acceptingBlockHash, err := ti.store.getTxAcceptingBlockHash(txID) + if err != nil { + return nil, err + } + acceptingBlock, err := ti.domain.Consensus().GetBlock(acceptingBlockHash) + if err != nil { + return nil, err + } + return acceptingBlock, nil } //TO DO: Get Block from TxID From d9b5f0ecf1fc9cbdf1fd811a31757f5c35fcc11a Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Tue, 21 Jun 2022 23:47:07 +0200 Subject: [PATCH 05/47] remove smaller bugs and unused code. --- domain/txindex.go/store.go | 4 ---- domain/txindex.go/txindex.go | 8 +------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/domain/txindex.go/store.go b/domain/txindex.go/store.go index 8101dfca1e..927508faf3 100644 --- a/domain/txindex.go/store.go +++ b/domain/txindex.go/store.go @@ -188,10 +188,6 @@ func (tis *txIndexStore) convertTxIDToKey(bucket *database.Bucket, txID external return bucket.Key(txID.ByteSlice()) } -func (tis *txIndexStore) convertKeyToTxID(key *database.Key) (*externalapi.DomainTransactionID, error) { - return externalapi.NewDomainTransactionIDFromByteSlice(key.Suffix()) -} - func (tis *txIndexStore) stagedData() ( toAdd map[externalapi.DomainTransactionID]*externalapi.DomainHash, virtualParents []*externalapi.DomainHash, diff --git a/domain/txindex.go/txindex.go b/domain/txindex.go/txindex.go index 1e94fe8178..83d93d4eef 100644 --- a/domain/txindex.go/txindex.go +++ b/domain/txindex.go/txindex.go @@ -63,8 +63,6 @@ func (ti *TXIndex) Reset() error { return err } - const chunkSize = 1000 - //we iterate from pruningPoint up - this gurantees that newer accepting blocks overwrite older ones in the store mapping //we also do not collect data before pruning point, since relevent blockData is pruned (see `TO DO`` note at the top regarding archival nodes) selectedParentChainChanges, err := ti.domain.Consensus().GetVirtualSelectedParentChainFromBlock(pruningPoint) @@ -153,11 +151,7 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai position := 0 for position < len(selectedParentChainChanges.Added) { var chainBlocksChunk []*externalapi.DomainHash - if position+chunkSize > len(selectedParentChainChanges.Added) { - chainBlocksChunk = selectedParentChainChanges.Added[position:] - } else { - chainBlocksChunk = selectedParentChainChanges.Added[position : position+chunkSize] - } + if position+chunkSize > len(selectedParentChainChanges.Added) { chainBlocksChunk = selectedParentChainChanges.Added[position:] From 02326dcceffedf4862342174fa98a91665c9fff0 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Wed, 22 Jun 2022 08:54:45 +0200 Subject: [PATCH 06/47] proper naming and fmt / formatting --- app/component_manager.go | 8 ++-- app/rpc/manager.go | 2 +- app/rpc/rpccontext/context.go | 4 +- domain/{txindex.go => txindex}/log.go | 0 domain/{txindex.go => txindex}/model.go | 4 +- .../{txindex.go => txindex}/serialization.go | 5 +-- .../serialization_test.go | 0 domain/{txindex.go => txindex}/store.go | 41 ++++++++----------- domain/{txindex.go => txindex}/txindex.go | 8 ++-- go.mod | 4 +- 10 files changed, 36 insertions(+), 40 deletions(-) rename domain/{txindex.go => txindex}/log.go (100%) rename domain/{txindex.go => txindex}/model.go (79%) rename domain/{txindex.go => txindex}/serialization.go (99%) rename domain/{txindex.go => txindex}/serialization_test.go (100%) rename domain/{txindex.go => txindex}/store.go (92%) rename domain/{txindex.go => txindex}/txindex.go (95%) diff --git a/app/component_manager.go b/app/component_manager.go index 615a0b51e6..fd837a7737 100644 --- a/app/component_manager.go +++ b/app/component_manager.go @@ -12,8 +12,8 @@ import ( "github.com/kaspanet/kaspad/app/rpc" "github.com/kaspanet/kaspad/domain" "github.com/kaspanet/kaspad/domain/consensus" - "github.com/kaspanet/kaspad/domain/utxoindex" "github.com/kaspanet/kaspad/domain/txindex" + "github.com/kaspanet/kaspad/domain/utxoindex" "github.com/kaspanet/kaspad/infrastructure/config" infrastructuredatabase "github.com/kaspanet/kaspad/infrastructure/db/database" "github.com/kaspanet/kaspad/infrastructure/network/addressmanager" @@ -114,9 +114,9 @@ func NewComponentManager(cfg *config.Config, db infrastructuredatabase.Database, log.Infof("UTXO index started") } - var txindex *txindex.TXIndex + var txIndex *txindex.TXIndex if cfg.TXIndex { - txindex, err = txindex.New(domain, db) + txIndex, err = txindex.New(domain, db) if err != nil { return nil, err } @@ -132,7 +132,7 @@ func NewComponentManager(cfg *config.Config, db infrastructuredatabase.Database, if err != nil { return nil, err } - rpcManager := setupRPC(cfg, domain, netAdapter, protocolManager, connectionManager, addressManager, utxoIndex, txindex, domain.ConsensusEventsChannel(), interrupt) + rpcManager := setupRPC(cfg, domain, netAdapter, protocolManager, connectionManager, addressManager, utxoIndex, txIndex, domain.ConsensusEventsChannel(), interrupt) return &ComponentManager{ cfg: cfg, diff --git a/app/rpc/manager.go b/app/rpc/manager.go index 39b6bbc421..97ba36cd8f 100644 --- a/app/rpc/manager.go +++ b/app/rpc/manager.go @@ -6,8 +6,8 @@ import ( "github.com/kaspanet/kaspad/app/rpc/rpccontext" "github.com/kaspanet/kaspad/domain" "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" - "github.com/kaspanet/kaspad/domain/utxoindex" "github.com/kaspanet/kaspad/domain/txindex" + "github.com/kaspanet/kaspad/domain/utxoindex" "github.com/kaspanet/kaspad/infrastructure/config" "github.com/kaspanet/kaspad/infrastructure/logger" "github.com/kaspanet/kaspad/infrastructure/network/addressmanager" diff --git a/app/rpc/rpccontext/context.go b/app/rpc/rpccontext/context.go index 9ef297fc41..2e51fdd7a7 100644 --- a/app/rpc/rpccontext/context.go +++ b/app/rpc/rpccontext/context.go @@ -3,8 +3,8 @@ package rpccontext import ( "github.com/kaspanet/kaspad/app/protocol" "github.com/kaspanet/kaspad/domain" - "github.com/kaspanet/kaspad/domain/utxoindex" "github.com/kaspanet/kaspad/domain/txindex" + "github.com/kaspanet/kaspad/domain/utxoindex" "github.com/kaspanet/kaspad/infrastructure/config" "github.com/kaspanet/kaspad/infrastructure/network/addressmanager" "github.com/kaspanet/kaspad/infrastructure/network/connmanager" @@ -34,7 +34,7 @@ func NewContext(cfg *config.Config, connectionManager *connmanager.ConnectionManager, addressManager *addressmanager.AddressManager, utxoIndex *utxoindex.UTXOIndex, - txIndex *txindex.TXIndex + txIndex *txindex.TXIndex, shutDownChan chan<- struct{}) *Context { context := &Context{ diff --git a/domain/txindex.go/log.go b/domain/txindex/log.go similarity index 100% rename from domain/txindex.go/log.go rename to domain/txindex/log.go diff --git a/domain/txindex.go/model.go b/domain/txindex/model.go similarity index 79% rename from domain/txindex.go/model.go rename to domain/txindex/model.go index a2ba153edc..7ca5f86888 100644 --- a/domain/txindex.go/model.go +++ b/domain/txindex/model.go @@ -4,9 +4,9 @@ import ( "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" ) -// TXChanges is the set of changes made to the UTXO index after +// TXAcceptanceChange is the set of changes made to the TX index after // a successful update type TXAcceptanceChange struct { Added map[externalapi.DomainTransactionID]*externalapi.DomainHash Removed map[externalapi.DomainTransactionID]*externalapi.DomainHash -} \ No newline at end of file +} diff --git a/domain/txindex.go/serialization.go b/domain/txindex/serialization.go similarity index 99% rename from domain/txindex.go/serialization.go rename to domain/txindex/serialization.go index 152921735f..14a95c76fa 100644 --- a/domain/txindex.go/serialization.go +++ b/domain/txindex/serialization.go @@ -1,13 +1,12 @@ package txindex import ( - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "encoding/binary" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/pkg/errors" "io" ) - func serializeHashes(hashes []*externalapi.DomainHash) []byte { serializedHashes := make([]byte, hashesLengthSize+externalapi.DomainHashSize*len(hashes)) binary.LittleEndian.PutUint64(serializedHashes[:hashesLengthSize], uint64(len(hashes))) @@ -40,4 +39,4 @@ func deserializeHashes(serializedHashes []byte) ([]*externalapi.DomainHash, erro } return hashes, nil -} \ No newline at end of file +} diff --git a/domain/txindex.go/serialization_test.go b/domain/txindex/serialization_test.go similarity index 100% rename from domain/txindex.go/serialization_test.go rename to domain/txindex/serialization_test.go diff --git a/domain/txindex.go/store.go b/domain/txindex/store.go similarity index 92% rename from domain/txindex.go/store.go rename to domain/txindex/store.go index 927508faf3..df229bb3ab 100644 --- a/domain/txindex.go/store.go +++ b/domain/txindex/store.go @@ -1,7 +1,6 @@ package txindex import ( - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/kaspanet/kaspad/infrastructure/db/database" "github.com/kaspanet/kaspad/infrastructure/logger" @@ -13,19 +12,19 @@ var virtualParentsKey = database.MakeBucket([]byte("")).Key([]byte("tx-index-vir var pruningPointKey = database.MakeBucket([]byte("")).Key([]byte("tx-index-prunning-point")) type txIndexStore struct { - database database.Database - toAdd map[externalapi.DomainTransactionID]*externalapi.DomainHash + database database.Database + toAdd map[externalapi.DomainTransactionID]*externalapi.DomainHash virtualParents []*externalapi.DomainHash - pruningPoint *externalapi.DomainHash + pruningPoint *externalapi.DomainHash } func newTXIndexStore(database database.Database) *txIndexStore { return &txIndexStore{ - database: database, - toAdd: make(map[externalapi.DomainTransactionID]*externalapi.DomainHash), + database: database, + toAdd: make(map[externalapi.DomainTransactionID]*externalapi.DomainHash), virtualParents: nil, - pruningPoint: nil, - } + pruningPoint: nil, + } } func (tis *txIndexStore) deleteAll() error { @@ -61,8 +60,8 @@ func (tis *txIndexStore) deleteAll() error { func (tis *txIndexStore) add(txID externalapi.DomainTransactionID, blockHash *externalapi.DomainHash) { log.Tracef("Adding %s Txs from blockHash %s", txID.String(), blockHash.String()) - tis.toAdd[txID] = blockHash - } + tis.toAdd[txID] = blockHash +} func (tis *txIndexStore) discard() { tis.toAdd = make(map[externalapi.DomainTransactionID]*externalapi.DomainHash) @@ -76,8 +75,6 @@ func (tis *txIndexStore) commitAndReturnRemoved() ( onEnd := logger.LogAndMeasureExecutionTime(log, "txIndexStore.commit") defer onEnd() - - dbTransaction, err := tis.database.Begin() if err != nil { return nil, err @@ -89,11 +86,11 @@ func (tis *txIndexStore) commitAndReturnRemoved() ( for txID, blockHash := range tis.toAdd { key := tis.convertTxIDToKey(txAcceptedIndexBucket, txID) - found, err := dbTransaction.Has(key) + found, err := dbTransaction.Has(key) if err != nil { return nil, err } - + if found { serializedRemovedBlockHash, err := dbTransaction.Get(key) if err != nil { @@ -120,15 +117,13 @@ func (tis *txIndexStore) commitAndReturnRemoved() ( return nil, err } - - err = dbTransaction.Commit() if err != nil { return nil, err } tis.discard() - + return removed, nil } @@ -191,7 +186,7 @@ func (tis *txIndexStore) convertTxIDToKey(bucket *database.Bucket, txID external func (tis *txIndexStore) stagedData() ( toAdd map[externalapi.DomainTransactionID]*externalapi.DomainHash, virtualParents []*externalapi.DomainHash, - pruningPoint *externalapi.DomainHash,) { + pruningPoint *externalapi.DomainHash) { toAddClone := make(map[externalapi.DomainTransactionID]*externalapi.DomainHash) for txID, blockHash := range tis.toAdd { toAddClone[txID] = blockHash @@ -201,18 +196,18 @@ func (tis *txIndexStore) stagedData() ( } func (tis *txIndexStore) isAnythingStaged() bool { - return len(tis.toAdd) > 0 + return len(tis.toAdd) > 0 } func (tis *txIndexStore) getTxAcceptingBlockHash(txID *externalapi.DomainTransactionID) (*externalapi.DomainHash, error) { - + if tis.isAnythingStaged() { return nil, errors.Errorf("cannot get TX accepting Block hash while staging isn't empty") } - + key := tis.convertTxIDToKey(txAcceptedIndexBucket, *txID) serializedAcceptingBlockHash, err := tis.database.Get(key) - + if err != nil { return nil, err } @@ -223,4 +218,4 @@ func (tis *txIndexStore) getTxAcceptingBlockHash(txID *externalapi.DomainTransac } return acceptingBlockHash, nil -} \ No newline at end of file +} diff --git a/domain/txindex.go/txindex.go b/domain/txindex/txindex.go similarity index 95% rename from domain/txindex.go/txindex.go rename to domain/txindex/txindex.go index 83d93d4eef..ae8e752a1a 100644 --- a/domain/txindex.go/txindex.go +++ b/domain/txindex/txindex.go @@ -152,7 +152,6 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai for position < len(selectedParentChainChanges.Added) { var chainBlocksChunk []*externalapi.DomainHash - if position+chunkSize > len(selectedParentChainChanges.Added) { chainBlocksChunk = selectedParentChainChanges.Added[position:] } else { @@ -179,7 +178,7 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai return nil } -// TXAcceptingBlockHash returns all the UTXOs for the given scriptPublicKey +// TXAcceptingBlockHash returns the accepting block hash for for the given txID func (ti *TXIndex) TXAcceptingBlockHash(txID *externalapi.DomainTransactionID) (*externalapi.DomainHash, error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlockHash") defer onEnd() @@ -194,6 +193,7 @@ func (ti *TXIndex) TXAcceptingBlockHash(txID *externalapi.DomainTransactionID) ( return acceptingBlockHash, nil } +// TXAcceptingBlock returns the accepting block for for the given txID func (ti *TXIndex) TXAcceptingBlock(txID *externalapi.DomainTransactionID) (*externalapi.DomainBlock, error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlock") defer onEnd() @@ -205,7 +205,7 @@ func (ti *TXIndex) TXAcceptingBlock(txID *externalapi.DomainTransactionID) (*ext if err != nil { return nil, err } - acceptingBlock, err := ti.domain.Consensus().GetBlock(acceptingBlockHash) + acceptingBlock, err := ti.domain.Consensus().GetBlock(acceptingBlockHash) if err != nil { return nil, err } @@ -218,4 +218,4 @@ func (ti *TXIndex) TXAcceptingBlock(txID *externalapi.DomainTransactionID) (*ext //TO DO: Get Including Block from AcceptingBlock -//TO DO: Get Confirmations \ No newline at end of file +//TO DO: Get Confirmations diff --git a/go.mod b/go.mod index 988df6d566..dc9ba5363b 100644 --- a/go.mod +++ b/go.mod @@ -1,7 +1,9 @@ -module github.com/kaspanet/kaspad +module github.com/kaspanet/kaspad go 1.18 +//replace github.com/kaspanet/kaspad/domain/txindex => /home/ds/Coding/kaspad/kaspad/domain/txindex + require ( github.com/btcsuite/btcutil v1.0.2 github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd From 346bd2676e14ca6e716fd277717dd333f6a3c0d3 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Thu, 23 Jun 2022 00:41:14 +0200 Subject: [PATCH 07/47] turn pruning point changes into a consensus event --- app/rpc/manager.go | 49 +++++++++++++++++++ domain/consensus/consensus.go | 37 ++++++++++++-- domain/consensus/factory.go | 2 +- .../model/externalapi/consensus_events.go | 8 +++ .../interface_processes_blockprocessor.go | 4 +- .../interface_processes_pruningmanager.go | 2 +- .../blockprocessor/blockprocessor.go | 4 +- .../validate_and_insert_block.go | 45 +++++++++-------- ...date_and_insert_block_with_trusted_data.go | 4 +- .../pruningmanager/pruningmanager.go | 37 ++++++++------ domain/consensus/test_consensus.go | 2 +- 11 files changed, 146 insertions(+), 48 deletions(-) diff --git a/app/rpc/manager.go b/app/rpc/manager.go index 97ba36cd8f..c3491e2087 100644 --- a/app/rpc/manager.go +++ b/app/rpc/manager.go @@ -72,6 +72,11 @@ func (m *Manager) initConsensusEventsHandler(consensusEventsChan chan externalap if err != nil { panic(err) } + case *externalapi.PruningPointChange: + err := m.notifyPruningPointChange() + if err != nil { + panic(err) + } default: panic(errors.Errorf("Got event of unsupported type %T", consensusEvent)) } @@ -116,6 +121,13 @@ func (m *Manager) notifyVirtualChange(virtualChangeSet *externalapi.VirtualChang } } + if m.context.Config.TXIndex && virtualChangeSet.VirtualSelectedParentChainChanges.Added != nil { + err := m.notifyTXsChanged(virtualChangeSet) + if err != nil { + return err + } + } + err := m.notifyVirtualSelectedParentBlueScoreChanged(virtualChangeSet.VirtualSelectedParentBlueScore) if err != nil { return err @@ -148,6 +160,19 @@ func (m *Manager) NotifyNewBlockTemplate() error { return m.context.NotificationManager.NotifyNewBlockTemplate(notification) } +func (m *Manager) notifyPruningPointChange() error { + onEnd := logger.LogAndMeasureExecutionTime(log, "RPCManager.NotifyPruningPointChange") + defer onEnd() + + if m.context.Config.TXIndex { + err := m.notifyPruningPointChangeTXAcceptancePrune() + if err != nil { + return err + } + } + return nil +} + // NotifyPruningPointUTXOSetOverride notifies the manager whenever the UTXO index // resets due to pruning point change via IBD. func (m *Manager) NotifyPruningPointUTXOSetOverride() error { @@ -194,6 +219,18 @@ func (m *Manager) notifyUTXOsChanged(virtualChangeSet *externalapi.VirtualChange return m.context.NotificationManager.NotifyUTXOsChanged(utxoIndexChanges) } +func (m *Manager) notifyTXsChanged(virtualChangeSet *externalapi.VirtualChangeSet) error { + onEnd := logger.LogAndMeasureExecutionTime(log, "RPCManager.NotifyTXsChanged") + defer onEnd() + + _, err := m.context.TXIndex.Update(virtualChangeSet) + if err != nil { + return err + } + + return nil +} + func (m *Manager) notifyPruningPointUTXOSetOverride() error { onEnd := logger.LogAndMeasureExecutionTime(log, "RPCManager.notifyPruningPointUTXOSetOverride") defer onEnd() @@ -206,6 +243,18 @@ func (m *Manager) notifyPruningPointUTXOSetOverride() error { return m.context.NotificationManager.NotifyPruningPointUTXOSetOverride() } +func (m *Manager) notifyPruningPointChangeTXAcceptancePrune() error { + onEnd := logger.LogAndMeasureExecutionTime(log, "RPCManager.notifyPruningPointChange") + defer onEnd() + + err := m.context.TXIndex.Reset() //TO Do: a full reset resync does the job, but a prune could be more effcient. + if err != nil { + return err + } + + return nil +} + func (m *Manager) notifyVirtualSelectedParentBlueScoreChanged(virtualSelectedParentBlueScore uint64) error { onEnd := logger.LogAndMeasureExecutionTime(log, "RPCManager.NotifyVirtualSelectedParentBlueScoreChanged") defer onEnd() diff --git a/domain/consensus/consensus.go b/domain/consensus/consensus.go index aaddf88e5d..a82b4afbb2 100644 --- a/domain/consensus/consensus.go +++ b/domain/consensus/consensus.go @@ -68,7 +68,7 @@ func (s *consensus) ValidateAndInsertBlockWithTrustedData(block *externalapi.Blo s.lock.Lock() defer s.lock.Unlock() - _, _, err := s.blockProcessor.ValidateAndInsertBlockWithTrustedData(block, validateUTXO) + _, _, _, err := s.blockProcessor.ValidateAndInsertBlockWithTrustedData(block, validateUTXO) if err != nil { return err } @@ -137,7 +137,7 @@ func (s *consensus) Init(skipAddingGenesis bool) error { }, }, } - _, _, err = s.blockProcessor.ValidateAndInsertBlockWithTrustedData(genesisWithTrustedData, true) + _, _, _, err = s.blockProcessor.ValidateAndInsertBlockWithTrustedData(genesisWithTrustedData, true) if err != nil { return err } @@ -219,7 +219,7 @@ func (s *consensus) validateAndInsertBlockNoLock(block *externalapi.DomainBlock, } } - virtualChangeSet, blockStatus, err := s.blockProcessor.ValidateAndInsertBlock(block, updateVirtual) + virtualChangeSet, pruningPointChange, blockStatus, err := s.blockProcessor.ValidateAndInsertBlock(block, updateVirtual) if err != nil { return nil, err } @@ -229,6 +229,14 @@ func (s *consensus) validateAndInsertBlockNoLock(block *externalapi.DomainBlock, s.virtualNotUpdated = true } + if pruningPointChange != nil { + //always send before sendVirtualChangedEvent, since it will trigger the TXIndex reset before an update + err = s.sendPruningPointChangedEvent(pruningPointChange) + if err != nil { + return nil, err + } + } + err = s.sendBlockAddedEvent(block, blockStatus) if err != nil { return nil, err @@ -289,6 +297,21 @@ func (s *consensus) sendVirtualChangedEvent(virtualChangeSet *externalapi.Virtua return nil } +func (s *consensus) sendPruningPointChangedEvent(pruningPointChange *externalapi.PruningPointChange) error { + if s.consensusEventsChan != nil { + + if len(s.consensusEventsChan) == cap(s.consensusEventsChan) { + return errors.Errorf("consensusEventsChan is full") + } + + s.consensusEventsChan <- pruningPointChange + + return nil + } + return nil + +} + // ValidateTransactionAndPopulateWithConsensusData validates the given transaction // and populates it with any missing consensus data func (s *consensus) ValidateTransactionAndPopulateWithConsensusData(transaction *externalapi.DomainTransaction) error { @@ -907,7 +930,8 @@ func (s *consensus) resolveVirtualNoLock(maxBlocksToResolve uint64) (bool, error s.virtualNotUpdated = !isCompletelyResolved stagingArea := model.NewStagingArea() - err = s.pruningManager.UpdatePruningPointByVirtual(stagingArea) + + pruningPointChange, err := s.pruningManager.UpdatePruningPointByVirtualAndReturnChange(stagingArea) if err != nil { return false, err } @@ -917,6 +941,11 @@ func (s *consensus) resolveVirtualNoLock(maxBlocksToResolve uint64) (bool, error return false, err } + err = s.sendPruningPointChangedEvent(pruningPointChange) + if err != nil { + return false, err + } + err = s.sendVirtualChangedEvent(virtualChangeSet, true) if err != nil { return false, err diff --git a/domain/consensus/factory.go b/domain/consensus/factory.go index f5167fc7e7..003d738b9b 100644 --- a/domain/consensus/factory.go +++ b/domain/consensus/factory.go @@ -540,7 +540,7 @@ func (f *factory) NewConsensus(config *Config, db infrastructuredatabase.Databas } stagingArea := model.NewStagingArea() - err = pruningManager.UpdatePruningPointByVirtual(stagingArea) + _, err = pruningManager.UpdatePruningPointByVirtualAndReturnChange(stagingArea) if err != nil { return nil, false, err } diff --git a/domain/consensus/model/externalapi/consensus_events.go b/domain/consensus/model/externalapi/consensus_events.go index 54c0158493..2f34a050fc 100644 --- a/domain/consensus/model/externalapi/consensus_events.go +++ b/domain/consensus/model/externalapi/consensus_events.go @@ -5,6 +5,14 @@ type ConsensusEvent interface { isConsensusEvent() } +// PruningPointChange is an event raised by consensus when a new pruning point was added to the dag +type PruningPointChange struct { + OldPruningPoint *DomainHash + NewPruningPoint *DomainHash +} + +func (*PruningPointChange) isConsensusEvent() {} + // BlockAdded is an event raised by consensus when a block was added to the dag type BlockAdded struct { Block *DomainBlock diff --git a/domain/consensus/model/interface_processes_blockprocessor.go b/domain/consensus/model/interface_processes_blockprocessor.go index cf6b835aa8..d046c16eeb 100644 --- a/domain/consensus/model/interface_processes_blockprocessor.go +++ b/domain/consensus/model/interface_processes_blockprocessor.go @@ -4,7 +4,7 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // BlockProcessor is responsible for processing incoming blocks type BlockProcessor interface { - ValidateAndInsertBlock(block *externalapi.DomainBlock, shouldValidateAgainstUTXO bool) (*externalapi.VirtualChangeSet, externalapi.BlockStatus, error) + ValidateAndInsertBlock(block *externalapi.DomainBlock, shouldValidateAgainstUTXO bool) (*externalapi.VirtualChangeSet, *externalapi.PruningPointChange, externalapi.BlockStatus, error) ValidateAndInsertImportedPruningPoint(newPruningPoint *externalapi.DomainHash) error - ValidateAndInsertBlockWithTrustedData(block *externalapi.BlockWithTrustedData, validateUTXO bool) (*externalapi.VirtualChangeSet, externalapi.BlockStatus, error) + ValidateAndInsertBlockWithTrustedData(block *externalapi.BlockWithTrustedData, validateUTXO bool) (*externalapi.VirtualChangeSet, *externalapi.PruningPointChange, externalapi.BlockStatus, error) } diff --git a/domain/consensus/model/interface_processes_pruningmanager.go b/domain/consensus/model/interface_processes_pruningmanager.go index cda221ba8d..1e4bc8e62b 100644 --- a/domain/consensus/model/interface_processes_pruningmanager.go +++ b/domain/consensus/model/interface_processes_pruningmanager.go @@ -4,7 +4,7 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // PruningManager resolves and manages the current pruning point type PruningManager interface { - UpdatePruningPointByVirtual(stagingArea *StagingArea) error + UpdatePruningPointByVirtualAndReturnChange(stagingArea *StagingArea) (*externalapi.PruningPointChange, error) IsValidPruningPoint(stagingArea *StagingArea, blockHash *externalapi.DomainHash) (bool, error) ArePruningPointsViolatingFinality(stagingArea *StagingArea, pruningPoints []externalapi.BlockHeader) (bool, error) ArePruningPointsInValidChain(stagingArea *StagingArea) (bool, error) diff --git a/domain/consensus/processes/blockprocessor/blockprocessor.go b/domain/consensus/processes/blockprocessor/blockprocessor.go index f61ed14300..3e5dab59a9 100644 --- a/domain/consensus/processes/blockprocessor/blockprocessor.go +++ b/domain/consensus/processes/blockprocessor/blockprocessor.go @@ -145,7 +145,7 @@ func New( // ValidateAndInsertBlock validates the given block and, if valid, applies it // to the current state func (bp *blockProcessor) ValidateAndInsertBlock(block *externalapi.DomainBlock, - shouldValidateAgainstUTXO bool) (*externalapi.VirtualChangeSet, externalapi.BlockStatus, error) { + shouldValidateAgainstUTXO bool) (*externalapi.VirtualChangeSet, *externalapi.PruningPointChange, externalapi.BlockStatus, error) { onEnd := logger.LogAndMeasureExecutionTime(log, "ValidateAndInsertBlock") defer onEnd() @@ -162,7 +162,7 @@ func (bp *blockProcessor) ValidateAndInsertImportedPruningPoint(newPruningPoint } func (bp *blockProcessor) ValidateAndInsertBlockWithTrustedData(block *externalapi.BlockWithTrustedData, - shouldValidateAgainstUTXO bool) (*externalapi.VirtualChangeSet, externalapi.BlockStatus, error) { + shouldValidateAgainstUTXO bool) (*externalapi.VirtualChangeSet, *externalapi.PruningPointChange, externalapi.BlockStatus, error) { onEnd := logger.LogAndMeasureExecutionTime(log, "ValidateAndInsertBlockWithTrustedData") defer onEnd() diff --git a/domain/consensus/processes/blockprocessor/validate_and_insert_block.go b/domain/consensus/processes/blockprocessor/validate_and_insert_block.go index 5d71d60e08..452bd37c1b 100644 --- a/domain/consensus/processes/blockprocessor/validate_and_insert_block.go +++ b/domain/consensus/processes/blockprocessor/validate_and_insert_block.go @@ -77,44 +77,47 @@ func (bp *blockProcessor) updateVirtualAcceptanceDataAfterImportingPruningPoint( } func (bp *blockProcessor) validateAndInsertBlock(stagingArea *model.StagingArea, block *externalapi.DomainBlock, - isPruningPoint bool, shouldValidateAgainstUTXO bool, isBlockWithTrustedData bool) (*externalapi.VirtualChangeSet, externalapi.BlockStatus, error) { + isPruningPoint bool, shouldValidateAgainstUTXO bool, isBlockWithTrustedData bool) (*externalapi.VirtualChangeSet, *externalapi.PruningPointChange, externalapi.BlockStatus, error) { blockHash := consensushashing.HeaderHash(block.Header) err := bp.validateBlock(stagingArea, block, isBlockWithTrustedData) if err != nil { - return nil, externalapi.StatusInvalid, err + return nil, nil, externalapi.StatusInvalid, err } status, err := bp.setBlockStatusAfterBlockValidation(stagingArea, block, isPruningPoint) if err != nil { - return nil, externalapi.StatusInvalid, err + return nil, nil, externalapi.StatusInvalid, err } var oldHeadersSelectedTip *externalapi.DomainHash + hasHeaderSelectedTip, err := bp.headersSelectedTipStore.Has(bp.databaseContext, stagingArea) if err != nil { - return nil, externalapi.StatusInvalid, err + return nil, nil, externalapi.StatusInvalid, err } if hasHeaderSelectedTip { var err error oldHeadersSelectedTip, err = bp.headersSelectedTipStore.HeadersSelectedTip(bp.databaseContext, stagingArea) if err != nil { - return nil, externalapi.StatusInvalid, err + return nil, nil, externalapi.StatusInvalid, err } } + var oldPruningPoint *externalapi.DomainHash + shouldAddHeaderSelectedTip := false if !hasHeaderSelectedTip { shouldAddHeaderSelectedTip = true } else { - pruningPoint, err := bp.pruningStore.PruningPoint(bp.databaseContext, stagingArea) + oldPruningPoint, err = bp.pruningStore.PruningPoint(bp.databaseContext, stagingArea) if err != nil { - return nil, externalapi.StatusInvalid, err + return nil, nil, externalapi.StatusInvalid, err } - isInSelectedChainOfPruningPoint, err := bp.dagTopologyManager.IsInSelectedParentChainOf(stagingArea, pruningPoint, blockHash) + isInSelectedChainOfPruningPoint, err := bp.dagTopologyManager.IsInSelectedParentChainOf(stagingArea, oldPruningPoint, blockHash) if err != nil { - return nil, externalapi.StatusInvalid, err + return nil, nil, externalapi.StatusInvalid, err } // Don't set blocks in the anticone of the pruning point as header selected tip. @@ -125,7 +128,7 @@ func (bp *blockProcessor) validateAndInsertBlock(stagingArea *model.StagingArea, // Don't set blocks in the anticone of the pruning point as header selected tip. err = bp.headerTipsManager.AddHeaderTip(stagingArea, blockHash) if err != nil { - return nil, externalapi.StatusInvalid, err + return nil, nil, externalapi.StatusInvalid, err } } @@ -138,40 +141,42 @@ func (bp *blockProcessor) validateAndInsertBlock(stagingArea *model.StagingArea, // Attempt to add the block to the virtual selectedParentChainChanges, virtualUTXODiff, reversalData, err = bp.consensusStateManager.AddBlock(stagingArea, blockHash, shouldValidateAgainstUTXO) if err != nil { - return nil, externalapi.StatusInvalid, err + return nil, nil, externalapi.StatusInvalid, err } } if hasHeaderSelectedTip { err := bp.updateReachabilityReindexRoot(stagingArea, oldHeadersSelectedTip) if err != nil { - return nil, externalapi.StatusInvalid, err + return nil, nil, externalapi.StatusInvalid, err } } + var pruningPointChange *externalapi.PruningPointChange + if !isHeaderOnlyBlock && shouldValidateAgainstUTXO { // Trigger pruning, which will check if the pruning point changed and delete the data if it did. - err = bp.pruningManager.UpdatePruningPointByVirtual(stagingArea) + pruningPointChange, err = bp.pruningManager.UpdatePruningPointByVirtualAndReturnChange(stagingArea) if err != nil { - return nil, externalapi.StatusInvalid, err + return nil, nil, externalapi.StatusInvalid, err } } err = staging.CommitAllChanges(bp.databaseContext, stagingArea) if err != nil { - return nil, externalapi.StatusInvalid, err + return nil, nil, externalapi.StatusInvalid, err } if reversalData != nil { err = bp.consensusStateManager.ReverseUTXODiffs(blockHash, reversalData) if err != nil { - return nil, externalapi.StatusInvalid, err + return nil, nil, externalapi.StatusInvalid, err } } err = bp.pruningManager.UpdatePruningPointIfRequired() if err != nil { - return nil, externalapi.StatusInvalid, err + return nil, nil, externalapi.StatusInvalid, err } log.Debug(logger.NewLogClosure(func() string { @@ -196,14 +201,14 @@ func (bp *blockProcessor) validateAndInsertBlock(stagingArea *model.StagingArea, virtualGhostDAGData.BlueScore(), blockCount, headerCount) })) if logClosureErr != nil { - return nil, externalapi.StatusInvalid, logClosureErr + return nil, nil, externalapi.StatusInvalid, logClosureErr } virtualParents, err := bp.dagTopologyManager.Parents(stagingArea, model.VirtualBlockHash) if database.IsNotFoundError(err) { virtualParents = nil } else if err != nil { - return nil, externalapi.StatusInvalid, err + return nil, nil, externalapi.StatusInvalid, err } bp.pastMedianTimeManager.InvalidateVirtualPastMedianTimeCache() @@ -214,7 +219,7 @@ func (bp *blockProcessor) validateAndInsertBlock(stagingArea *model.StagingArea, VirtualSelectedParentChainChanges: selectedParentChainChanges, VirtualUTXODiff: virtualUTXODiff, VirtualParents: virtualParents, - }, status, nil + }, pruningPointChange, status, nil } func (bp *blockProcessor) loadUTXODataForGenesis(stagingArea *model.StagingArea, block *externalapi.DomainBlock) { diff --git a/domain/consensus/processes/blockprocessor/validate_and_insert_block_with_trusted_data.go b/domain/consensus/processes/blockprocessor/validate_and_insert_block_with_trusted_data.go index 7627ef00e8..53d9718562 100644 --- a/domain/consensus/processes/blockprocessor/validate_and_insert_block_with_trusted_data.go +++ b/domain/consensus/processes/blockprocessor/validate_and_insert_block_with_trusted_data.go @@ -8,7 +8,7 @@ import ( ) func (bp *blockProcessor) validateAndInsertBlockWithTrustedData(stagingArea *model.StagingArea, - block *externalapi.BlockWithTrustedData, validateUTXO bool) (*externalapi.VirtualChangeSet, externalapi.BlockStatus, error) { + block *externalapi.BlockWithTrustedData, validateUTXO bool) (*externalapi.VirtualChangeSet, *externalapi.PruningPointChange, externalapi.BlockStatus, error) { blockHash := consensushashing.BlockHash(block.Block) for i, daaBlock := range block.DAAWindow { @@ -22,7 +22,7 @@ func (bp *blockProcessor) validateAndInsertBlockWithTrustedData(stagingArea *mod blockReplacedGHOSTDAGData, err := bp.ghostdagDataWithoutPrunedBlocks(stagingArea, block.GHOSTDAGData[0].GHOSTDAGData) if err != nil { - return nil, externalapi.StatusInvalid, err + return nil, nil, externalapi.StatusInvalid, err } bp.ghostdagDataStore.Stage(stagingArea, blockHash, blockReplacedGHOSTDAGData, false) diff --git a/domain/consensus/processes/pruningmanager/pruningmanager.go b/domain/consensus/processes/pruningmanager/pruningmanager.go index dd5798afd3..7b68f10bc6 100644 --- a/domain/consensus/processes/pruningmanager/pruningmanager.go +++ b/domain/consensus/processes/pruningmanager/pruningmanager.go @@ -112,48 +112,52 @@ func New( } } -func (pm *pruningManager) UpdatePruningPointByVirtual(stagingArea *model.StagingArea) error { +func (pm *pruningManager) UpdatePruningPointByVirtualAndReturnChange(stagingArea *model.StagingArea) (*externalapi.PruningPointChange, error) { onEnd := logger.LogAndMeasureExecutionTime(log, "pruningManager.UpdatePruningPointByVirtual") defer onEnd() hasPruningPoint, err := pm.pruningStore.HasPruningPoint(pm.databaseContext, stagingArea) if err != nil { - return err + return nil, err } if !hasPruningPoint { hasGenesis, err := pm.blocksStore.HasBlock(pm.databaseContext, stagingArea, pm.genesisHash) if err != nil { - return err + return nil, err } if hasGenesis { err = pm.savePruningPoint(stagingArea, pm.genesisHash) if err != nil { - return err + return nil, err } } // Pruning point should initially set manually on a pruned-headers node. - return nil + return &externalapi.PruningPointChange{ + NewPruningPoint: pm.genesisHash, + }, err } virtualGHOSTDAGData, err := pm.ghostdagDataStore.Get(pm.databaseContext, stagingArea, model.VirtualBlockHash, false) if err != nil { - return err + return nil, err } if virtualGHOSTDAGData.SelectedParent().Equal(pm.genesisHash) { - return nil + return &externalapi.PruningPointChange{ + OldPruningPoint: pm.genesisHash, + }, err } newPruningPoint, newCandidate, err := pm.nextPruningPointAndCandidateByBlockHash(stagingArea, virtualGHOSTDAGData.SelectedParent(), nil) if err != nil { - return err + return nil, err } currentCandidate, err := pm.pruningPointCandidate(stagingArea) if err != nil { - return err + return nil, err } if !newCandidate.Equal(currentCandidate) { @@ -163,32 +167,35 @@ func (pm *pruningManager) UpdatePruningPointByVirtual(stagingArea *model.Staging currentPruningPoint, err := pm.pruningStore.PruningPoint(pm.databaseContext, stagingArea) if err != nil { - return err + return nil, err } if !newPruningPoint.Equal(currentPruningPoint) { currentPruningPointGHOSTDAGData, err := pm.ghostdagDataStore.Get(pm.databaseContext, stagingArea, currentPruningPoint, false) if err != nil { - return err + return nil, err } newPruningPointGHOSTDAGData, err := pm.ghostdagDataStore.Get(pm.databaseContext, stagingArea, newPruningPoint, false) if err != nil { - return err + return nil, err } if pm.finalityScore(newPruningPointGHOSTDAGData.BlueScore()) > pm.finalityScore(currentPruningPointGHOSTDAGData.BlueScore())+1 { - return errors.Errorf("cannot advance pruning point by more than one finality interval at once") + return nil, errors.Errorf("cannot advance pruning point by more than one finality interval at once") } log.Debugf("Moving pruning point from %s to %s", currentPruningPoint, newPruningPoint) err = pm.savePruningPoint(stagingArea, newPruningPoint) if err != nil { - return err + return nil, err } } - return nil + return &externalapi.PruningPointChange{ + OldPruningPoint: currentPruningPoint, + NewPruningPoint: newPruningPoint, + }, err } type blockIteratorFromOneBlock struct { diff --git a/domain/consensus/test_consensus.go b/domain/consensus/test_consensus.go index 0eda211c90..f9d179f88f 100644 --- a/domain/consensus/test_consensus.go +++ b/domain/consensus/test_consensus.go @@ -272,7 +272,7 @@ func (tc *testConsensus) UpdatePruningPointByVirtual() error { defer tc.lock.Unlock() stagingArea := model.NewStagingArea() - err := tc.pruningManager.UpdatePruningPointByVirtual(stagingArea) + _, err := tc.pruningManager.UpdatePruningPointByVirtualAndReturnChange(stagingArea) if err != nil { return err } From 463db63e2225d9637b64f0d9fdfd828b3f1e08d3 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Fri, 24 Jun 2022 10:52:14 +0200 Subject: [PATCH 08/47] add minimal rpc for usecase and testing. --- app/appmessage/message.go | 4 + .../rpc_get_accepting_block_hash_of_tx.go | 41 ++ app/rpc/rpc.go | 1 + .../get_accepting_block_hash_of_tx.go | 53 +++ domain/txindex/store.go | 14 +- domain/txindex/txindex.go | 27 +- .../grpcserver/protowire/messages.pb.go | 101 +++-- .../grpcserver/protowire/messages.proto | 2 + .../server/grpcserver/protowire/rpc.md | 33 ++ .../server/grpcserver/protowire/rpc.pb.go | 408 ++++++++++++------ .../server/grpcserver/protowire/rpc.proto | 14 +- .../rpc_get_accepting_block_hash_of_tx.go | 70 +++ .../server/grpcserver/protowire/wire.go | 14 + .../rpc_get_accepting_block_hash_of_tx.go | 20 + 14 files changed, 614 insertions(+), 188 deletions(-) create mode 100644 app/appmessage/rpc_get_accepting_block_hash_of_tx.go create mode 100644 app/rpc/rpchandlers/get_accepting_block_hash_of_tx.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_block_hash_of_tx.go create mode 100644 infrastructure/network/rpcclient/rpc_get_accepting_block_hash_of_tx.go diff --git a/app/appmessage/message.go b/app/appmessage/message.go index 8f778b1179..053b35c7eb 100644 --- a/app/appmessage/message.go +++ b/app/appmessage/message.go @@ -163,6 +163,8 @@ const ( CmdGetMempoolEntriesByAddressesResponseMessage CmdGetCoinSupplyRequestMessage CmdGetCoinSupplyResponseMessage + CmdGetAcceptingBlockHashOfTxRequestMessage + CmdGetAcceptingBlockHashOfTxResponseMessage ) // ProtocolMessageCommandToString maps all MessageCommands to their string representation @@ -300,6 +302,8 @@ var RPCMessageCommandToString = map[MessageCommand]string{ CmdGetMempoolEntriesByAddressesResponseMessage: "GetMempoolEntriesByAddressesResponse", CmdGetCoinSupplyRequestMessage: "GetCoinSupplyRequest", CmdGetCoinSupplyResponseMessage: "GetCoinSupplyResponse", + CmdGetAcceptingBlockHashOfTxRequestMessage: "GetAcceptingBlockHashOfTxRequest", + CmdGetAcceptingBlockHashOfTxResponseMessage: "GetAcceptingBlockHashOfTxResponse", } // Message is an interface that describes a kaspa message. A type that diff --git a/app/appmessage/rpc_get_accepting_block_hash_of_tx.go b/app/appmessage/rpc_get_accepting_block_hash_of_tx.go new file mode 100644 index 0000000000..4996befafe --- /dev/null +++ b/app/appmessage/rpc_get_accepting_block_hash_of_tx.go @@ -0,0 +1,41 @@ +package appmessage + +// GetAcceptingBlockHashOfTxRequestMessage is an appmessage corresponding to +// its respective RPC message +type GetAcceptingBlockHashOfTxRequestMessage struct { + baseMessage + TxID string +} + +// Command returns the protocol command string for the message +func (msg *GetAcceptingBlockHashOfTxRequestMessage) Command() MessageCommand { + return CmdGetAcceptingBlockHashOfTxRequestMessage +} + +// NewGetAcceptingBlockHashOfTxRequest returns a instance of the message +func NewGetAcceptingBlockHashOfTxRequest(txID string) *GetAcceptingBlockHashOfTxRequestMessage { + return &GetAcceptingBlockHashOfTxRequestMessage{ + TxID: txID, + } +} + +// GetAcceptingBlockHashOfTxResponseMessage is an appmessage corresponding to +// its respective RPC message +type GetAcceptingBlockHashOfTxResponseMessage struct { + baseMessage + Hash string + + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *GetAcceptingBlockHashOfTxResponseMessage) Command() MessageCommand { + return CmdGetAcceptingBlockHashOfTxResponseMessage +} + +// NewGetAcceptingBlockHashOfTxResponse returns an instance of the message +func NewGetAcceptingBlockHashOfTxResponse(hash string) *GetAcceptingBlockHashOfTxResponseMessage { + return &GetAcceptingBlockHashOfTxResponseMessage{ + Hash: hash, + } +} diff --git a/app/rpc/rpc.go b/app/rpc/rpc.go index 770b9eb221..71acd8b6b8 100644 --- a/app/rpc/rpc.go +++ b/app/rpc/rpc.go @@ -51,6 +51,7 @@ var handlers = map[appmessage.MessageCommand]handler{ appmessage.CmdNotifyNewBlockTemplateRequestMessage: rpchandlers.HandleNotifyNewBlockTemplate, appmessage.CmdGetCoinSupplyRequestMessage: rpchandlers.HandleGetCoinSupply, appmessage.CmdGetMempoolEntriesByAddressesRequestMessage: rpchandlers.HandleGetMempoolEntriesByAddresses, + appmessage.CmdGetAcceptingBlockHashOfTxRequestMessage: rpchandlers.HandleGetAcceptingBlockHashOfTx, } func (m *Manager) routerInitializer(router *router.Router, netConnection *netadapter.NetConnection) { diff --git a/app/rpc/rpchandlers/get_accepting_block_hash_of_tx.go b/app/rpc/rpchandlers/get_accepting_block_hash_of_tx.go new file mode 100644 index 0000000000..c99ae135fa --- /dev/null +++ b/app/rpc/rpchandlers/get_accepting_block_hash_of_tx.go @@ -0,0 +1,53 @@ +package rpchandlers + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/kaspanet/kaspad/app/rpc/rpccontext" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" + + "github.com/pkg/errors" +) + +// HandleGetAcceptingBlockHashOfTx handles the respectively named RPC command +func HandleGetAcceptingBlockHashOfTx(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { + if !context.Config.TXIndex { + errorMessage := &appmessage.GetAcceptingBlockHashOfTxResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") + return errorMessage, nil + } + + getAcceptingBlockHashOfTxRequest := request.(*appmessage.GetAcceptingBlockHashOfTxRequestMessage) + + domainTxID, err := externalapi.NewDomainTransactionIDFromString(getAcceptingBlockHashOfTxRequest.TxID) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetUTXOsByAddressesResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + + acceptingBlockHash, found, err := context.TXIndex.TXAcceptingBlockHash(domainTxID) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetUTXOsByAddressesResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + if !found { + errorMessage := &appmessage.GetAcceptingBlockHashOfTxResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Could not find accepting block hash in the txindex database for txID: %s", domainTxID.String()) + return errorMessage, nil + + } + + response := appmessage.NewGetAcceptingBlockHashOfTxResponse(acceptingBlockHash.String()) + + return response, nil +} diff --git a/domain/txindex/store.go b/domain/txindex/store.go index df229bb3ab..4d233b0942 100644 --- a/domain/txindex/store.go +++ b/domain/txindex/store.go @@ -199,23 +199,25 @@ func (tis *txIndexStore) isAnythingStaged() bool { return len(tis.toAdd) > 0 } -func (tis *txIndexStore) getTxAcceptingBlockHash(txID *externalapi.DomainTransactionID) (*externalapi.DomainHash, error) { +func (tis *txIndexStore) getTxAcceptingBlockHash(txID *externalapi.DomainTransactionID) (blockHash *externalapi.DomainHash, found bool, err error) { if tis.isAnythingStaged() { - return nil, errors.Errorf("cannot get TX accepting Block hash while staging isn't empty") + return nil, false, errors.Errorf("cannot get TX accepting Block hash while staging isn't empty") } key := tis.convertTxIDToKey(txAcceptedIndexBucket, *txID) serializedAcceptingBlockHash, err := tis.database.Get(key) - if err != nil { - return nil, err + if err == database.ErrNotFound { + return nil, false, nil + } + return nil, false, err } acceptingBlockHash, err := externalapi.NewDomainHashFromByteSlice(serializedAcceptingBlockHash) if err != nil { - return nil, err + return nil, false, err } - return acceptingBlockHash, nil + return acceptingBlockHash, true, nil } diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index ae8e752a1a..ae4fcc6392 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -179,37 +179,18 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai } // TXAcceptingBlockHash returns the accepting block hash for for the given txID -func (ti *TXIndex) TXAcceptingBlockHash(txID *externalapi.DomainTransactionID) (*externalapi.DomainHash, error) { +func (ti *TXIndex) TXAcceptingBlockHash(txID *externalapi.DomainTransactionID) (blockHash *externalapi.DomainHash, found bool, err error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlockHash") defer onEnd() ti.mutex.Lock() defer ti.mutex.Unlock() - acceptingBlockHash, err := ti.store.getTxAcceptingBlockHash(txID) + acceptingBlockHash, found, err := ti.store.getTxAcceptingBlockHash(txID) if err != nil { - return nil, err - } - return acceptingBlockHash, nil -} - -// TXAcceptingBlock returns the accepting block for for the given txID -func (ti *TXIndex) TXAcceptingBlock(txID *externalapi.DomainTransactionID) (*externalapi.DomainBlock, error) { - onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlock") - defer onEnd() - - ti.mutex.Lock() - defer ti.mutex.Unlock() - - acceptingBlockHash, err := ti.store.getTxAcceptingBlockHash(txID) - if err != nil { - return nil, err - } - acceptingBlock, err := ti.domain.Consensus().GetBlock(acceptingBlockHash) - if err != nil { - return nil, err + return nil, false, err } - return acceptingBlock, nil + return acceptingBlockHash, found, nil } //TO DO: Get Block from TxID diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go index c273e10d7e..056e7ba158 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go @@ -156,6 +156,8 @@ type KaspadMessage struct { // *KaspadMessage_GetMempoolEntriesByAddressesResponse // *KaspadMessage_GetCoinSupplyRequest // *KaspadMessage_GetCoinSupplyResponse + // *KaspadMessage_GetAcceptingBlockHashOfTxRequest + // *KaspadMessage_GetAcceptingBlockHashOfTxResponse Payload isKaspadMessage_Payload `protobuf_oneof:"payload"` } @@ -1108,6 +1110,20 @@ func (x *KaspadMessage) GetGetCoinSupplyResponse() *GetCoinSupplyResponseMessage return nil } +func (x *KaspadMessage) GetGetAcceptingBlockHashOfTxRequest() *GetAcceptingBlockHashOfTxRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlockHashOfTxRequest); ok { + return x.GetAcceptingBlockHashOfTxRequest + } + return nil +} + +func (x *KaspadMessage) GetGetAcceptingBlockHashOfTxResponse() *GetAcceptingBlockHashOfTxResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlockHashOfTxResponse); ok { + return x.GetAcceptingBlockHashOfTxResponse + } + return nil +} + type isKaspadMessage_Payload interface { isKaspadMessage_Payload() } @@ -1632,6 +1648,14 @@ type KaspadMessage_GetCoinSupplyResponse struct { GetCoinSupplyResponse *GetCoinSupplyResponseMessage `protobuf:"bytes,1087,opt,name=getCoinSupplyResponse,proto3,oneof"` } +type KaspadMessage_GetAcceptingBlockHashOfTxRequest struct { + GetAcceptingBlockHashOfTxRequest *GetAcceptingBlockHashOfTxRequestMessage `protobuf:"bytes,1088,opt,name=getAcceptingBlockHashOfTxRequest,proto3,oneof"` +} + +type KaspadMessage_GetAcceptingBlockHashOfTxResponse struct { + GetAcceptingBlockHashOfTxResponse *GetAcceptingBlockHashOfTxResponseMessage `protobuf:"bytes,1089,opt,name=getAcceptingBlockHashOfTxResponse,proto3,oneof"` +} + func (*KaspadMessage_Addresses) isKaspadMessage_Payload() {} func (*KaspadMessage_Block) isKaspadMessage_Payload() {} @@ -1892,13 +1916,17 @@ func (*KaspadMessage_GetCoinSupplyRequest) isKaspadMessage_Payload() {} func (*KaspadMessage_GetCoinSupplyResponse) isKaspadMessage_Payload() {} +func (*KaspadMessage_GetAcceptingBlockHashOfTxRequest) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetAcceptingBlockHashOfTxResponse) isKaspadMessage_Payload() {} + var File_messages_proto protoreflect.FileDescriptor var file_messages_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x1a, 0x09, 0x70, 0x32, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x09, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xbf, 0x6d, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x6f, 0x22, 0xca, 0x6f, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4d, 0x65, 0x73, 0x73, @@ -2773,21 +2801,38 @@ var file_messages_proto_rawDesc = []byte{ 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x15, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x32, 0x50, 0x0a, 0x03, 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0x50, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, 0x0d, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, - 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x20, 0x67, 0x65, 0x74, + 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, + 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xc0, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x20, 0x67, 0x65, 0x74, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, + 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x84, 0x01, 0x0a, + 0x21, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0xc1, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, + 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x21, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x32, 0x50, + 0x0a, 0x03, 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, + 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, + 0x32, 0x50, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, + 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, + 0x30, 0x01, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -2934,6 +2979,8 @@ var file_messages_proto_goTypes = []interface{}{ (*GetMempoolEntriesByAddressesResponseMessage)(nil), // 127: protowire.GetMempoolEntriesByAddressesResponseMessage (*GetCoinSupplyRequestMessage)(nil), // 128: protowire.GetCoinSupplyRequestMessage (*GetCoinSupplyResponseMessage)(nil), // 129: protowire.GetCoinSupplyResponseMessage + (*GetAcceptingBlockHashOfTxRequestMessage)(nil), // 130: protowire.GetAcceptingBlockHashOfTxRequestMessage + (*GetAcceptingBlockHashOfTxResponseMessage)(nil), // 131: protowire.GetAcceptingBlockHashOfTxResponseMessage } var file_messages_proto_depIdxs = []int32{ 1, // 0: protowire.KaspadMessage.addresses:type_name -> protowire.AddressesMessage @@ -3066,15 +3113,17 @@ var file_messages_proto_depIdxs = []int32{ 127, // 127: protowire.KaspadMessage.getMempoolEntriesByAddressesResponse:type_name -> protowire.GetMempoolEntriesByAddressesResponseMessage 128, // 128: protowire.KaspadMessage.getCoinSupplyRequest:type_name -> protowire.GetCoinSupplyRequestMessage 129, // 129: protowire.KaspadMessage.getCoinSupplyResponse:type_name -> protowire.GetCoinSupplyResponseMessage - 0, // 130: protowire.P2P.MessageStream:input_type -> protowire.KaspadMessage - 0, // 131: protowire.RPC.MessageStream:input_type -> protowire.KaspadMessage - 0, // 132: protowire.P2P.MessageStream:output_type -> protowire.KaspadMessage - 0, // 133: protowire.RPC.MessageStream:output_type -> protowire.KaspadMessage - 132, // [132:134] is the sub-list for method output_type - 130, // [130:132] is the sub-list for method input_type - 130, // [130:130] is the sub-list for extension type_name - 130, // [130:130] is the sub-list for extension extendee - 0, // [0:130] is the sub-list for field type_name + 130, // 130: protowire.KaspadMessage.getAcceptingBlockHashOfTxRequest:type_name -> protowire.GetAcceptingBlockHashOfTxRequestMessage + 131, // 131: protowire.KaspadMessage.getAcceptingBlockHashOfTxResponse:type_name -> protowire.GetAcceptingBlockHashOfTxResponseMessage + 0, // 132: protowire.P2P.MessageStream:input_type -> protowire.KaspadMessage + 0, // 133: protowire.RPC.MessageStream:input_type -> protowire.KaspadMessage + 0, // 134: protowire.P2P.MessageStream:output_type -> protowire.KaspadMessage + 0, // 135: protowire.RPC.MessageStream:output_type -> protowire.KaspadMessage + 134, // [134:136] is the sub-list for method output_type + 132, // [132:134] is the sub-list for method input_type + 132, // [132:132] is the sub-list for extension type_name + 132, // [132:132] is the sub-list for extension extendee + 0, // [0:132] is the sub-list for field type_name } func init() { file_messages_proto_init() } @@ -3229,6 +3278,8 @@ func file_messages_proto_init() { (*KaspadMessage_GetMempoolEntriesByAddressesResponse)(nil), (*KaspadMessage_GetCoinSupplyRequest)(nil), (*KaspadMessage_GetCoinSupplyResponse)(nil), + (*KaspadMessage_GetAcceptingBlockHashOfTxRequest)(nil), + (*KaspadMessage_GetAcceptingBlockHashOfTxResponse)(nil), } type x struct{} out := protoimpl.TypeBuilder{ diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto index 50be89138c..3e70ca36b1 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto @@ -139,6 +139,8 @@ message KaspadMessage { GetMempoolEntriesByAddressesResponseMessage getMempoolEntriesByAddressesResponse = 1085; GetCoinSupplyRequestMessage getCoinSupplyRequest = 1086; GetCoinSupplyResponseMessage getCoinSupplyResponse= 1087; + GetAcceptingBlockHashOfTxRequestMessage getAcceptingBlockHashOfTxRequest = 1088; + GetAcceptingBlockHashOfTxResponseMessage getAcceptingBlockHashOfTxResponse = 1089; } } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md index 12a22923c6..542dd6d2ec 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md @@ -102,6 +102,8 @@ - [UnbanResponseMessage](#protowire.UnbanResponseMessage) - [GetInfoRequestMessage](#protowire.GetInfoRequestMessage) - [GetInfoResponseMessage](#protowire.GetInfoResponseMessage) + - [GetAcceptingBlockHashOfTxRequestMessage](#protowire.GetAcceptingBlockHashOfTxRequestMessage) + - [GetAcceptingBlockHashOfTxResponseMessage](#protowire.GetAcceptingBlockHashOfTxResponseMessage) - [EstimateNetworkHashesPerSecondRequestMessage](#protowire.EstimateNetworkHashesPerSecondRequestMessage) - [EstimateNetworkHashesPerSecondResponseMessage](#protowire.EstimateNetworkHashesPerSecondResponseMessage) - [NotifyNewBlockTemplateRequestMessage](#protowire.NotifyNewBlockTemplateRequestMessage) @@ -1708,6 +1710,37 @@ GetInfoRequestMessage returns info about the node. + + +### GetAcceptingBlockHashOfTxRequestMessage +Kaspad most be started with the `--txindex` flag for this Request to work. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txID | [string](#string) | | | + + + + + + + + +### GetAcceptingBlockHashOfTxResponseMessage +the accepting block is defined as the virtual chain block that first knows about the transaction. This block may change, or be ommitted and resubmitted, during virtual changes at the tip of the blockDAG + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| hash | [string](#string) | | the accepting block is defined as the virtual chain block that first knows about the transaction. This block may change, or be ommitted and resubmitted, during virtual changes at the tip of the blockDAG | +| error | [RPCError](#protowire.RPCError) | | | + + + + + + ### EstimateNetworkHashesPerSecondRequestMessage diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go index a72e70fe47..b1d3ef8c4d 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go @@ -5588,6 +5588,110 @@ func (x *GetInfoResponseMessage) GetError() *RPCError { return nil } +//Kaspad most be started with the `--txindex` flag for this Request to work. +type GetAcceptingBlockHashOfTxRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` +} + +func (x *GetAcceptingBlockHashOfTxRequestMessage) Reset() { + *x = GetAcceptingBlockHashOfTxRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[98] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAcceptingBlockHashOfTxRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAcceptingBlockHashOfTxRequestMessage) ProtoMessage() {} + +func (x *GetAcceptingBlockHashOfTxRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[98] + 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 GetAcceptingBlockHashOfTxRequestMessage.ProtoReflect.Descriptor instead. +func (*GetAcceptingBlockHashOfTxRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{98} +} + +func (x *GetAcceptingBlockHashOfTxRequestMessage) GetTxID() string { + if x != nil { + return x.TxID + } + return "" +} + +//the accepting block is defined as the virtual chain block that first knows about the transaction. This block may change, or be ommitted and resubmitted, during virtual changes at the tip of the blockDAG +type GetAcceptingBlockHashOfTxResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` //the accepting block is defined as the virtual chain block that first knows about the transaction. This block may change, or be ommitted and resubmitted, during virtual changes at the tip of the blockDAG + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *GetAcceptingBlockHashOfTxResponseMessage) Reset() { + *x = GetAcceptingBlockHashOfTxResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[99] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAcceptingBlockHashOfTxResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAcceptingBlockHashOfTxResponseMessage) ProtoMessage() {} + +func (x *GetAcceptingBlockHashOfTxResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[99] + 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 GetAcceptingBlockHashOfTxResponseMessage.ProtoReflect.Descriptor instead. +func (*GetAcceptingBlockHashOfTxResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{99} +} + +func (x *GetAcceptingBlockHashOfTxResponseMessage) GetHash() string { + if x != nil { + return x.Hash + } + return "" +} + +func (x *GetAcceptingBlockHashOfTxResponseMessage) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + type EstimateNetworkHashesPerSecondRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5600,7 +5704,7 @@ type EstimateNetworkHashesPerSecondRequestMessage struct { func (x *EstimateNetworkHashesPerSecondRequestMessage) Reset() { *x = EstimateNetworkHashesPerSecondRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[98] + mi := &file_rpc_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5613,7 +5717,7 @@ func (x *EstimateNetworkHashesPerSecondRequestMessage) String() string { func (*EstimateNetworkHashesPerSecondRequestMessage) ProtoMessage() {} func (x *EstimateNetworkHashesPerSecondRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[98] + mi := &file_rpc_proto_msgTypes[100] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5626,7 +5730,7 @@ func (x *EstimateNetworkHashesPerSecondRequestMessage) ProtoReflect() protorefle // Deprecated: Use EstimateNetworkHashesPerSecondRequestMessage.ProtoReflect.Descriptor instead. func (*EstimateNetworkHashesPerSecondRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{98} + return file_rpc_proto_rawDescGZIP(), []int{100} } func (x *EstimateNetworkHashesPerSecondRequestMessage) GetWindowSize() uint32 { @@ -5655,7 +5759,7 @@ type EstimateNetworkHashesPerSecondResponseMessage struct { func (x *EstimateNetworkHashesPerSecondResponseMessage) Reset() { *x = EstimateNetworkHashesPerSecondResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[99] + mi := &file_rpc_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5668,7 +5772,7 @@ func (x *EstimateNetworkHashesPerSecondResponseMessage) String() string { func (*EstimateNetworkHashesPerSecondResponseMessage) ProtoMessage() {} func (x *EstimateNetworkHashesPerSecondResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[99] + mi := &file_rpc_proto_msgTypes[101] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5681,7 +5785,7 @@ func (x *EstimateNetworkHashesPerSecondResponseMessage) ProtoReflect() protorefl // Deprecated: Use EstimateNetworkHashesPerSecondResponseMessage.ProtoReflect.Descriptor instead. func (*EstimateNetworkHashesPerSecondResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{99} + return file_rpc_proto_rawDescGZIP(), []int{101} } func (x *EstimateNetworkHashesPerSecondResponseMessage) GetNetworkHashesPerSecond() uint64 { @@ -5711,7 +5815,7 @@ type NotifyNewBlockTemplateRequestMessage struct { func (x *NotifyNewBlockTemplateRequestMessage) Reset() { *x = NotifyNewBlockTemplateRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[100] + mi := &file_rpc_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5724,7 +5828,7 @@ func (x *NotifyNewBlockTemplateRequestMessage) String() string { func (*NotifyNewBlockTemplateRequestMessage) ProtoMessage() {} func (x *NotifyNewBlockTemplateRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[100] + mi := &file_rpc_proto_msgTypes[102] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5737,7 +5841,7 @@ func (x *NotifyNewBlockTemplateRequestMessage) ProtoReflect() protoreflect.Messa // Deprecated: Use NotifyNewBlockTemplateRequestMessage.ProtoReflect.Descriptor instead. func (*NotifyNewBlockTemplateRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{100} + return file_rpc_proto_rawDescGZIP(), []int{102} } type NotifyNewBlockTemplateResponseMessage struct { @@ -5751,7 +5855,7 @@ type NotifyNewBlockTemplateResponseMessage struct { func (x *NotifyNewBlockTemplateResponseMessage) Reset() { *x = NotifyNewBlockTemplateResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[101] + mi := &file_rpc_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5764,7 +5868,7 @@ func (x *NotifyNewBlockTemplateResponseMessage) String() string { func (*NotifyNewBlockTemplateResponseMessage) ProtoMessage() {} func (x *NotifyNewBlockTemplateResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[101] + mi := &file_rpc_proto_msgTypes[103] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5777,7 +5881,7 @@ func (x *NotifyNewBlockTemplateResponseMessage) ProtoReflect() protoreflect.Mess // Deprecated: Use NotifyNewBlockTemplateResponseMessage.ProtoReflect.Descriptor instead. func (*NotifyNewBlockTemplateResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{101} + return file_rpc_proto_rawDescGZIP(), []int{103} } func (x *NotifyNewBlockTemplateResponseMessage) GetError() *RPCError { @@ -5800,7 +5904,7 @@ type NewBlockTemplateNotificationMessage struct { func (x *NewBlockTemplateNotificationMessage) Reset() { *x = NewBlockTemplateNotificationMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[102] + mi := &file_rpc_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5813,7 +5917,7 @@ func (x *NewBlockTemplateNotificationMessage) String() string { func (*NewBlockTemplateNotificationMessage) ProtoMessage() {} func (x *NewBlockTemplateNotificationMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[102] + mi := &file_rpc_proto_msgTypes[104] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5826,7 +5930,7 @@ func (x *NewBlockTemplateNotificationMessage) ProtoReflect() protoreflect.Messag // Deprecated: Use NewBlockTemplateNotificationMessage.ProtoReflect.Descriptor instead. func (*NewBlockTemplateNotificationMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{102} + return file_rpc_proto_rawDescGZIP(), []int{104} } type MempoolEntryByAddress struct { @@ -5842,7 +5946,7 @@ type MempoolEntryByAddress struct { func (x *MempoolEntryByAddress) Reset() { *x = MempoolEntryByAddress{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[103] + mi := &file_rpc_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5855,7 +5959,7 @@ func (x *MempoolEntryByAddress) String() string { func (*MempoolEntryByAddress) ProtoMessage() {} func (x *MempoolEntryByAddress) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[103] + mi := &file_rpc_proto_msgTypes[105] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5868,7 +5972,7 @@ func (x *MempoolEntryByAddress) ProtoReflect() protoreflect.Message { // Deprecated: Use MempoolEntryByAddress.ProtoReflect.Descriptor instead. func (*MempoolEntryByAddress) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{103} + return file_rpc_proto_rawDescGZIP(), []int{105} } func (x *MempoolEntryByAddress) GetAddress() string { @@ -5905,7 +6009,7 @@ type GetMempoolEntriesByAddressesRequestMessage struct { func (x *GetMempoolEntriesByAddressesRequestMessage) Reset() { *x = GetMempoolEntriesByAddressesRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[104] + mi := &file_rpc_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5918,7 +6022,7 @@ func (x *GetMempoolEntriesByAddressesRequestMessage) String() string { func (*GetMempoolEntriesByAddressesRequestMessage) ProtoMessage() {} func (x *GetMempoolEntriesByAddressesRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[104] + mi := &file_rpc_proto_msgTypes[106] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5931,7 +6035,7 @@ func (x *GetMempoolEntriesByAddressesRequestMessage) ProtoReflect() protoreflect // Deprecated: Use GetMempoolEntriesByAddressesRequestMessage.ProtoReflect.Descriptor instead. func (*GetMempoolEntriesByAddressesRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{104} + return file_rpc_proto_rawDescGZIP(), []int{106} } func (x *GetMempoolEntriesByAddressesRequestMessage) GetAddresses() []string { @@ -5967,7 +6071,7 @@ type GetMempoolEntriesByAddressesResponseMessage struct { func (x *GetMempoolEntriesByAddressesResponseMessage) Reset() { *x = GetMempoolEntriesByAddressesResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[105] + mi := &file_rpc_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5980,7 +6084,7 @@ func (x *GetMempoolEntriesByAddressesResponseMessage) String() string { func (*GetMempoolEntriesByAddressesResponseMessage) ProtoMessage() {} func (x *GetMempoolEntriesByAddressesResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[105] + mi := &file_rpc_proto_msgTypes[107] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5993,7 +6097,7 @@ func (x *GetMempoolEntriesByAddressesResponseMessage) ProtoReflect() protoreflec // Deprecated: Use GetMempoolEntriesByAddressesResponseMessage.ProtoReflect.Descriptor instead. func (*GetMempoolEntriesByAddressesResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{105} + return file_rpc_proto_rawDescGZIP(), []int{107} } func (x *GetMempoolEntriesByAddressesResponseMessage) GetEntries() []*MempoolEntryByAddress { @@ -6019,7 +6123,7 @@ type GetCoinSupplyRequestMessage struct { func (x *GetCoinSupplyRequestMessage) Reset() { *x = GetCoinSupplyRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[106] + mi := &file_rpc_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6032,7 +6136,7 @@ func (x *GetCoinSupplyRequestMessage) String() string { func (*GetCoinSupplyRequestMessage) ProtoMessage() {} func (x *GetCoinSupplyRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[106] + mi := &file_rpc_proto_msgTypes[108] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6045,7 +6149,7 @@ func (x *GetCoinSupplyRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCoinSupplyRequestMessage.ProtoReflect.Descriptor instead. func (*GetCoinSupplyRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{106} + return file_rpc_proto_rawDescGZIP(), []int{108} } type GetCoinSupplyResponseMessage struct { @@ -6061,7 +6165,7 @@ type GetCoinSupplyResponseMessage struct { func (x *GetCoinSupplyResponseMessage) Reset() { *x = GetCoinSupplyResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[107] + mi := &file_rpc_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6074,7 +6178,7 @@ func (x *GetCoinSupplyResponseMessage) String() string { func (*GetCoinSupplyResponseMessage) ProtoMessage() {} func (x *GetCoinSupplyResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[107] + mi := &file_rpc_proto_msgTypes[109] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6087,7 +6191,7 @@ func (x *GetCoinSupplyResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCoinSupplyResponseMessage.ProtoReflect.Descriptor instead. func (*GetCoinSupplyResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{107} + return file_rpc_proto_rawDescGZIP(), []int{109} } func (x *GetCoinSupplyResponseMessage) GetMaxSompi() uint64 { @@ -6846,78 +6950,89 @@ var file_rpc_proto_rawDesc = []byte{ 0x52, 0x08, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x6c, 0x0a, 0x2c, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, - 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, - 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x53, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x77, 0x69, 0x6e, 0x64, - 0x6f, 0x77, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, - 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x48, 0x61, 0x73, 0x68, 0x22, 0x93, 0x01, 0x0a, 0x2d, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, - 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, - 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, - 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x12, 0x2a, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x26, 0x0a, 0x24, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x53, 0x0a, 0x25, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x25, 0x0a, 0x23, 0x4e, 0x65, 0x77, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x9b, - 0x01, 0x0a, 0x15, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, - 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x31, 0x0a, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x73, 0x65, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x35, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, - 0x6e, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x22, 0xae, 0x01, 0x0a, - 0x2a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, - 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x34, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x95, 0x01, - 0x0a, 0x2b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, - 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, - 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, + 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, + 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x6a, 0x0a, 0x28, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, + 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, + 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x6c, 0x0a, 0x2c, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x69, 0x7a, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x69, 0x7a, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x22, + 0x93, 0x01, 0x0a, 0x2d, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x36, 0x0a, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, + 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, + 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, - 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x92, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, - 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x6f, 0x6d, 0x70, - 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x6f, 0x6d, 0x70, - 0x69, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x63, 0x69, 0x72, - 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x12, 0x2a, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, - 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x26, 0x0a, 0x24, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, + 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x53, 0x0a, + 0x25, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x25, 0x0a, 0x23, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x9b, 0x01, 0x0a, 0x15, 0x4d, 0x65, + 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x31, 0x0a, + 0x07, 0x73, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, + 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x12, 0x35, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x72, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x22, 0xae, 0x01, 0x0a, 0x2a, 0x47, 0x65, 0x74, 0x4d, + 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, + 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, + 0x6f, 0x6c, 0x12, 0x34, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x95, 0x01, 0x0a, 0x2b, 0x47, 0x65, 0x74, + 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x65, 0x6e, 0x74, + 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x92, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x12, 0x2a, 0x0a, 0x10, + 0x63, 0x69, 0x72, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x6d, 0x70, 0x69, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6c, 0x61, 0x74, + 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, + 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -6933,7 +7048,7 @@ func file_rpc_proto_rawDescGZIP() []byte { } var file_rpc_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 108) +var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 110) var file_rpc_proto_goTypes = []interface{}{ (SubmitBlockResponseMessage_RejectReason)(0), // 0: protowire.SubmitBlockResponseMessage.RejectReason (*RPCError)(nil), // 1: protowire.RPCError @@ -7034,16 +7149,18 @@ var file_rpc_proto_goTypes = []interface{}{ (*UnbanResponseMessage)(nil), // 96: protowire.UnbanResponseMessage (*GetInfoRequestMessage)(nil), // 97: protowire.GetInfoRequestMessage (*GetInfoResponseMessage)(nil), // 98: protowire.GetInfoResponseMessage - (*EstimateNetworkHashesPerSecondRequestMessage)(nil), // 99: protowire.EstimateNetworkHashesPerSecondRequestMessage - (*EstimateNetworkHashesPerSecondResponseMessage)(nil), // 100: protowire.EstimateNetworkHashesPerSecondResponseMessage - (*NotifyNewBlockTemplateRequestMessage)(nil), // 101: protowire.NotifyNewBlockTemplateRequestMessage - (*NotifyNewBlockTemplateResponseMessage)(nil), // 102: protowire.NotifyNewBlockTemplateResponseMessage - (*NewBlockTemplateNotificationMessage)(nil), // 103: protowire.NewBlockTemplateNotificationMessage - (*MempoolEntryByAddress)(nil), // 104: protowire.MempoolEntryByAddress - (*GetMempoolEntriesByAddressesRequestMessage)(nil), // 105: protowire.GetMempoolEntriesByAddressesRequestMessage - (*GetMempoolEntriesByAddressesResponseMessage)(nil), // 106: protowire.GetMempoolEntriesByAddressesResponseMessage - (*GetCoinSupplyRequestMessage)(nil), // 107: protowire.GetCoinSupplyRequestMessage - (*GetCoinSupplyResponseMessage)(nil), // 108: protowire.GetCoinSupplyResponseMessage + (*GetAcceptingBlockHashOfTxRequestMessage)(nil), // 99: protowire.GetAcceptingBlockHashOfTxRequestMessage + (*GetAcceptingBlockHashOfTxResponseMessage)(nil), // 100: protowire.GetAcceptingBlockHashOfTxResponseMessage + (*EstimateNetworkHashesPerSecondRequestMessage)(nil), // 101: protowire.EstimateNetworkHashesPerSecondRequestMessage + (*EstimateNetworkHashesPerSecondResponseMessage)(nil), // 102: protowire.EstimateNetworkHashesPerSecondResponseMessage + (*NotifyNewBlockTemplateRequestMessage)(nil), // 103: protowire.NotifyNewBlockTemplateRequestMessage + (*NotifyNewBlockTemplateResponseMessage)(nil), // 104: protowire.NotifyNewBlockTemplateResponseMessage + (*NewBlockTemplateNotificationMessage)(nil), // 105: protowire.NewBlockTemplateNotificationMessage + (*MempoolEntryByAddress)(nil), // 106: protowire.MempoolEntryByAddress + (*GetMempoolEntriesByAddressesRequestMessage)(nil), // 107: protowire.GetMempoolEntriesByAddressesRequestMessage + (*GetMempoolEntriesByAddressesResponseMessage)(nil), // 108: protowire.GetMempoolEntriesByAddressesResponseMessage + (*GetCoinSupplyRequestMessage)(nil), // 109: protowire.GetCoinSupplyRequestMessage + (*GetCoinSupplyResponseMessage)(nil), // 110: protowire.GetCoinSupplyResponseMessage } var file_rpc_proto_depIdxs = []int32{ 3, // 0: protowire.RpcBlock.header:type_name -> protowire.RpcBlockHeader @@ -7115,18 +7232,19 @@ var file_rpc_proto_depIdxs = []int32{ 1, // 66: protowire.BanResponseMessage.error:type_name -> protowire.RPCError 1, // 67: protowire.UnbanResponseMessage.error:type_name -> protowire.RPCError 1, // 68: protowire.GetInfoResponseMessage.error:type_name -> protowire.RPCError - 1, // 69: protowire.EstimateNetworkHashesPerSecondResponseMessage.error:type_name -> protowire.RPCError - 1, // 70: protowire.NotifyNewBlockTemplateResponseMessage.error:type_name -> protowire.RPCError - 33, // 71: protowire.MempoolEntryByAddress.sending:type_name -> protowire.MempoolEntry - 33, // 72: protowire.MempoolEntryByAddress.receiving:type_name -> protowire.MempoolEntry - 104, // 73: protowire.GetMempoolEntriesByAddressesResponseMessage.entries:type_name -> protowire.MempoolEntryByAddress - 1, // 74: protowire.GetMempoolEntriesByAddressesResponseMessage.error:type_name -> protowire.RPCError - 1, // 75: protowire.GetCoinSupplyResponseMessage.error:type_name -> protowire.RPCError - 76, // [76:76] is the sub-list for method output_type - 76, // [76:76] is the sub-list for method input_type - 76, // [76:76] is the sub-list for extension type_name - 76, // [76:76] is the sub-list for extension extendee - 0, // [0:76] is the sub-list for field type_name + 1, // 69: protowire.GetAcceptingBlockHashOfTxResponseMessage.error:type_name -> protowire.RPCError + 1, // 70: protowire.EstimateNetworkHashesPerSecondResponseMessage.error:type_name -> protowire.RPCError + 1, // 71: protowire.NotifyNewBlockTemplateResponseMessage.error:type_name -> protowire.RPCError + 33, // 72: protowire.MempoolEntryByAddress.sending:type_name -> protowire.MempoolEntry + 33, // 73: protowire.MempoolEntryByAddress.receiving:type_name -> protowire.MempoolEntry + 106, // 74: protowire.GetMempoolEntriesByAddressesResponseMessage.entries:type_name -> protowire.MempoolEntryByAddress + 1, // 75: protowire.GetMempoolEntriesByAddressesResponseMessage.error:type_name -> protowire.RPCError + 1, // 76: protowire.GetCoinSupplyResponseMessage.error:type_name -> protowire.RPCError + 77, // [77:77] is the sub-list for method output_type + 77, // [77:77] is the sub-list for method input_type + 77, // [77:77] is the sub-list for extension type_name + 77, // [77:77] is the sub-list for extension extendee + 0, // [0:77] is the sub-list for field type_name } func init() { file_rpc_proto_init() } @@ -8312,7 +8430,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EstimateNetworkHashesPerSecondRequestMessage); i { + switch v := v.(*GetAcceptingBlockHashOfTxRequestMessage); i { case 0: return &v.state case 1: @@ -8324,7 +8442,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EstimateNetworkHashesPerSecondResponseMessage); i { + switch v := v.(*GetAcceptingBlockHashOfTxResponseMessage); i { case 0: return &v.state case 1: @@ -8336,7 +8454,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyNewBlockTemplateRequestMessage); i { + switch v := v.(*EstimateNetworkHashesPerSecondRequestMessage); i { case 0: return &v.state case 1: @@ -8348,7 +8466,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyNewBlockTemplateResponseMessage); i { + switch v := v.(*EstimateNetworkHashesPerSecondResponseMessage); i { case 0: return &v.state case 1: @@ -8360,7 +8478,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewBlockTemplateNotificationMessage); i { + switch v := v.(*NotifyNewBlockTemplateRequestMessage); i { case 0: return &v.state case 1: @@ -8372,7 +8490,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MempoolEntryByAddress); i { + switch v := v.(*NotifyNewBlockTemplateResponseMessage); i { case 0: return &v.state case 1: @@ -8384,7 +8502,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMempoolEntriesByAddressesRequestMessage); i { + switch v := v.(*NewBlockTemplateNotificationMessage); i { case 0: return &v.state case 1: @@ -8396,7 +8514,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMempoolEntriesByAddressesResponseMessage); i { + switch v := v.(*MempoolEntryByAddress); i { case 0: return &v.state case 1: @@ -8408,7 +8526,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCoinSupplyRequestMessage); i { + switch v := v.(*GetMempoolEntriesByAddressesRequestMessage); i { case 0: return &v.state case 1: @@ -8420,6 +8538,30 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMempoolEntriesByAddressesResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetCoinSupplyRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetCoinSupplyResponseMessage); i { case 0: return &v.state @@ -8438,7 +8580,7 @@ func file_rpc_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_rpc_proto_rawDesc, NumEnums: 1, - NumMessages: 108, + NumMessages: 110, NumExtensions: 0, NumServices: 0, }, diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto index 81919c9540..2e0a05c51e 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto @@ -666,6 +666,18 @@ message GetInfoResponseMessage{ RPCError error = 1000; } + +//Kaspad most be started with the `--txindex` flag for this Request to work. +message GetAcceptingBlockHashOfTxRequestMessage { + string txID = 1; +} + + //the accepting block is defined as the virtual chain block that first knows about the transaction. This block may change, or be ommitted and resubmitted, during virtual changes at the tip of the blockDAG +message GetAcceptingBlockHashOfTxResponseMessage { + string hash = 1; //the accepting block is defined as the virtual chain block that first knows about the transaction. This block may change, or be ommitted and resubmitted, during virtual changes at the tip of the blockDAG + RPCError error = 1000; +} + message EstimateNetworkHashesPerSecondRequestMessage{ uint32 windowSize = 1; string startHash = 2; @@ -706,7 +718,7 @@ message GetMempoolEntriesByAddressesRequestMessage{ bool filterTransactionPool = 3; } -message GetMempoolEntriesByAddressesResponseMessage{ +message GetMempoolEntriesByAddressesResponseMessage{ repeated MempoolEntryByAddress entries = 1; RPCError error = 1000; diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_block_hash_of_tx.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_block_hash_of_tx.go new file mode 100644 index 0000000000..426394780f --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_block_hash_of_tx.go @@ -0,0 +1,70 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_GetAcceptingBlockHashOfTxRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetAcceptingBlockHashOfTxRequest") + } + return x.GetAcceptingBlockHashOfTxRequest.toAppMessage() +} + +func (x *KaspadMessage_GetAcceptingBlockHashOfTxRequest) fromAppMessage(message *appmessage.GetAcceptingBlockHashOfTxRequestMessage) error { + x.GetAcceptingBlockHashOfTxRequest = &GetAcceptingBlockHashOfTxRequestMessage{ + TxID: message.TxID, + } + return nil +} + +func (x *GetAcceptingBlockHashOfTxRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetAcceptingBlockHashOfTxRequestMessage is nil") + } + return &appmessage.GetAcceptingBlockHashOfTxRequestMessage{ + TxID: x.TxID, + }, nil +} + +func (x *KaspadMessage_GetAcceptingBlockHashOfTxResponse) toAppMessage() (appmessage.Message, error) { + + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetAcceptingBlockHashOfTxResponse is nil") + } + return x.GetAcceptingBlockHashOfTxResponse.toAppMessage() +} + +func (x *KaspadMessage_GetAcceptingBlockHashOfTxResponse) fromAppMessage(message *appmessage.GetAcceptingBlockHashOfTxResponseMessage) error { + var err *RPCError + if message.Error != nil { + err = &RPCError{Message: message.Error.Message} + } + x.GetAcceptingBlockHashOfTxResponse = &GetAcceptingBlockHashOfTxResponseMessage{ + Hash: message.Hash, + + Error: err, + } + return nil +} + +func (x *GetAcceptingBlockHashOfTxResponseMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetAcceptingBlockHashOfTxResponseMessage is nil") + } + rpcErr, err := x.Error.toAppMessage() + // Error is an optional field + if err != nil && !errors.Is(err, errorNil) { + return nil, err + } + + if rpcErr != nil && x.Hash != "" { + return nil, errors.New("GetAcceptingBlockHashOfTxResponseMessage contains both an error and a response") + } + + return &appmessage.GetAcceptingBlockHashOfTxResponseMessage{ + Hash: x.Hash, + Error: rpcErr, + }, nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go b/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go index 30dd18b6ea..4d92fe79c6 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go @@ -968,6 +968,20 @@ func toRPCPayload(message appmessage.Message) (isKaspadMessage_Payload, error) { return nil, err } return payload, nil + case *appmessage.GetAcceptingBlockHashOfTxRequestMessage: + payload := new(KaspadMessage_GetAcceptingBlockHashOfTxRequest) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetAcceptingBlockHashOfTxResponseMessage: + payload := new(KaspadMessage_GetAcceptingBlockHashOfTxResponse) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil default: return nil, nil } diff --git a/infrastructure/network/rpcclient/rpc_get_accepting_block_hash_of_tx.go b/infrastructure/network/rpcclient/rpc_get_accepting_block_hash_of_tx.go new file mode 100644 index 0000000000..577764d60d --- /dev/null +++ b/infrastructure/network/rpcclient/rpc_get_accepting_block_hash_of_tx.go @@ -0,0 +1,20 @@ +package rpcclient + +import "github.com/kaspanet/kaspad/app/appmessage" + +// GetAcceptingBlockHashOfTx sends an RPC request respective to the function's name and returns the RPC server's response +func (c *RPCClient) GetAcceptingBlockHashOfTx(txID string) (*appmessage.GetAcceptingBlockHashOfTxResponseMessage, error) { + err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetAcceptingBlockHashOfTxRequest(txID)) + if err != nil { + return nil, err + } + response, err := c.route(appmessage.CmdGetAcceptingBlockHashOfTxResponseMessage).DequeueWithTimeout(c.timeout) + if err != nil { + return nil, err + } + getAcceptingBlockHashOfTxResponse := response.(*appmessage.GetAcceptingBlockHashOfTxResponseMessage) + if getAcceptingBlockHashOfTxResponse.Error != nil { + return nil, c.convertRPCError(getAcceptingBlockHashOfTxResponse.Error) + } + return getAcceptingBlockHashOfTxResponse, nil +} From e059e880c704b441afd47800241daf36075a538f Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Fri, 24 Jun 2022 11:48:13 +0200 Subject: [PATCH 09/47] include removal logic in txindex --- domain/txindex/store.go | 68 ++++++++++++++++++++++----------------- domain/txindex/txindex.go | 57 ++++++++++++++++++++++++++++---- 2 files changed, 89 insertions(+), 36 deletions(-) diff --git a/domain/txindex/store.go b/domain/txindex/store.go index 4d233b0942..2eea2a8467 100644 --- a/domain/txindex/store.go +++ b/domain/txindex/store.go @@ -14,6 +14,7 @@ var pruningPointKey = database.MakeBucket([]byte("")).Key([]byte("tx-index-prunn type txIndexStore struct { database database.Database toAdd map[externalapi.DomainTransactionID]*externalapi.DomainHash + toRemove map[externalapi.DomainTransactionID]*externalapi.DomainHash virtualParents []*externalapi.DomainHash pruningPoint *externalapi.DomainHash } @@ -60,71 +61,67 @@ func (tis *txIndexStore) deleteAll() error { func (tis *txIndexStore) add(txID externalapi.DomainTransactionID, blockHash *externalapi.DomainHash) { log.Tracef("Adding %s Txs from blockHash %s", txID.String(), blockHash.String()) + delete(tis.toRemove, txID) //adding takes precedence tis.toAdd[txID] = blockHash } +func (tis *txIndexStore) remove(txID externalapi.DomainTransactionID, blockHash *externalapi.DomainHash) { + log.Tracef("Removing %s Txs from blockHash %s", txID.String(), blockHash.String()) + if _, found := tis.toAdd[txID]; !found { //adding takes precedence + tis.toRemove[txID] = blockHash + } +} + func (tis *txIndexStore) discard() { tis.toAdd = make(map[externalapi.DomainTransactionID]*externalapi.DomainHash) tis.virtualParents = nil tis.pruningPoint = nil } -func (tis *txIndexStore) commitAndReturnRemoved() ( - removed map[externalapi.DomainTransactionID]*externalapi.DomainHash, - err error) { +func (tis *txIndexStore) commit() error { onEnd := logger.LogAndMeasureExecutionTime(log, "txIndexStore.commit") defer onEnd() dbTransaction, err := tis.database.Begin() if err != nil { - return nil, err + return err } defer dbTransaction.RollbackUnlessClosed() - removed = make(map[externalapi.DomainTransactionID]*externalapi.DomainHash) - - for txID, blockHash := range tis.toAdd { - key := tis.convertTxIDToKey(txAcceptedIndexBucket, txID) - found, err := dbTransaction.Has(key) + for toRemoveTxID := range tis.toRemove { //safer to remove first + key := tis.convertTxIDToKey(txAcceptedIndexBucket, toRemoveTxID) + err := dbTransaction.Delete(key) if err != nil { - return nil, err - } - - if found { - serializedRemovedBlockHash, err := dbTransaction.Get(key) - if err != nil { - return nil, err - } - removedBlockHash, err := externalapi.NewDomainHashFromByteSlice(serializedRemovedBlockHash) - if err != nil { - return nil, err - } - removed[txID] = removedBlockHash + return err } + } + for toAddTxID, blockHash := range tis.toAdd { + key := tis.convertTxIDToKey(txAcceptedIndexBucket, toAddTxID) dbTransaction.Put(key, blockHash.ByteSlice()) if err != nil { - return nil, err + return err } } + err = dbTransaction.Put(virtualParentsKey, serializeHashes(tis.virtualParents)) if err != nil { - return nil, err + return err } err = dbTransaction.Put(pruningPointKey, tis.pruningPoint.ByteSlice()) if err != nil { - return nil, err + return err } err = dbTransaction.Commit() if err != nil { - return nil, err + return err } tis.discard() - return removed, nil + return nil } func (tis *txIndexStore) updateAndCommitVirtualParentsWithoutTransaction(virtualParents []*externalapi.DomainHash) error { @@ -142,6 +139,14 @@ func (tis *txIndexStore) updateVirtualParents(virtualParents []*externalapi.Doma } func (tis *txIndexStore) CommitWithoutTransaction() error { + for txID := range tis.toRemove { //safer to remove first + key := tis.convertTxIDToKey(txAcceptedIndexBucket, txID) + err := tis.database.Delete(key) + if err != nil { + return err + } + } + for txID, blockHash := range tis.toAdd { key := tis.convertTxIDToKey(txAcceptedIndexBucket, txID) err := tis.database.Put(key, blockHash.ByteSlice()) @@ -185,18 +190,23 @@ func (tis *txIndexStore) convertTxIDToKey(bucket *database.Bucket, txID external func (tis *txIndexStore) stagedData() ( toAdd map[externalapi.DomainTransactionID]*externalapi.DomainHash, + toRemove map[externalapi.DomainTransactionID]*externalapi.DomainHash, virtualParents []*externalapi.DomainHash, pruningPoint *externalapi.DomainHash) { toAddClone := make(map[externalapi.DomainTransactionID]*externalapi.DomainHash) + toRemoveClone := make(map[externalapi.DomainTransactionID]*externalapi.DomainHash) for txID, blockHash := range tis.toAdd { toAddClone[txID] = blockHash } - return toAddClone, tis.virtualParents, tis.pruningPoint + for txID, blockHash := range tis.toRemove { + toRemoveClone[txID] = blockHash + } + return toAddClone, toRemoveClone, tis.virtualParents, tis.pruningPoint } func (tis *txIndexStore) isAnythingStaged() bool { - return len(tis.toAdd) > 0 + return len(tis.toAdd) > 0 || len(tis.toRemove) > 0 } func (tis *txIndexStore) getTxAcceptingBlockHash(txID *externalapi.DomainTransactionID) (blockHash *externalapi.DomainHash, found bool, err error) { diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index ae4fcc6392..9d913403f8 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -70,7 +70,15 @@ func (ti *TXIndex) Reset() error { return err } + ti.removeTXIDs(selectedParentChainChanges, 1000) + if err != nil { + return err + } + ti.addTXIDs(selectedParentChainChanges, 1000) + if err != nil { + return err + } err = ti.store.CommitWithoutTransaction() if err != nil { @@ -124,25 +132,29 @@ func (ti *TXIndex) Update(virtualChangeSet *externalapi.VirtualChangeSet) (*TXAc log.Tracef("Updating TX index with VirtualSelectedParentChainChanges: %+v", virtualChangeSet.VirtualSelectedParentChainChanges) - err := ti.addTXIDs(virtualChangeSet.VirtualSelectedParentChainChanges, 1000) + err := ti.removeTXIDs(virtualChangeSet.VirtualSelectedParentChainChanges, 1000) + if err != nil { + return nil, err + } + + err = ti.addTXIDs(virtualChangeSet.VirtualSelectedParentChainChanges, 1000) if err != nil { return nil, err } ti.store.updateVirtualParents(virtualChangeSet.VirtualParents) - added, _, _ := ti.store.stagedData() + added, removed, _, _ := ti.store.stagedData() txIndexChanges := &TXAcceptanceChange{ - Added: added, + Added: added, + Removed: removed, } - removed, err := ti.store.commitAndReturnRemoved() + err = ti.store.commit() if err != nil { return nil, err } - txIndexChanges.Removed = removed - log.Tracef("TX index updated with the TXAcceptanceChange: %+v", txIndexChanges) return txIndexChanges, nil } @@ -178,6 +190,37 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai return nil } +func (ti *TXIndex) removeTXIDs(selectedParentChainChanges *externalapi.SelectedChainPath, chunkSize int) error { + position := 0 + for position < len(selectedParentChainChanges.Removed) { + var chainBlocksChunk []*externalapi.DomainHash + + if position+chunkSize > len(selectedParentChainChanges.Removed) { + chainBlocksChunk = selectedParentChainChanges.Removed[position:] + } else { + chainBlocksChunk = selectedParentChainChanges.Removed[position : position+chunkSize] + } + // We use chunks in order to avoid blocking consensus for too long + // note: this might not be needed here, but unsure how kaspad handles pruning / when reset might be called. + chainBlocksAcceptanceData, err := ti.domain.Consensus().GetBlocksAcceptanceData(chainBlocksChunk) + if err != nil { + return err + } + for i, removedChainBlock := range chainBlocksChunk { + chainBlockAcceptanceData := chainBlocksAcceptanceData[i] + for _, blockAcceptanceData := range chainBlockAcceptanceData { + for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { + if transactionAcceptanceData.IsAccepted { + ti.store.remove(*transactionAcceptanceData.Transaction.ID, removedChainBlock) + } + } + } + } + position += chunkSize + } + return nil +} + // TXAcceptingBlockHash returns the accepting block hash for for the given txID func (ti *TXIndex) TXAcceptingBlockHash(txID *externalapi.DomainTransactionID) (blockHash *externalapi.DomainHash, found bool, err error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlockHash") @@ -199,4 +242,4 @@ func (ti *TXIndex) TXAcceptingBlockHash(txID *externalapi.DomainTransactionID) ( //TO DO: Get Including Block from AcceptingBlock -//TO DO: Get Confirmations +//TO DO: Get Number of confirmations From b4754d4b23c56c29cb49c6e3abdb47a71fdb18bc Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Fri, 24 Jun 2022 13:26:16 +0200 Subject: [PATCH 10/47] fix cases of nil pointers... --- domain/txindex/model.go | 23 +++++++++++++++++++++++ domain/txindex/store.go | 4 ++-- domain/txindex/txindex.go | 7 +++++-- testing/integration/setup_test.go | 31 +++++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+), 4 deletions(-) diff --git a/domain/txindex/model.go b/domain/txindex/model.go index 7ca5f86888..14f2c35d09 100644 --- a/domain/txindex/model.go +++ b/domain/txindex/model.go @@ -1,6 +1,8 @@ package txindex import ( + "encoding/hex" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" ) @@ -10,3 +12,24 @@ type TXAcceptanceChange struct { Added map[externalapi.DomainTransactionID]*externalapi.DomainHash Removed map[externalapi.DomainTransactionID]*externalapi.DomainHash } + +// ConvertDomainHashToString converts the given DomainHash to a string +func ConvertDomainHashToString(blockHash *externalapi.DomainHash) string { + return hex.EncodeToString(blockHash.ByteSlice()) +} + +// ConvertStringDomainHashToDomainHash converts the given string to a domainHash +func ConvertStringToDomainHash(stringDomainHash string) (*externalapi.DomainHash, error) { + return externalapi.NewDomainHashFromString(stringDomainHash) +} + +// ConvertDomainHashToString converts the given DomainHash to a string +func ConvertTXIDToString(txID *externalapi.DomainTransactionID) string { + return hex.EncodeToString(txID.ByteSlice()) +} + +// ConvertStringDomainHashToDomainHash converts the given string to a domainHash +func ConvertStringTXID(stringDomainTransactionID string) (*externalapi.DomainTransactionID, error) { + return externalapi.NewDomainTransactionIDFromString(stringDomainTransactionID) +} + diff --git a/domain/txindex/store.go b/domain/txindex/store.go index 2eea2a8467..0c9c02a6eb 100644 --- a/domain/txindex/store.go +++ b/domain/txindex/store.go @@ -60,13 +60,13 @@ func (tis *txIndexStore) deleteAll() error { } func (tis *txIndexStore) add(txID externalapi.DomainTransactionID, blockHash *externalapi.DomainHash) { - log.Tracef("Adding %s Txs from blockHash %s", txID.String(), blockHash.String()) + log.Tracef("Adding %s Txs from blockHash %s", txID.String(), ConvertDomainHashToString(blockHash)) delete(tis.toRemove, txID) //adding takes precedence tis.toAdd[txID] = blockHash } func (tis *txIndexStore) remove(txID externalapi.DomainTransactionID, blockHash *externalapi.DomainHash) { - log.Tracef("Removing %s Txs from blockHash %s", txID.String(), blockHash.String()) + log.Tracef("Removing %s Txs from blockHash %s", txID.String(), ConvertDomainHashToString(blockHash)) if _, found := tis.toAdd[txID]; !found { //adding takes precedence tis.toRemove[txID] = blockHash } diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 9d913403f8..ac76028ed7 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -98,6 +98,9 @@ func (ti *TXIndex) isSynced() (bool, error) { txIndexVirtualParents, err := ti.store.getVirtualParents() if err != nil { + if database.IsNotFoundError(err) { + return false, nil + } return false, err } @@ -179,7 +182,7 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai chainBlockAcceptanceData := chainBlocksAcceptanceData[i] for _, blockAcceptanceData := range chainBlockAcceptanceData { for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { - if transactionAcceptanceData.IsAccepted { + if transactionAcceptanceData.IsAccepted && transactionAcceptanceData.Transaction.ID != nil { ti.store.add(*transactionAcceptanceData.Transaction.ID, addedChainBlock) } } @@ -210,7 +213,7 @@ func (ti *TXIndex) removeTXIDs(selectedParentChainChanges *externalapi.SelectedC chainBlockAcceptanceData := chainBlocksAcceptanceData[i] for _, blockAcceptanceData := range chainBlockAcceptanceData { for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { - if transactionAcceptanceData.IsAccepted { + if transactionAcceptanceData.IsAccepted && transactionAcceptanceData.Transaction.ID != nil{ ti.store.remove(*transactionAcceptanceData.Transaction.ID, removedChainBlock) } } diff --git a/testing/integration/setup_test.go b/testing/integration/setup_test.go index 4b28234847..bf22729b32 100644 --- a/testing/integration/setup_test.go +++ b/testing/integration/setup_test.go @@ -24,6 +24,7 @@ type appHarness struct { config *config.Config database database.Database utxoIndex bool + txIndex bool overrideDAGParams *dagconfig.Params } @@ -33,6 +34,7 @@ type harnessParams struct { miningAddress string miningAddressPrivateKey string utxoIndex bool + txIndex bool overrideDAGParams *dagconfig.Params protocolVersion uint32 } @@ -45,6 +47,7 @@ func setupHarness(t *testing.T, params *harnessParams) (harness *appHarness, tea miningAddress: params.miningAddress, miningAddressPrivateKey: params.miningAddressPrivateKey, utxoIndex: params.utxoIndex, + txIndex: params.txIndex, overrideDAGParams: params.overrideDAGParams, } @@ -100,6 +103,34 @@ func standardSetup(t *testing.T) (appHarness1, appHarness2, appHarness3 *appHarn return harnesses[0], harnesses[1], harnesses[2], teardown } +// standardSetupWithTxindex creates a standard setup of 3 appHarnesses, with txindexes. +func standardSetupWithTxindex(t *testing.T) (appHarness1, appHarness2, appHarness3 *appHarness, teardownFunc func()) { + harnesses, teardown := setupHarnesses(t, []*harnessParams{ + { + p2pAddress: p2pAddress1, + rpcAddress: rpcAddress1, + miningAddress: miningAddress1, + miningAddressPrivateKey: miningAddress1PrivateKey, + txIndex: true, + }, + { + p2pAddress: p2pAddress2, + rpcAddress: rpcAddress2, + miningAddress: miningAddress2, + miningAddressPrivateKey: miningAddress2PrivateKey, + txIndex: true, + }, { + p2pAddress: p2pAddress3, + rpcAddress: rpcAddress3, + miningAddress: miningAddress3, + miningAddressPrivateKey: miningAddress3PrivateKey, + + }, + }) + + return harnesses[0], harnesses[1], harnesses[2], teardown +} + func setRPCClient(t *testing.T, harness *appHarness) { var err error harness.rpcClient, err = newTestRPCClient(harness.rpcAddress) From 560a1a99b193e8bfbe2b9442eef5df1df5925cf5 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Fri, 24 Jun 2022 17:18:49 +0200 Subject: [PATCH 11/47] linting and deal with pruning point commitment --- domain/txindex/model.go | 7 +++---- domain/txindex/store.go | 35 +++++++++++++++++------------------ domain/txindex/txindex.go | 22 ++++++++++++++-------- 3 files changed, 34 insertions(+), 30 deletions(-) diff --git a/domain/txindex/model.go b/domain/txindex/model.go index 14f2c35d09..f662b23743 100644 --- a/domain/txindex/model.go +++ b/domain/txindex/model.go @@ -18,18 +18,17 @@ func ConvertDomainHashToString(blockHash *externalapi.DomainHash) string { return hex.EncodeToString(blockHash.ByteSlice()) } -// ConvertStringDomainHashToDomainHash converts the given string to a domainHash +// ConvertStringToDomainHash converts the given string to a domainHash func ConvertStringToDomainHash(stringDomainHash string) (*externalapi.DomainHash, error) { return externalapi.NewDomainHashFromString(stringDomainHash) } -// ConvertDomainHashToString converts the given DomainHash to a string +// ConvertTXIDToString converts the given DomainHash to a string func ConvertTXIDToString(txID *externalapi.DomainTransactionID) string { return hex.EncodeToString(txID.ByteSlice()) } -// ConvertStringDomainHashToDomainHash converts the given string to a domainHash +// ConvertStringTXID converts the given string to a domainHash func ConvertStringTXID(stringDomainTransactionID string) (*externalapi.DomainTransactionID, error) { return externalapi.NewDomainTransactionIDFromString(stringDomainTransactionID) } - diff --git a/domain/txindex/store.go b/domain/txindex/store.go index 0c9c02a6eb..dd71d1347f 100644 --- a/domain/txindex/store.go +++ b/domain/txindex/store.go @@ -23,6 +23,7 @@ func newTXIndexStore(database database.Database) *txIndexStore { return &txIndexStore{ database: database, toAdd: make(map[externalapi.DomainTransactionID]*externalapi.DomainHash), + toRemove: make(map[externalapi.DomainTransactionID]*externalapi.DomainHash), virtualParents: nil, pruningPoint: nil, } @@ -72,10 +73,10 @@ func (tis *txIndexStore) remove(txID externalapi.DomainTransactionID, blockHash } } -func (tis *txIndexStore) discard() { +func (tis *txIndexStore) discardAllButPruningPoint() { tis.toAdd = make(map[externalapi.DomainTransactionID]*externalapi.DomainHash) + tis.toRemove = make(map[externalapi.DomainTransactionID]*externalapi.DomainHash) tis.virtualParents = nil - tis.pruningPoint = nil } func (tis *txIndexStore) commit() error { @@ -109,47 +110,45 @@ func (tis *txIndexStore) commit() error { if err != nil { return err } - err = dbTransaction.Put(pruningPointKey, tis.pruningPoint.ByteSlice()) - if err != nil { - return err - } err = dbTransaction.Commit() if err != nil { return err } - tis.discard() + tis.discardAllButPruningPoint() return nil } -func (tis *txIndexStore) updateAndCommitVirtualParentsWithoutTransaction(virtualParents []*externalapi.DomainHash) error { +func (tis *txIndexStore) commitVirtualParentsWithoutTransaction(virtualParents []*externalapi.DomainHash) error { serializeParentHashes := serializeHashes(virtualParents) return tis.database.Put(virtualParentsKey, serializeParentHashes) } -func (tis *txIndexStore) updateAndCommitPruningPointWithoutTransaction(pruningPoint *externalapi.DomainHash) error { - return tis.database.Put(pruningPointKey, pruningPoint.ByteSlice()) - -} - func (tis *txIndexStore) updateVirtualParents(virtualParents []*externalapi.DomainHash) { tis.virtualParents = virtualParents } -func (tis *txIndexStore) CommitWithoutTransaction() error { - for txID := range tis.toRemove { //safer to remove first +func (tis *txIndexStore) updateAndCommitPruningPointWithoutTransaction(pruningPoint *externalapi.DomainHash) error { + tis.pruningPoint = pruningPoint + + return tis.database.Put(pruningPointKey, pruningPoint.ByteSlice()) +} + +func (tis *txIndexStore) commitTxIDsWithoutTransaction() error { + for txID, blockHash := range tis.toAdd { + delete(tis.toRemove, txID) //adding takes precedence key := tis.convertTxIDToKey(txAcceptedIndexBucket, txID) - err := tis.database.Delete(key) + err := tis.database.Put(key, blockHash.ByteSlice()) if err != nil { return err } } - for txID, blockHash := range tis.toAdd { + for txID := range tis.toRemove { //safer to remove first key := tis.convertTxIDToKey(txAcceptedIndexBucket, txID) - err := tis.database.Put(key, blockHash.ByteSlice()) + err := tis.database.Delete(key) if err != nil { return err } diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index ac76028ed7..90a691b314 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -70,28 +70,34 @@ func (ti *TXIndex) Reset() error { return err } - ti.removeTXIDs(selectedParentChainChanges, 1000) + ti.removeTXIDs(selectedParentChainChanges, len(selectedParentChainChanges.Removed)) if err != nil { return err } - ti.addTXIDs(selectedParentChainChanges, 1000) + ti.addTXIDs(selectedParentChainChanges, len(selectedParentChainChanges.Added)) if err != nil { return err } - err = ti.store.CommitWithoutTransaction() + err = ti.store.commitTxIDsWithoutTransaction() if err != nil { return err } - err = ti.store.updateAndCommitPruningPointWithoutTransaction(pruningPoint) + ti.store.updateAndCommitPruningPointWithoutTransaction(pruningPoint) if err != nil { return err } - return ti.store.updateAndCommitVirtualParentsWithoutTransaction(virtualInfo.ParentHashes) + ti.store.commitVirtualParentsWithoutTransaction(virtualInfo.ParentHashes) + if err != nil { + return err + } + ti.store.discardAllButPruningPoint() + + return nil } func (ti *TXIndex) isSynced() (bool, error) { @@ -145,14 +151,14 @@ func (ti *TXIndex) Update(virtualChangeSet *externalapi.VirtualChangeSet) (*TXAc return nil, err } - ti.store.updateVirtualParents(virtualChangeSet.VirtualParents) - added, removed, _, _ := ti.store.stagedData() txIndexChanges := &TXAcceptanceChange{ Added: added, Removed: removed, } + ti.store.updateVirtualParents(virtualChangeSet.VirtualParents) + err = ti.store.commit() if err != nil { return nil, err @@ -213,7 +219,7 @@ func (ti *TXIndex) removeTXIDs(selectedParentChainChanges *externalapi.SelectedC chainBlockAcceptanceData := chainBlocksAcceptanceData[i] for _, blockAcceptanceData := range chainBlockAcceptanceData { for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { - if transactionAcceptanceData.IsAccepted && transactionAcceptanceData.Transaction.ID != nil{ + if transactionAcceptanceData.IsAccepted && transactionAcceptanceData.Transaction.ID != nil { ti.store.remove(*transactionAcceptanceData.Transaction.ID, removedChainBlock) } } From 09b2c53b3fb555b3e1dca03be8baf7499618c2d1 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Fri, 24 Jun 2022 21:11:38 +0200 Subject: [PATCH 12/47] fix not found sending err, add to kaspactl --- cmd/kaspactl/commands.go | 2 ++ domain/txindex/store.go | 2 +- domain/txindex/txindex.go | 20 ++++++++++++++------ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/cmd/kaspactl/commands.go b/cmd/kaspactl/commands.go index d56d1b886e..9b68ad551e 100644 --- a/cmd/kaspactl/commands.go +++ b/cmd/kaspactl/commands.go @@ -15,6 +15,8 @@ var commandTypes = []reflect.Type{ reflect.TypeOf(protowire.KaspadMessage_GetCurrentNetworkRequest{}), reflect.TypeOf(protowire.KaspadMessage_GetInfoRequest{}), + reflect.TypeOf(protowire.KaspadMessage_GetAcceptingBlockHashOfTxRequest{}), + reflect.TypeOf(protowire.KaspadMessage_GetBlockRequest{}), reflect.TypeOf(protowire.KaspadMessage_GetBlocksRequest{}), reflect.TypeOf(protowire.KaspadMessage_GetHeadersRequest{}), diff --git a/domain/txindex/store.go b/domain/txindex/store.go index dd71d1347f..257026d3f9 100644 --- a/domain/txindex/store.go +++ b/domain/txindex/store.go @@ -217,7 +217,7 @@ func (tis *txIndexStore) getTxAcceptingBlockHash(txID *externalapi.DomainTransac key := tis.convertTxIDToKey(txAcceptedIndexBucket, *txID) serializedAcceptingBlockHash, err := tis.database.Get(key) if err != nil { - if err == database.ErrNotFound { + if database.IsNotFoundError(err) { return nil, false, nil } return nil, false, err diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 90a691b314..98c83bb010 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -5,6 +5,7 @@ import ( "github.com/kaspanet/kaspad/domain" "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing" "github.com/kaspanet/kaspad/infrastructure/db/database" "github.com/kaspanet/kaspad/infrastructure/logger" ) @@ -139,7 +140,7 @@ func (ti *TXIndex) Update(virtualChangeSet *externalapi.VirtualChangeSet) (*TXAc ti.mutex.Lock() defer ti.mutex.Unlock() - log.Tracef("Updating TX index with VirtualSelectedParentChainChanges: %+v", virtualChangeSet.VirtualSelectedParentChainChanges) + log.Info("Updating TX index with VirtualSelectedParentChainChanges: %+v", virtualChangeSet.VirtualSelectedParentChainChanges) err := ti.removeTXIDs(virtualChangeSet.VirtualSelectedParentChainChanges, 1000) if err != nil { @@ -164,7 +165,6 @@ func (ti *TXIndex) Update(virtualChangeSet *externalapi.VirtualChangeSet) (*TXAc return nil, err } - log.Tracef("TX index updated with the TXAcceptanceChange: %+v", txIndexChanges) return txIndexChanges, nil } @@ -188,8 +188,12 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai chainBlockAcceptanceData := chainBlocksAcceptanceData[i] for _, blockAcceptanceData := range chainBlockAcceptanceData { for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { - if transactionAcceptanceData.IsAccepted && transactionAcceptanceData.Transaction.ID != nil { - ti.store.add(*transactionAcceptanceData.Transaction.ID, addedChainBlock) + log.Info("TX index Adding: ", len(blockAcceptanceData.TransactionAcceptanceData)) + if transactionAcceptanceData.IsAccepted { + ti.store.add( + *consensushashing.TransactionID(transactionAcceptanceData.Transaction), + addedChainBlock, + ) } } } @@ -218,9 +222,13 @@ func (ti *TXIndex) removeTXIDs(selectedParentChainChanges *externalapi.SelectedC for i, removedChainBlock := range chainBlocksChunk { chainBlockAcceptanceData := chainBlocksAcceptanceData[i] for _, blockAcceptanceData := range chainBlockAcceptanceData { + log.Info("TX index Removing: ", len(blockAcceptanceData.TransactionAcceptanceData)) for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { - if transactionAcceptanceData.IsAccepted && transactionAcceptanceData.Transaction.ID != nil { - ti.store.remove(*transactionAcceptanceData.Transaction.ID, removedChainBlock) + if transactionAcceptanceData.IsAccepted { + ti.store.remove( + *consensushashing.TransactionID(transactionAcceptanceData.Transaction), + removedChainBlock, + ) } } } From 600f39ffc65e4cff92d3c50f2270bb7bba80e1da Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Fri, 24 Jun 2022 22:08:24 +0200 Subject: [PATCH 13/47] fix pruning notification --- .../get_accepting_block_hash_of_tx.go | 1 - domain/consensus/consensus.go | 8 +++-- .../pruningmanager/pruningmanager.go | 9 ++--- domain/txindex/store.go | 13 +++---- domain/txindex/txindex.go | 10 +++--- testing/integration/setup_test.go | 34 ++----------------- 6 files changed, 26 insertions(+), 49 deletions(-) diff --git a/app/rpc/rpchandlers/get_accepting_block_hash_of_tx.go b/app/rpc/rpchandlers/get_accepting_block_hash_of_tx.go index c99ae135fa..3c6349386f 100644 --- a/app/rpc/rpchandlers/get_accepting_block_hash_of_tx.go +++ b/app/rpc/rpchandlers/get_accepting_block_hash_of_tx.go @@ -44,7 +44,6 @@ func HandleGetAcceptingBlockHashOfTx(context *rpccontext.Context, _ *router.Rout errorMessage := &appmessage.GetAcceptingBlockHashOfTxResponseMessage{} errorMessage.Error = appmessage.RPCErrorf("Could not find accepting block hash in the txindex database for txID: %s", domainTxID.String()) return errorMessage, nil - } response := appmessage.NewGetAcceptingBlockHashOfTxResponse(acceptingBlockHash.String()) diff --git a/domain/consensus/consensus.go b/domain/consensus/consensus.go index a82b4afbb2..e7e03f5ff5 100644 --- a/domain/consensus/consensus.go +++ b/domain/consensus/consensus.go @@ -941,9 +941,11 @@ func (s *consensus) resolveVirtualNoLock(maxBlocksToResolve uint64) (bool, error return false, err } - err = s.sendPruningPointChangedEvent(pruningPointChange) - if err != nil { - return false, err + if pruningPointChange != nil { + err = s.sendPruningPointChangedEvent(pruningPointChange) + if err != nil { + return false, err + } } err = s.sendVirtualChangedEvent(virtualChangeSet, true) diff --git a/domain/consensus/processes/pruningmanager/pruningmanager.go b/domain/consensus/processes/pruningmanager/pruningmanager.go index 7b68f10bc6..46b033ae64 100644 --- a/domain/consensus/processes/pruningmanager/pruningmanager.go +++ b/domain/consensus/processes/pruningmanager/pruningmanager.go @@ -190,12 +190,13 @@ func (pm *pruningManager) UpdatePruningPointByVirtualAndReturnChange(stagingArea if err != nil { return nil, err } + return &externalapi.PruningPointChange{ + OldPruningPoint: currentPruningPoint, + NewPruningPoint: newPruningPoint, + }, nil } - return &externalapi.PruningPointChange{ - OldPruningPoint: currentPruningPoint, - NewPruningPoint: newPruningPoint, - }, err + return nil, nil } type blockIteratorFromOneBlock struct { diff --git a/domain/txindex/store.go b/domain/txindex/store.go index 257026d3f9..269a812aec 100644 --- a/domain/txindex/store.go +++ b/domain/txindex/store.go @@ -90,17 +90,18 @@ func (tis *txIndexStore) commit() error { defer dbTransaction.RollbackUnlessClosed() - for toRemoveTxID := range tis.toRemove { //safer to remove first - key := tis.convertTxIDToKey(txAcceptedIndexBucket, toRemoveTxID) - err := dbTransaction.Delete(key) + for toAddTxID, blockHash := range tis.toAdd { + delete(tis.toRemove, toAddTxID) //safeguard + key := tis.convertTxIDToKey(txAcceptedIndexBucket, toAddTxID) + dbTransaction.Put(key, blockHash.ByteSlice()) if err != nil { return err } } - for toAddTxID, blockHash := range tis.toAdd { - key := tis.convertTxIDToKey(txAcceptedIndexBucket, toAddTxID) - dbTransaction.Put(key, blockHash.ByteSlice()) + for toRemoveTxID := range tis.toRemove { + key := tis.convertTxIDToKey(txAcceptedIndexBucket, toRemoveTxID) + err := dbTransaction.Delete(key) if err != nil { return err } diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 98c83bb010..446d2fdabf 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -49,6 +49,8 @@ func (ti *TXIndex) Reset() error { ti.mutex.Lock() defer ti.mutex.Unlock() + log.Info("Reseting TX Index") + err := ti.store.deleteAll() if err != nil { return err @@ -188,7 +190,7 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai chainBlockAcceptanceData := chainBlocksAcceptanceData[i] for _, blockAcceptanceData := range chainBlockAcceptanceData { for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { - log.Info("TX index Adding: ", len(blockAcceptanceData.TransactionAcceptanceData)) + log.Tracef("TX index Adding: %d transactions", len(blockAcceptanceData.TransactionAcceptanceData)) if transactionAcceptanceData.IsAccepted { ti.store.add( *consensushashing.TransactionID(transactionAcceptanceData.Transaction), @@ -222,12 +224,12 @@ func (ti *TXIndex) removeTXIDs(selectedParentChainChanges *externalapi.SelectedC for i, removedChainBlock := range chainBlocksChunk { chainBlockAcceptanceData := chainBlocksAcceptanceData[i] for _, blockAcceptanceData := range chainBlockAcceptanceData { - log.Info("TX index Removing: ", len(blockAcceptanceData.TransactionAcceptanceData)) + log.Tracef("TX index Removing: %d transactions", len(blockAcceptanceData.TransactionAcceptanceData)) for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { if transactionAcceptanceData.IsAccepted { ti.store.remove( - *consensushashing.TransactionID(transactionAcceptanceData.Transaction), - removedChainBlock, + *consensushashing.TransactionID(transactionAcceptanceData.Transaction), + removedChainBlock, ) } } diff --git a/testing/integration/setup_test.go b/testing/integration/setup_test.go index bf22729b32..10e7c9b053 100644 --- a/testing/integration/setup_test.go +++ b/testing/integration/setup_test.go @@ -24,7 +24,7 @@ type appHarness struct { config *config.Config database database.Database utxoIndex bool - txIndex bool + txIndex bool overrideDAGParams *dagconfig.Params } @@ -34,7 +34,7 @@ type harnessParams struct { miningAddress string miningAddressPrivateKey string utxoIndex bool - txIndex bool + txIndex bool overrideDAGParams *dagconfig.Params protocolVersion uint32 } @@ -47,7 +47,7 @@ func setupHarness(t *testing.T, params *harnessParams) (harness *appHarness, tea miningAddress: params.miningAddress, miningAddressPrivateKey: params.miningAddressPrivateKey, utxoIndex: params.utxoIndex, - txIndex: params.txIndex, + txIndex: params.txIndex, overrideDAGParams: params.overrideDAGParams, } @@ -103,34 +103,6 @@ func standardSetup(t *testing.T) (appHarness1, appHarness2, appHarness3 *appHarn return harnesses[0], harnesses[1], harnesses[2], teardown } -// standardSetupWithTxindex creates a standard setup of 3 appHarnesses, with txindexes. -func standardSetupWithTxindex(t *testing.T) (appHarness1, appHarness2, appHarness3 *appHarness, teardownFunc func()) { - harnesses, teardown := setupHarnesses(t, []*harnessParams{ - { - p2pAddress: p2pAddress1, - rpcAddress: rpcAddress1, - miningAddress: miningAddress1, - miningAddressPrivateKey: miningAddress1PrivateKey, - txIndex: true, - }, - { - p2pAddress: p2pAddress2, - rpcAddress: rpcAddress2, - miningAddress: miningAddress2, - miningAddressPrivateKey: miningAddress2PrivateKey, - txIndex: true, - }, { - p2pAddress: p2pAddress3, - rpcAddress: rpcAddress3, - miningAddress: miningAddress3, - miningAddressPrivateKey: miningAddress3PrivateKey, - - }, - }) - - return harnesses[0], harnesses[1], harnesses[2], teardown -} - func setRPCClient(t *testing.T, harness *appHarness) { var err error harness.rpcClient, err = newTestRPCClient(harness.rpcAddress) From 8bacd2e7bf9986b5565fe7cf6604ede4b67742ba Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Fri, 24 Jun 2022 22:10:15 +0200 Subject: [PATCH 14/47] logger to tracef --- domain/txindex/txindex.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 446d2fdabf..4182157259 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -49,7 +49,7 @@ func (ti *TXIndex) Reset() error { ti.mutex.Lock() defer ti.mutex.Unlock() - log.Info("Reseting TX Index") + log.Tracef("Reseting TX Index") err := ti.store.deleteAll() if err != nil { @@ -142,7 +142,7 @@ func (ti *TXIndex) Update(virtualChangeSet *externalapi.VirtualChangeSet) (*TXAc ti.mutex.Lock() defer ti.mutex.Unlock() - log.Info("Updating TX index with VirtualSelectedParentChainChanges: %+v", virtualChangeSet.VirtualSelectedParentChainChanges) + log.Tracef("Updating TX index with VirtualSelectedParentChainChanges: %+v", virtualChangeSet.VirtualSelectedParentChainChanges) err := ti.removeTXIDs(virtualChangeSet.VirtualSelectedParentChainChanges, 1000) if err != nil { From ca01c1f6d6f1eae0aa69b95eeadccb19eb67e738 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Mon, 29 Aug 2022 18:43:50 +0200 Subject: [PATCH 15/47] fic virtual change nil --- domain/consensus/consensus.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domain/consensus/consensus.go b/domain/consensus/consensus.go index 6de2ced196..5ed266ce14 100644 --- a/domain/consensus/consensus.go +++ b/domain/consensus/consensus.go @@ -296,7 +296,7 @@ func (s *consensus) sendBlockAddedEvent(block *externalapi.DomainBlock, blockSta } func (s *consensus) sendVirtualChangedEvent(virtualChangeSet *externalapi.VirtualChangeSet, wasVirtualUpdated bool) error { - if !wasVirtualUpdated || s.consensusEventsChan == nil { + if !wasVirtualUpdated || s.consensusEventsChan == nil || virtualChangeSet == nil { return nil } From f7fcffe6aaf4fd5c7b839ad5d5e3ac0c0bcca8a7 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Tue, 13 Sep 2022 22:25:50 +0200 Subject: [PATCH 16/47] save changes --- domain/consensus/consensus.go | 16 ++ .../consensus/model/externalapi/consensus.go | 1 + domain/txindex/model.go | 6 + domain/txindex/store.go | 29 ++++ domain/txindex/txindex.go | 154 +++++++++++++++++- 5 files changed, 204 insertions(+), 2 deletions(-) diff --git a/domain/consensus/consensus.go b/domain/consensus/consensus.go index 5ed266ce14..afbe727c0b 100644 --- a/domain/consensus/consensus.go +++ b/domain/consensus/consensus.go @@ -395,6 +395,22 @@ func (s *consensus) GetBlock(blockHash *externalapi.DomainHash) (*externalapi.Do return block, nil } +func (s *consensus) GetBlocks(blockHashes []*externalapi.DomainHash) ([]*externalapi.DomainBlock, error) { + s.lock.Lock() + defer s.lock.Unlock() + + stagingArea := model.NewStagingArea() + + blocks, err := s.blockStore.Blocks(s.databaseContext, stagingArea, blockHashes) + if err != nil { + if errors.Is(err, database.ErrNotFound) { + return nil, errors.Wrapf(err, "Quried block %s does not exist") + } + return nil, err + } + return blocks, nil +} + func (s *consensus) GetBlockEvenIfHeaderOnly(blockHash *externalapi.DomainHash) (*externalapi.DomainBlock, error) { s.lock.Lock() defer s.lock.Unlock() diff --git a/domain/consensus/model/externalapi/consensus.go b/domain/consensus/model/externalapi/consensus.go index d7aadc2036..7debd6f42e 100644 --- a/domain/consensus/model/externalapi/consensus.go +++ b/domain/consensus/model/externalapi/consensus.go @@ -14,6 +14,7 @@ type Consensus interface { ApplyPruningPointProof(pruningPointProof *PruningPointProof) error GetBlock(blockHash *DomainHash) (*DomainBlock, error) + GetBlocks(blockHashes []*DomainHash) (*DomainBlock, error) GetBlockEvenIfHeaderOnly(blockHash *DomainHash) (*DomainBlock, error) GetBlockHeader(blockHash *DomainHash) (BlockHeader, error) GetBlockInfo(blockHash *DomainHash) (*BlockInfo, error) diff --git a/domain/txindex/model.go b/domain/txindex/model.go index f662b23743..ca0dc5c36c 100644 --- a/domain/txindex/model.go +++ b/domain/txindex/model.go @@ -13,6 +13,12 @@ type TXAcceptanceChange struct { Removed map[externalapi.DomainTransactionID]*externalapi.DomainHash } +//TxIDsToBlocks is a map of TxIDs to corrospnding blockHashes +type TxIDsToBlockHashes map[*externalapi.DomainTransactionID]*externalapi.DomainHash + +//TxIDsToBlocks is a map of TxIDs to corrospnding blocks +type TxIDsToBlocks map[*externalapi.DomainTransactionID]*externalapi.DomainBlock + // ConvertDomainHashToString converts the given DomainHash to a string func ConvertDomainHashToString(blockHash *externalapi.DomainHash) string { return hex.EncodeToString(blockHash.ByteSlice()) diff --git a/domain/txindex/store.go b/domain/txindex/store.go index 269a812aec..61b7f66ec8 100644 --- a/domain/txindex/store.go +++ b/domain/txindex/store.go @@ -231,3 +231,32 @@ func (tis *txIndexStore) getTxAcceptingBlockHash(txID *externalapi.DomainTransac return acceptingBlockHash, true, nil } + +func (tis *txIndexStore) getTxAcceptingBlockHashes(txIDs []*externalapi.DomainTransactionID) (acceptingBlockHashes TxIDsToBlockHashes, found bool, err error) { + + if tis.isAnythingStaged() { + return nil, false, errors.Errorf("cannot get TX accepting Block hash while staging isn't empty") + } + + keys := make([]*database.Key, len(txIDs)) + + acceptingBlockHashes = make(TxIDsToBlockHashes) + + for i, key := range keys { + key = tis.convertTxIDToKey(txAcceptedIndexBucket, *txIDs[i]) + serializedAcceptingBlockHash, err := tis.database.Get(key) + if err != nil { + if database.IsNotFoundError(err) { + return nil, false, nil + } + return nil, false, err + } + acceptingBlockHash, err := externalapi.NewDomainHashFromByteSlice(serializedAcceptingBlockHash) + if err != nil { + return nil, false, err + } + acceptingBlockHashes[txIDs[i]] = acceptingBlockHash + } + + return acceptingBlockHashes, true, nil +} diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 4182157259..207506749b 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -1,10 +1,13 @@ package txindex import ( + "errors" + "fmt" "sync" "github.com/kaspanet/kaspad/domain" "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/domain/consensus/processes/dagtraversalmanager" "github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing" "github.com/kaspanet/kaspad/infrastructure/db/database" "github.com/kaspanet/kaspad/infrastructure/logger" @@ -241,20 +244,167 @@ func (ti *TXIndex) removeTXIDs(selectedParentChainChanges *externalapi.SelectedC } // TXAcceptingBlockHash returns the accepting block hash for for the given txID -func (ti *TXIndex) TXAcceptingBlockHash(txID *externalapi.DomainTransactionID) (blockHash *externalapi.DomainHash, found bool, err error) { +func (ti *TXIndex) TXAcceptingBlockHash(txID *externalapi.DomainTransactionID) (acceptingBlockHash *externalapi.DomainHash, found bool, err error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlockHash") defer onEnd() ti.mutex.Lock() defer ti.mutex.Unlock() - acceptingBlockHash, found, err := ti.store.getTxAcceptingBlockHash(txID) + acceptingBlockHash, found, err = ti.store.getTxAcceptingBlockHash(txID) if err != nil { return nil, false, err } + if !found { + return nil, false, nil + } + return acceptingBlockHash, found, nil } +func (ti *TXIndex) TXAcceptingBlockHashes(txIDs []*externalapi.DomainTransactionID) (acceptingBlockHashes TxIDsToBlockHashes, found bool, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlockHash") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + acceptingBlockHashes, found, err = ti.store.getTxAcceptingBlockHashes(txIDs) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + + return acceptingBlockHashes, found, nil +} + + + +func (ti *TXIndex) TXAcceptingBlock(txID *externalapi.DomainTransactionID) (block *externalapi.DomainBlock, found bool, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlock") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + acceptingBlockHash, found, err := ti.store.getTxAcceptingBlockHash(txID) + if err != nil { + return nil, false, err + } + + acceptingBlock, err := ti.domain.Consensus().GetBlock(acceptingBlockHash) + if err != nil { + return nil, false, err + } + return acceptingBlock, true, nil +} + +func (ti *TXIndex) TXAcceptingBlocks(txIDs []*externalapi.DomainTransactionID) (acceptingBlocks TxIDsToBlocks, found bool, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlock") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + acceptingBlockHash, found, err := ti.store.getTxAcceptingBlockHashes(txIDs) + if err != nil { + return nil, false, err + } + + acceptingBlocks, err = ti.domain.Consensus().GetBlocks(acceptingBlockHash) + if err != nil { + return nil, false, err + } + return acceptingBlock, true, nil +} + + + +func (ti *TXIndex) GetTX(txID *externalapi.DomainTransactionID) (block *externalapi.DomainTransaction, found bool, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTX") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + acceptingBlockHash, found, err := ti.store.getTxAcceptingBlockHash(txID) + if err != nil { + return nil, false, err + } + + acceptingBlock, err := ti.domain.Consensus().GetBlock(acceptingBlockHash) + if err != nil { + return nil, false, err + } + + var transaction *externalapi.DomainTransaction + + for _, tx := range acceptingBlock.Transactions { + if consensushashing.TransactionID(tx).Equal(txID) { + transaction = tx + return transaction, true, nil + } + } + + + return nil, false, fmt.Errorf("Could not find transaction with ID %s in Txindex database", txID.String()) +} + +func (ti *TXIndex) GetTXConfirmations(txID *externalapi.DomainTransactionID) (BlockHashTxIDPair uint64, found bool, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTX") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + acceptingBlockHash, found, err := ti.store.getTxAcceptingBlockHash(txID) + if err != nil { + return 0, false, err + } + + acceptingBlockHeader, err := ti.domain.Consensus().GetBlockHeader(acceptingBlockHash) + if err != nil { + return 0, false, err + } + + virtualBlock, err := ti.domain.Consensus().GetVirtualInfo() + if err != nil { + return 0, false, err + } + + return virtualBlock.BlueScore - acceptingBlockHeader.BlueScore(), true, nil +} + +func (ti *TXIndex) TXIncludingBlockHash(txID *externalapi.DomainTransactionID) (includingBlockHash *externalapi.DomainHash, found bool, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlock") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + acceptingBlockHash, found, err := ti.store.getTxAcceptingBlockHash(txID) + if err != nil { + return nil, false, err + } + + acceptanceData, err := ti.domain.Consensus().GetBlockAcceptanceData(acceptingBlockHash) + if err != nil { + return nil, false, err + } + + for _, blockAcceptanceData := range acceptanceData { + for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { + if consensushashing.TransactionID(transactionAcceptanceData.Transaction).Equal(txID) { + return blockAcceptanceData.BlockHash, true, nil + } + } + } + + return nil, false, fmt.Errorf("Could not find including blockHash for transaction with ID %s in Txindex database", txID.String()) +} + //TO DO: Get Block from TxID //TO DO: Get Including BlockHash from AcceptingBlock From 11f5a49d5d81568153038442eca7a614c7793a0e Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Sun, 9 Oct 2022 19:55:08 +0200 Subject: [PATCH 17/47] pass tests --- domain/consensus/consensus.go | 2 +- .../consensus/model/externalapi/consensus.go | 2 +- domain/txindex/model.go | 2 +- domain/txindex/txindex.go | 54 +++++++++++-------- 4 files changed, 34 insertions(+), 26 deletions(-) diff --git a/domain/consensus/consensus.go b/domain/consensus/consensus.go index afbe727c0b..9e9b637c43 100644 --- a/domain/consensus/consensus.go +++ b/domain/consensus/consensus.go @@ -404,7 +404,7 @@ func (s *consensus) GetBlocks(blockHashes []*externalapi.DomainHash) ([]*externa blocks, err := s.blockStore.Blocks(s.databaseContext, stagingArea, blockHashes) if err != nil { if errors.Is(err, database.ErrNotFound) { - return nil, errors.Wrapf(err, "Quried block %s does not exist") + return nil, errors.Wrapf(err, "could not find Quried blocks") } return nil, err } diff --git a/domain/consensus/model/externalapi/consensus.go b/domain/consensus/model/externalapi/consensus.go index 7debd6f42e..0fff5b3543 100644 --- a/domain/consensus/model/externalapi/consensus.go +++ b/domain/consensus/model/externalapi/consensus.go @@ -14,7 +14,7 @@ type Consensus interface { ApplyPruningPointProof(pruningPointProof *PruningPointProof) error GetBlock(blockHash *DomainHash) (*DomainBlock, error) - GetBlocks(blockHashes []*DomainHash) (*DomainBlock, error) + GetBlocks(blockHashes []*DomainHash) ([]*DomainBlock, error) GetBlockEvenIfHeaderOnly(blockHash *DomainHash) (*DomainBlock, error) GetBlockHeader(blockHash *DomainHash) (BlockHeader, error) GetBlockInfo(blockHash *DomainHash) (*BlockInfo, error) diff --git a/domain/txindex/model.go b/domain/txindex/model.go index ca0dc5c36c..8df405237a 100644 --- a/domain/txindex/model.go +++ b/domain/txindex/model.go @@ -13,7 +13,7 @@ type TXAcceptanceChange struct { Removed map[externalapi.DomainTransactionID]*externalapi.DomainHash } -//TxIDsToBlocks is a map of TxIDs to corrospnding blockHashes +//TxIDsToBlockHashes is a map of TxIDs to corrospnding blockHashes type TxIDsToBlockHashes map[*externalapi.DomainTransactionID]*externalapi.DomainHash //TxIDsToBlocks is a map of TxIDs to corrospnding blocks diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 207506749b..00059011ad 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -1,13 +1,11 @@ package txindex import ( - "errors" "fmt" "sync" "github.com/kaspanet/kaspad/domain" "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" - "github.com/kaspanet/kaspad/domain/consensus/processes/dagtraversalmanager" "github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing" "github.com/kaspanet/kaspad/infrastructure/db/database" "github.com/kaspanet/kaspad/infrastructure/logger" @@ -262,6 +260,7 @@ func (ti *TXIndex) TXAcceptingBlockHash(txID *externalapi.DomainTransactionID) ( return acceptingBlockHash, found, nil } +// TXAcceptingBlockHashes returns the accepting block hashes for for the given txIDs func (ti *TXIndex) TXAcceptingBlockHashes(txIDs []*externalapi.DomainTransactionID) (acceptingBlockHashes TxIDsToBlockHashes, found bool, err error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlockHash") defer onEnd() @@ -280,9 +279,9 @@ func (ti *TXIndex) TXAcceptingBlockHashes(txIDs []*externalapi.DomainTransaction return acceptingBlockHashes, found, nil } - - -func (ti *TXIndex) TXAcceptingBlock(txID *externalapi.DomainTransactionID) (block *externalapi.DomainBlock, found bool, err error) { +// TXAcceptingBlock returns the accepting block for for the given txID +func (ti *TXIndex) TXAcceptingBlock(txID *externalapi.DomainTransactionID) ( + block *externalapi.DomainBlock, found bool, err error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlock") defer onEnd() @@ -301,28 +300,43 @@ func (ti *TXIndex) TXAcceptingBlock(txID *externalapi.DomainTransactionID) (bloc return acceptingBlock, true, nil } -func (ti *TXIndex) TXAcceptingBlocks(txIDs []*externalapi.DomainTransactionID) (acceptingBlocks TxIDsToBlocks, found bool, err error) { +// TXAcceptingBlocks returns the accepting blocks for for the given txIDs +func (ti *TXIndex) TXAcceptingBlocks(txIDs []*externalapi.DomainTransactionID) ( + acceptingBlocks []*externalapi.DomainBlock, found bool, err error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlock") defer onEnd() ti.mutex.Lock() defer ti.mutex.Unlock() - acceptingBlockHash, found, err := ti.store.getTxAcceptingBlockHashes(txIDs) + acceptingBlockHashTxIDPairs, found, err := ti.store.getTxAcceptingBlockHashes(txIDs) if err != nil { return nil, false, err } - acceptingBlocks, err = ti.domain.Consensus().GetBlocks(acceptingBlockHash) + acceptingBlockHashes := make([]*externalapi.DomainHash, len(acceptingBlockHashTxIDPairs)) + + i := 0 + for _, acceptingBlockHash := range acceptingBlockHashTxIDPairs { + acceptingBlockHashes[i] = acceptingBlockHash + i++ + } + + if !found { + return nil, false, nil + } + + acceptingBlocks, err = ti.domain.Consensus().GetBlocks(acceptingBlockHashes) if err != nil { return nil, false, err } - return acceptingBlock, true, nil -} - + return acceptingBlocks, true, nil +} -func (ti *TXIndex) GetTX(txID *externalapi.DomainTransactionID) (block *externalapi.DomainTransaction, found bool, err error) { +// GetTX returns the domain transaction for for the given txID +func (ti *TXIndex) GetTX(txID *externalapi.DomainTransactionID) ( + block *externalapi.DomainTransaction, found bool, err error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTX") defer onEnd() @@ -348,12 +362,13 @@ func (ti *TXIndex) GetTX(txID *externalapi.DomainTransactionID) (block *external } } - return nil, false, fmt.Errorf("Could not find transaction with ID %s in Txindex database", txID.String()) } -func (ti *TXIndex) GetTXConfirmations(txID *externalapi.DomainTransactionID) (BlockHashTxIDPair uint64, found bool, err error) { - onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTX") +// GetTXConfirmations returns the tx confirmations for for the given txID +func (ti *TXIndex) GetTXConfirmations(txID *externalapi.DomainTransactionID) ( + BlockHashTxIDPair uint64, found bool, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTXConfirmations") defer onEnd() ti.mutex.Lock() @@ -377,6 +392,7 @@ func (ti *TXIndex) GetTXConfirmations(txID *externalapi.DomainTransactionID) (Bl return virtualBlock.BlueScore - acceptingBlockHeader.BlueScore(), true, nil } +// TXIncludingBlockHash returns the including block hash for the given txID func (ti *TXIndex) TXIncludingBlockHash(txID *externalapi.DomainTransactionID) (includingBlockHash *externalapi.DomainHash, found bool, err error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlock") defer onEnd() @@ -404,11 +420,3 @@ func (ti *TXIndex) TXIncludingBlockHash(txID *externalapi.DomainTransactionID) ( return nil, false, fmt.Errorf("Could not find including blockHash for transaction with ID %s in Txindex database", txID.String()) } - -//TO DO: Get Block from TxID - -//TO DO: Get Including BlockHash from AcceptingBlock - -//TO DO: Get Including Block from AcceptingBlock - -//TO DO: Get Number of confirmations From 9b6c2e3bfe4913d188f8e09020eb80f552692b1d Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Sun, 9 Oct 2022 20:38:46 +0200 Subject: [PATCH 18/47] generate the protos --- .../grpcserver/protowire/messages.pb.go | 425 ++++- .../grpcserver/protowire/messages.proto | 16 + .../server/grpcserver/protowire/rpc.md | 315 ++++ .../server/grpcserver/protowire/rpc.pb.go | 1376 ++++++++++++++++- .../server/grpcserver/protowire/rpc.proto | 97 ++ 5 files changed, 2197 insertions(+), 32 deletions(-) diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go index 056e7ba158..bd7b85b58b 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go @@ -158,6 +158,22 @@ type KaspadMessage struct { // *KaspadMessage_GetCoinSupplyResponse // *KaspadMessage_GetAcceptingBlockHashOfTxRequest // *KaspadMessage_GetAcceptingBlockHashOfTxResponse + // *KaspadMessage_GetAcceptingBlockHashesOfTxsRequest + // *KaspadMessage_GetAcceptingBlockHashesOfTxsResponse + // *KaspadMessage_GetAcceptingBlockOfTxRequest + // *KaspadMessage_GetAcceptingBlockOfTxResponse + // *KaspadMessage_GetAcceptingBlocksOfTxRequest + // *KaspadMessage_GetAcceptingBlocksOfTxResponse + // *KaspadMessage_GetIncludingBlockHashOfTxRequest + // *KaspadMessage_GetIncludingBlockHashOfTxResponse + // *KaspadMessage_GetTxRequest + // *KaspadMessage_GetTxResponse + // *KaspadMessage_GetTxsRequest + // *KaspadMessage_GetTxsResponse + // *KaspadMessage_GetTxConfirmationRequest + // *KaspadMessage_GetTxConfirmationResponse + // *KaspadMessage_GetTxsConfirmationRequest + // *KaspadMessage_GetTxsConfirmationResponse Payload isKaspadMessage_Payload `protobuf_oneof:"payload"` } @@ -1124,6 +1140,118 @@ func (x *KaspadMessage) GetGetAcceptingBlockHashOfTxResponse() *GetAcceptingBloc return nil } +func (x *KaspadMessage) GetGetAcceptingBlockHashesOfTxsRequest() *GetAcceptingBlockHashesOfTxsRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlockHashesOfTxsRequest); ok { + return x.GetAcceptingBlockHashesOfTxsRequest + } + return nil +} + +func (x *KaspadMessage) GetGetAcceptingBlockHashesOfTxsResponse() *GetAcceptingBlockHashesOfTxsResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlockHashesOfTxsResponse); ok { + return x.GetAcceptingBlockHashesOfTxsResponse + } + return nil +} + +func (x *KaspadMessage) GetGetAcceptingBlockOfTxRequest() *GetAcceptingBlockOfTxRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlockOfTxRequest); ok { + return x.GetAcceptingBlockOfTxRequest + } + return nil +} + +func (x *KaspadMessage) GetGetAcceptingBlockOfTxResponse() *GetAcceptingBlockOfTxResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlockOfTxResponse); ok { + return x.GetAcceptingBlockOfTxResponse + } + return nil +} + +func (x *KaspadMessage) GetGetAcceptingBlocksOfTxRequest() *GetAcceptingBlocksOfTxsRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlocksOfTxRequest); ok { + return x.GetAcceptingBlocksOfTxRequest + } + return nil +} + +func (x *KaspadMessage) GetGetAcceptingBlocksOfTxResponse() *GetAcceptingBlocksOfTxsResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlocksOfTxResponse); ok { + return x.GetAcceptingBlocksOfTxResponse + } + return nil +} + +func (x *KaspadMessage) GetGetIncludingBlockHashOfTxRequest() *GetIncludingBlockHashOfTxRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetIncludingBlockHashOfTxRequest); ok { + return x.GetIncludingBlockHashOfTxRequest + } + return nil +} + +func (x *KaspadMessage) GetGetIncludingBlockHashOfTxResponse() *GetIncludingBlockHashOfTxResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetIncludingBlockHashOfTxResponse); ok { + return x.GetIncludingBlockHashOfTxResponse + } + return nil +} + +func (x *KaspadMessage) GetGetTxRequest() *GetTxRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetTxRequest); ok { + return x.GetTxRequest + } + return nil +} + +func (x *KaspadMessage) GetGetTxResponse() *GetTxResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetTxResponse); ok { + return x.GetTxResponse + } + return nil +} + +func (x *KaspadMessage) GetGetTxsRequest() *GetTxsRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetTxsRequest); ok { + return x.GetTxsRequest + } + return nil +} + +func (x *KaspadMessage) GetGetTxsResponse() *GetTxsResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetTxsResponse); ok { + return x.GetTxsResponse + } + return nil +} + +func (x *KaspadMessage) GetGetTxConfirmationRequest() *GetTxConfirmationRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetTxConfirmationRequest); ok { + return x.GetTxConfirmationRequest + } + return nil +} + +func (x *KaspadMessage) GetGetTxConfirmationResponse() *GetTxConfirmationResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetTxConfirmationResponse); ok { + return x.GetTxConfirmationResponse + } + return nil +} + +func (x *KaspadMessage) GetGetTxsConfirmationRequest() *GetTxsConfirmationRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetTxsConfirmationRequest); ok { + return x.GetTxsConfirmationRequest + } + return nil +} + +func (x *KaspadMessage) GetGetTxsConfirmationResponse() *GetTxsConfirmationResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetTxsConfirmationResponse); ok { + return x.GetTxsConfirmationResponse + } + return nil +} + type isKaspadMessage_Payload interface { isKaspadMessage_Payload() } @@ -1656,6 +1784,70 @@ type KaspadMessage_GetAcceptingBlockHashOfTxResponse struct { GetAcceptingBlockHashOfTxResponse *GetAcceptingBlockHashOfTxResponseMessage `protobuf:"bytes,1089,opt,name=getAcceptingBlockHashOfTxResponse,proto3,oneof"` } +type KaspadMessage_GetAcceptingBlockHashesOfTxsRequest struct { + GetAcceptingBlockHashesOfTxsRequest *GetAcceptingBlockHashesOfTxsRequestMessage `protobuf:"bytes,1090,opt,name=getAcceptingBlockHashesOfTxsRequest,proto3,oneof"` +} + +type KaspadMessage_GetAcceptingBlockHashesOfTxsResponse struct { + GetAcceptingBlockHashesOfTxsResponse *GetAcceptingBlockHashesOfTxsResponseMessage `protobuf:"bytes,1091,opt,name=getAcceptingBlockHashesOfTxsResponse,proto3,oneof"` +} + +type KaspadMessage_GetAcceptingBlockOfTxRequest struct { + GetAcceptingBlockOfTxRequest *GetAcceptingBlockOfTxRequestMessage `protobuf:"bytes,1092,opt,name=getAcceptingBlockOfTxRequest,proto3,oneof"` +} + +type KaspadMessage_GetAcceptingBlockOfTxResponse struct { + GetAcceptingBlockOfTxResponse *GetAcceptingBlockOfTxResponseMessage `protobuf:"bytes,1093,opt,name=getAcceptingBlockOfTxResponse,proto3,oneof"` +} + +type KaspadMessage_GetAcceptingBlocksOfTxRequest struct { + GetAcceptingBlocksOfTxRequest *GetAcceptingBlocksOfTxsRequestMessage `protobuf:"bytes,1094,opt,name=getAcceptingBlocksOfTxRequest,proto3,oneof"` +} + +type KaspadMessage_GetAcceptingBlocksOfTxResponse struct { + GetAcceptingBlocksOfTxResponse *GetAcceptingBlocksOfTxsResponseMessage `protobuf:"bytes,1095,opt,name=getAcceptingBlocksOfTxResponse,proto3,oneof"` +} + +type KaspadMessage_GetIncludingBlockHashOfTxRequest struct { + GetIncludingBlockHashOfTxRequest *GetIncludingBlockHashOfTxRequestMessage `protobuf:"bytes,1096,opt,name=getIncludingBlockHashOfTxRequest,proto3,oneof"` +} + +type KaspadMessage_GetIncludingBlockHashOfTxResponse struct { + GetIncludingBlockHashOfTxResponse *GetIncludingBlockHashOfTxResponseMessage `protobuf:"bytes,1097,opt,name=getIncludingBlockHashOfTxResponse,proto3,oneof"` +} + +type KaspadMessage_GetTxRequest struct { + GetTxRequest *GetTxRequestMessage `protobuf:"bytes,1098,opt,name=getTxRequest,proto3,oneof"` +} + +type KaspadMessage_GetTxResponse struct { + GetTxResponse *GetTxResponseMessage `protobuf:"bytes,1099,opt,name=getTxResponse,proto3,oneof"` +} + +type KaspadMessage_GetTxsRequest struct { + GetTxsRequest *GetTxsRequestMessage `protobuf:"bytes,1100,opt,name=getTxsRequest,proto3,oneof"` +} + +type KaspadMessage_GetTxsResponse struct { + GetTxsResponse *GetTxsResponseMessage `protobuf:"bytes,1101,opt,name=getTxsResponse,proto3,oneof"` +} + +type KaspadMessage_GetTxConfirmationRequest struct { + GetTxConfirmationRequest *GetTxConfirmationRequestMessage `protobuf:"bytes,1102,opt,name=getTxConfirmationRequest,proto3,oneof"` +} + +type KaspadMessage_GetTxConfirmationResponse struct { + GetTxConfirmationResponse *GetTxConfirmationResponseMessage `protobuf:"bytes,1103,opt,name=getTxConfirmationResponse,proto3,oneof"` +} + +type KaspadMessage_GetTxsConfirmationRequest struct { + GetTxsConfirmationRequest *GetTxsConfirmationRequestMessage `protobuf:"bytes,1104,opt,name=getTxsConfirmationRequest,proto3,oneof"` +} + +type KaspadMessage_GetTxsConfirmationResponse struct { + GetTxsConfirmationResponse *GetTxsConfirmationResponseMessage `protobuf:"bytes,1105,opt,name=getTxsConfirmationResponse,proto3,oneof"` +} + func (*KaspadMessage_Addresses) isKaspadMessage_Payload() {} func (*KaspadMessage_Block) isKaspadMessage_Payload() {} @@ -1920,13 +2112,45 @@ func (*KaspadMessage_GetAcceptingBlockHashOfTxRequest) isKaspadMessage_Payload() func (*KaspadMessage_GetAcceptingBlockHashOfTxResponse) isKaspadMessage_Payload() {} +func (*KaspadMessage_GetAcceptingBlockHashesOfTxsRequest) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetAcceptingBlockHashesOfTxsResponse) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetAcceptingBlockOfTxRequest) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetAcceptingBlockOfTxResponse) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetAcceptingBlocksOfTxRequest) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetAcceptingBlocksOfTxResponse) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetIncludingBlockHashOfTxRequest) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetIncludingBlockHashOfTxResponse) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetTxRequest) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetTxResponse) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetTxsRequest) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetTxsResponse) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetTxConfirmationRequest) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetTxConfirmationResponse) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetTxsConfirmationRequest) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetTxsConfirmationResponse) isKaspadMessage_Payload() {} + var File_messages_proto protoreflect.FileDescriptor var file_messages_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x1a, 0x09, 0x70, 0x32, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x09, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xca, 0x6f, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x6f, 0x22, 0xbc, 0x7d, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4d, 0x65, 0x73, 0x73, @@ -2818,21 +3042,132 @@ var file_messages_proto_rawDesc = []byte{ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x21, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x32, 0x50, - 0x0a, 0x03, 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, - 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, - 0x32, 0x50, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x6e, 0x73, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x23, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, + 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, + 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xc2, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, + 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x23, 0x67, 0x65, 0x74, + 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, + 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, + 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc3, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, + 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, + 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x24, 0x67, 0x65, 0x74, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, + 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x75, 0x0a, 0x1c, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x18, 0xc4, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1c, 0x67, 0x65, 0x74, 0x41, 0x63, + 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x78, 0x0a, 0x1d, 0x67, 0x65, 0x74, 0x41, 0x63, + 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc5, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, + 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x1d, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x79, 0x0a, 0x1d, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, + 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0xc6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, + 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x67, + 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x73, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7c, 0x0a, 0x1e, + 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc7, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x67, 0x65, 0x74, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, + 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x20, 0x67, + 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0xc8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x20, 0x67, 0x65, + 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, + 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x84, + 0x01, 0x0a, 0x21, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc9, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, + 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x21, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xca, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0c, + 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0d, + 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xcb, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xcc, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x4b, 0x0a, 0x0e, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0xcd, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x67, + 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, + 0x18, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xce, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, + 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, + 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x54, + 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xcf, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, + 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0xd0, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, 0x54, 0x78, + 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x6f, 0x0a, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0xd1, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, + 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x32, 0x50, 0x0a, 0x03, 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, - 0x30, 0x01, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x30, 0x01, 0x32, 0x50, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, + 0x28, 0x01, 0x30, 0x01, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, + 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2981,6 +3316,22 @@ var file_messages_proto_goTypes = []interface{}{ (*GetCoinSupplyResponseMessage)(nil), // 129: protowire.GetCoinSupplyResponseMessage (*GetAcceptingBlockHashOfTxRequestMessage)(nil), // 130: protowire.GetAcceptingBlockHashOfTxRequestMessage (*GetAcceptingBlockHashOfTxResponseMessage)(nil), // 131: protowire.GetAcceptingBlockHashOfTxResponseMessage + (*GetAcceptingBlockHashesOfTxsRequestMessage)(nil), // 132: protowire.GetAcceptingBlockHashesOfTxsRequestMessage + (*GetAcceptingBlockHashesOfTxsResponseMessage)(nil), // 133: protowire.GetAcceptingBlockHashesOfTxsResponseMessage + (*GetAcceptingBlockOfTxRequestMessage)(nil), // 134: protowire.GetAcceptingBlockOfTxRequestMessage + (*GetAcceptingBlockOfTxResponseMessage)(nil), // 135: protowire.GetAcceptingBlockOfTxResponseMessage + (*GetAcceptingBlocksOfTxsRequestMessage)(nil), // 136: protowire.GetAcceptingBlocksOfTxsRequestMessage + (*GetAcceptingBlocksOfTxsResponseMessage)(nil), // 137: protowire.GetAcceptingBlocksOfTxsResponseMessage + (*GetIncludingBlockHashOfTxRequestMessage)(nil), // 138: protowire.GetIncludingBlockHashOfTxRequestMessage + (*GetIncludingBlockHashOfTxResponseMessage)(nil), // 139: protowire.GetIncludingBlockHashOfTxResponseMessage + (*GetTxRequestMessage)(nil), // 140: protowire.GetTxRequestMessage + (*GetTxResponseMessage)(nil), // 141: protowire.GetTxResponseMessage + (*GetTxsRequestMessage)(nil), // 142: protowire.GetTxsRequestMessage + (*GetTxsResponseMessage)(nil), // 143: protowire.GetTxsResponseMessage + (*GetTxConfirmationRequestMessage)(nil), // 144: protowire.GetTxConfirmationRequestMessage + (*GetTxConfirmationResponseMessage)(nil), // 145: protowire.GetTxConfirmationResponseMessage + (*GetTxsConfirmationRequestMessage)(nil), // 146: protowire.GetTxsConfirmationRequestMessage + (*GetTxsConfirmationResponseMessage)(nil), // 147: protowire.GetTxsConfirmationResponseMessage } var file_messages_proto_depIdxs = []int32{ 1, // 0: protowire.KaspadMessage.addresses:type_name -> protowire.AddressesMessage @@ -3115,15 +3466,31 @@ var file_messages_proto_depIdxs = []int32{ 129, // 129: protowire.KaspadMessage.getCoinSupplyResponse:type_name -> protowire.GetCoinSupplyResponseMessage 130, // 130: protowire.KaspadMessage.getAcceptingBlockHashOfTxRequest:type_name -> protowire.GetAcceptingBlockHashOfTxRequestMessage 131, // 131: protowire.KaspadMessage.getAcceptingBlockHashOfTxResponse:type_name -> protowire.GetAcceptingBlockHashOfTxResponseMessage - 0, // 132: protowire.P2P.MessageStream:input_type -> protowire.KaspadMessage - 0, // 133: protowire.RPC.MessageStream:input_type -> protowire.KaspadMessage - 0, // 134: protowire.P2P.MessageStream:output_type -> protowire.KaspadMessage - 0, // 135: protowire.RPC.MessageStream:output_type -> protowire.KaspadMessage - 134, // [134:136] is the sub-list for method output_type - 132, // [132:134] is the sub-list for method input_type - 132, // [132:132] is the sub-list for extension type_name - 132, // [132:132] is the sub-list for extension extendee - 0, // [0:132] is the sub-list for field type_name + 132, // 132: protowire.KaspadMessage.getAcceptingBlockHashesOfTxsRequest:type_name -> protowire.GetAcceptingBlockHashesOfTxsRequestMessage + 133, // 133: protowire.KaspadMessage.getAcceptingBlockHashesOfTxsResponse:type_name -> protowire.GetAcceptingBlockHashesOfTxsResponseMessage + 134, // 134: protowire.KaspadMessage.getAcceptingBlockOfTxRequest:type_name -> protowire.GetAcceptingBlockOfTxRequestMessage + 135, // 135: protowire.KaspadMessage.getAcceptingBlockOfTxResponse:type_name -> protowire.GetAcceptingBlockOfTxResponseMessage + 136, // 136: protowire.KaspadMessage.getAcceptingBlocksOfTxRequest:type_name -> protowire.GetAcceptingBlocksOfTxsRequestMessage + 137, // 137: protowire.KaspadMessage.getAcceptingBlocksOfTxResponse:type_name -> protowire.GetAcceptingBlocksOfTxsResponseMessage + 138, // 138: protowire.KaspadMessage.getIncludingBlockHashOfTxRequest:type_name -> protowire.GetIncludingBlockHashOfTxRequestMessage + 139, // 139: protowire.KaspadMessage.getIncludingBlockHashOfTxResponse:type_name -> protowire.GetIncludingBlockHashOfTxResponseMessage + 140, // 140: protowire.KaspadMessage.getTxRequest:type_name -> protowire.GetTxRequestMessage + 141, // 141: protowire.KaspadMessage.getTxResponse:type_name -> protowire.GetTxResponseMessage + 142, // 142: protowire.KaspadMessage.getTxsRequest:type_name -> protowire.GetTxsRequestMessage + 143, // 143: protowire.KaspadMessage.getTxsResponse:type_name -> protowire.GetTxsResponseMessage + 144, // 144: protowire.KaspadMessage.getTxConfirmationRequest:type_name -> protowire.GetTxConfirmationRequestMessage + 145, // 145: protowire.KaspadMessage.getTxConfirmationResponse:type_name -> protowire.GetTxConfirmationResponseMessage + 146, // 146: protowire.KaspadMessage.getTxsConfirmationRequest:type_name -> protowire.GetTxsConfirmationRequestMessage + 147, // 147: protowire.KaspadMessage.getTxsConfirmationResponse:type_name -> protowire.GetTxsConfirmationResponseMessage + 0, // 148: protowire.P2P.MessageStream:input_type -> protowire.KaspadMessage + 0, // 149: protowire.RPC.MessageStream:input_type -> protowire.KaspadMessage + 0, // 150: protowire.P2P.MessageStream:output_type -> protowire.KaspadMessage + 0, // 151: protowire.RPC.MessageStream:output_type -> protowire.KaspadMessage + 150, // [150:152] is the sub-list for method output_type + 148, // [148:150] is the sub-list for method input_type + 148, // [148:148] is the sub-list for extension type_name + 148, // [148:148] is the sub-list for extension extendee + 0, // [0:148] is the sub-list for field type_name } func init() { file_messages_proto_init() } @@ -3280,6 +3647,22 @@ func file_messages_proto_init() { (*KaspadMessage_GetCoinSupplyResponse)(nil), (*KaspadMessage_GetAcceptingBlockHashOfTxRequest)(nil), (*KaspadMessage_GetAcceptingBlockHashOfTxResponse)(nil), + (*KaspadMessage_GetAcceptingBlockHashesOfTxsRequest)(nil), + (*KaspadMessage_GetAcceptingBlockHashesOfTxsResponse)(nil), + (*KaspadMessage_GetAcceptingBlockOfTxRequest)(nil), + (*KaspadMessage_GetAcceptingBlockOfTxResponse)(nil), + (*KaspadMessage_GetAcceptingBlocksOfTxRequest)(nil), + (*KaspadMessage_GetAcceptingBlocksOfTxResponse)(nil), + (*KaspadMessage_GetIncludingBlockHashOfTxRequest)(nil), + (*KaspadMessage_GetIncludingBlockHashOfTxResponse)(nil), + (*KaspadMessage_GetTxRequest)(nil), + (*KaspadMessage_GetTxResponse)(nil), + (*KaspadMessage_GetTxsRequest)(nil), + (*KaspadMessage_GetTxsResponse)(nil), + (*KaspadMessage_GetTxConfirmationRequest)(nil), + (*KaspadMessage_GetTxConfirmationResponse)(nil), + (*KaspadMessage_GetTxsConfirmationRequest)(nil), + (*KaspadMessage_GetTxsConfirmationResponse)(nil), } type x struct{} out := protoimpl.TypeBuilder{ diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto index 3e70ca36b1..8a5d7c052b 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto @@ -141,6 +141,22 @@ message KaspadMessage { GetCoinSupplyResponseMessage getCoinSupplyResponse= 1087; GetAcceptingBlockHashOfTxRequestMessage getAcceptingBlockHashOfTxRequest = 1088; GetAcceptingBlockHashOfTxResponseMessage getAcceptingBlockHashOfTxResponse = 1089; + GetAcceptingBlockHashesOfTxsRequestMessage getAcceptingBlockHashesOfTxsRequest = 1090; + GetAcceptingBlockHashesOfTxsResponseMessage getAcceptingBlockHashesOfTxsResponse = 1091; + GetAcceptingBlockOfTxRequestMessage getAcceptingBlockOfTxRequest = 1092; + GetAcceptingBlockOfTxResponseMessage getAcceptingBlockOfTxResponse = 1093; + GetAcceptingBlocksOfTxsRequestMessage getAcceptingBlocksOfTxRequest = 1094; + GetAcceptingBlocksOfTxsResponseMessage getAcceptingBlocksOfTxResponse = 1095; + GetIncludingBlockHashOfTxRequestMessage getIncludingBlockHashOfTxRequest = 1096; + GetIncludingBlockHashOfTxResponseMessage getIncludingBlockHashOfTxResponse = 1097; + GetTxRequestMessage getTxRequest = 1098; + GetTxResponseMessage getTxResponse = 1099; + GetTxsRequestMessage getTxsRequest = 1100; + GetTxsResponseMessage getTxsResponse = 1101; + GetTxConfirmationRequestMessage getTxConfirmationRequest = 1102; + GetTxConfirmationResponseMessage getTxConfirmationResponse = 1103; + GetTxsConfirmationRequestMessage getTxsConfirmationRequest = 1104; + GetTxsConfirmationResponseMessage getTxsConfirmationResponse = 1105; } } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md index 542dd6d2ec..d0afd72518 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md @@ -114,6 +114,25 @@ - [GetMempoolEntriesByAddressesResponseMessage](#protowire.GetMempoolEntriesByAddressesResponseMessage) - [GetCoinSupplyRequestMessage](#protowire.GetCoinSupplyRequestMessage) - [GetCoinSupplyResponseMessage](#protowire.GetCoinSupplyResponseMessage) + - [TxIDConfirmations](#protowire.TxIDConfirmations) + - [TxIDBlockHashPair](#protowire.TxIDBlockHashPair) + - [TxIDBlockPair](#protowire.TxIDBlockPair) + - [GetAcceptingBlockHashesOfTxsRequestMessage](#protowire.GetAcceptingBlockHashesOfTxsRequestMessage) + - [GetAcceptingBlockHashesOfTxsResponseMessage](#protowire.GetAcceptingBlockHashesOfTxsResponseMessage) + - [GetAcceptingBlockOfTxRequestMessage](#protowire.GetAcceptingBlockOfTxRequestMessage) + - [GetAcceptingBlockOfTxResponseMessage](#protowire.GetAcceptingBlockOfTxResponseMessage) + - [GetAcceptingBlocksOfTxsRequestMessage](#protowire.GetAcceptingBlocksOfTxsRequestMessage) + - [GetAcceptingBlocksOfTxsResponseMessage](#protowire.GetAcceptingBlocksOfTxsResponseMessage) + - [GetIncludingBlockHashOfTxRequestMessage](#protowire.GetIncludingBlockHashOfTxRequestMessage) + - [GetIncludingBlockHashOfTxResponseMessage](#protowire.GetIncludingBlockHashOfTxResponseMessage) + - [GetTxRequestMessage](#protowire.GetTxRequestMessage) + - [GetTxResponseMessage](#protowire.GetTxResponseMessage) + - [GetTxsRequestMessage](#protowire.GetTxsRequestMessage) + - [GetTxsResponseMessage](#protowire.GetTxsResponseMessage) + - [GetTxConfirmationRequestMessage](#protowire.GetTxConfirmationRequestMessage) + - [GetTxConfirmationResponseMessage](#protowire.GetTxConfirmationResponseMessage) + - [GetTxsConfirmationRequestMessage](#protowire.GetTxsConfirmationRequestMessage) + - [GetTxsConfirmationResponseMessage](#protowire.GetTxsConfirmationResponseMessage) - [SubmitBlockResponseMessage.RejectReason](#protowire.SubmitBlockResponseMessage.RejectReason) @@ -1890,6 +1909,302 @@ See NotifyNewBlockTemplateRequestMessage + + + +### TxIDConfirmations + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txID | [string](#string) | | | +| confirmations | [int32](#int32) | | | + + + + + + + + +### TxIDBlockHashPair + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txID | [string](#string) | | | +| blockHash | [string](#string) | | | + + + + + + + + +### TxIDBlockPair + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txID | [string](#string) | | | +| block | [RpcBlock](#protowire.RpcBlock) | | | + + + + + + + + +### GetAcceptingBlockHashesOfTxsRequestMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txID | [string](#string) | repeated | | + + + + + + + + +### GetAcceptingBlockHashesOfTxsResponseMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txIDBlockHashPair | [TxIDBlockHashPair](#protowire.TxIDBlockHashPair) | repeated | | +| error | [RPCError](#protowire.RPCError) | | | + + + + + + + + +### GetAcceptingBlockOfTxRequestMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txID | [string](#string) | | | + + + + + + + + +### GetAcceptingBlockOfTxResponseMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| block | [RpcBlock](#protowire.RpcBlock) | | | +| error | [RPCError](#protowire.RPCError) | | | + + + + + + + + +### GetAcceptingBlocksOfTxsRequestMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txID | [string](#string) | repeated | | + + + + + + + + +### GetAcceptingBlocksOfTxsResponseMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txIDBlockPair | [TxIDBlockPair](#protowire.TxIDBlockPair) | repeated | | +| error | [RPCError](#protowire.RPCError) | | | + + + + + + + + +### GetIncludingBlockHashOfTxRequestMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txID | [string](#string) | | | + + + + + + + + +### GetIncludingBlockHashOfTxResponseMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| blockHash | [string](#string) | | | +| error | [RPCError](#protowire.RPCError) | | | + + + + + + + + +### GetTxRequestMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txID | [string](#string) | | | + + + + + + + + +### GetTxResponseMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| transaction | [RpcTransaction](#protowire.RpcTransaction) | | | +| error | [RPCError](#protowire.RPCError) | | | + + + + + + + + +### GetTxsRequestMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txID | [string](#string) | repeated | | + + + + + + + + +### GetTxsResponseMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| transactions | [RpcTransaction](#protowire.RpcTransaction) | repeated | | +| error | [RPCError](#protowire.RPCError) | | | + + + + + + + + +### GetTxConfirmationRequestMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txID | [string](#string) | | | + + + + + + + + +### GetTxConfirmationResponseMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| confirmations | [int64](#int64) | | | +| error | [RPCError](#protowire.RPCError) | | | + + + + + + + + +### GetTxsConfirmationRequestMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txID | [string](#string) | repeated | | + + + + + + + + +### GetTxsConfirmationResponseMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txIDConfirmations | [TxIDConfirmations](#protowire.TxIDConfirmations) | repeated | | +| error | [RPCError](#protowire.RPCError) | | | + + + + + diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go index b1d3ef8c4d..bfb379aeab 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go @@ -6215,6 +6215,987 @@ func (x *GetCoinSupplyResponseMessage) GetError() *RPCError { return nil } +type TxIDConfirmations struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` + Confirmations int32 `protobuf:"varint,2,opt,name=confirmations,proto3" json:"confirmations,omitempty"` +} + +func (x *TxIDConfirmations) Reset() { + *x = TxIDConfirmations{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[110] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TxIDConfirmations) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TxIDConfirmations) ProtoMessage() {} + +func (x *TxIDConfirmations) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[110] + 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 TxIDConfirmations.ProtoReflect.Descriptor instead. +func (*TxIDConfirmations) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{110} +} + +func (x *TxIDConfirmations) GetTxID() string { + if x != nil { + return x.TxID + } + return "" +} + +func (x *TxIDConfirmations) GetConfirmations() int32 { + if x != nil { + return x.Confirmations + } + return 0 +} + +type TxIDBlockHashPair struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` + BlockHash string `protobuf:"bytes,2,opt,name=blockHash,proto3" json:"blockHash,omitempty"` +} + +func (x *TxIDBlockHashPair) Reset() { + *x = TxIDBlockHashPair{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[111] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TxIDBlockHashPair) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TxIDBlockHashPair) ProtoMessage() {} + +func (x *TxIDBlockHashPair) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[111] + 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 TxIDBlockHashPair.ProtoReflect.Descriptor instead. +func (*TxIDBlockHashPair) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{111} +} + +func (x *TxIDBlockHashPair) GetTxID() string { + if x != nil { + return x.TxID + } + return "" +} + +func (x *TxIDBlockHashPair) GetBlockHash() string { + if x != nil { + return x.BlockHash + } + return "" +} + +type TxIDBlockPair struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` + Block *RpcBlock `protobuf:"bytes,2,opt,name=block,proto3" json:"block,omitempty"` +} + +func (x *TxIDBlockPair) Reset() { + *x = TxIDBlockPair{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[112] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TxIDBlockPair) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TxIDBlockPair) ProtoMessage() {} + +func (x *TxIDBlockPair) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[112] + 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 TxIDBlockPair.ProtoReflect.Descriptor instead. +func (*TxIDBlockPair) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{112} +} + +func (x *TxIDBlockPair) GetTxID() string { + if x != nil { + return x.TxID + } + return "" +} + +func (x *TxIDBlockPair) GetBlock() *RpcBlock { + if x != nil { + return x.Block + } + return nil +} + +type GetAcceptingBlockHashesOfTxsRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxID []string `protobuf:"bytes,1,rep,name=txID,proto3" json:"txID,omitempty"` +} + +func (x *GetAcceptingBlockHashesOfTxsRequestMessage) Reset() { + *x = GetAcceptingBlockHashesOfTxsRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[113] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAcceptingBlockHashesOfTxsRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAcceptingBlockHashesOfTxsRequestMessage) ProtoMessage() {} + +func (x *GetAcceptingBlockHashesOfTxsRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[113] + 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 GetAcceptingBlockHashesOfTxsRequestMessage.ProtoReflect.Descriptor instead. +func (*GetAcceptingBlockHashesOfTxsRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{113} +} + +func (x *GetAcceptingBlockHashesOfTxsRequestMessage) GetTxID() []string { + if x != nil { + return x.TxID + } + return nil +} + +type GetAcceptingBlockHashesOfTxsResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxIDBlockHashPair []*TxIDBlockHashPair `protobuf:"bytes,1,rep,name=txIDBlockHashPair,proto3" json:"txIDBlockHashPair,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *GetAcceptingBlockHashesOfTxsResponseMessage) Reset() { + *x = GetAcceptingBlockHashesOfTxsResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[114] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAcceptingBlockHashesOfTxsResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAcceptingBlockHashesOfTxsResponseMessage) ProtoMessage() {} + +func (x *GetAcceptingBlockHashesOfTxsResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[114] + 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 GetAcceptingBlockHashesOfTxsResponseMessage.ProtoReflect.Descriptor instead. +func (*GetAcceptingBlockHashesOfTxsResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{114} +} + +func (x *GetAcceptingBlockHashesOfTxsResponseMessage) GetTxIDBlockHashPair() []*TxIDBlockHashPair { + if x != nil { + return x.TxIDBlockHashPair + } + return nil +} + +func (x *GetAcceptingBlockHashesOfTxsResponseMessage) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + +type GetAcceptingBlockOfTxRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` +} + +func (x *GetAcceptingBlockOfTxRequestMessage) Reset() { + *x = GetAcceptingBlockOfTxRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[115] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAcceptingBlockOfTxRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAcceptingBlockOfTxRequestMessage) ProtoMessage() {} + +func (x *GetAcceptingBlockOfTxRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[115] + 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 GetAcceptingBlockOfTxRequestMessage.ProtoReflect.Descriptor instead. +func (*GetAcceptingBlockOfTxRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{115} +} + +func (x *GetAcceptingBlockOfTxRequestMessage) GetTxID() string { + if x != nil { + return x.TxID + } + return "" +} + +type GetAcceptingBlockOfTxResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Block *RpcBlock `protobuf:"bytes,1,opt,name=block,proto3" json:"block,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *GetAcceptingBlockOfTxResponseMessage) Reset() { + *x = GetAcceptingBlockOfTxResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[116] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAcceptingBlockOfTxResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAcceptingBlockOfTxResponseMessage) ProtoMessage() {} + +func (x *GetAcceptingBlockOfTxResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[116] + 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 GetAcceptingBlockOfTxResponseMessage.ProtoReflect.Descriptor instead. +func (*GetAcceptingBlockOfTxResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{116} +} + +func (x *GetAcceptingBlockOfTxResponseMessage) GetBlock() *RpcBlock { + if x != nil { + return x.Block + } + return nil +} + +func (x *GetAcceptingBlockOfTxResponseMessage) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + +type GetAcceptingBlocksOfTxsRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxID []string `protobuf:"bytes,1,rep,name=txID,proto3" json:"txID,omitempty"` +} + +func (x *GetAcceptingBlocksOfTxsRequestMessage) Reset() { + *x = GetAcceptingBlocksOfTxsRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[117] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAcceptingBlocksOfTxsRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAcceptingBlocksOfTxsRequestMessage) ProtoMessage() {} + +func (x *GetAcceptingBlocksOfTxsRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[117] + 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 GetAcceptingBlocksOfTxsRequestMessage.ProtoReflect.Descriptor instead. +func (*GetAcceptingBlocksOfTxsRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{117} +} + +func (x *GetAcceptingBlocksOfTxsRequestMessage) GetTxID() []string { + if x != nil { + return x.TxID + } + return nil +} + +type GetAcceptingBlocksOfTxsResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxIDBlockPair []*TxIDBlockPair `protobuf:"bytes,1,rep,name=txIDBlockPair,proto3" json:"txIDBlockPair,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *GetAcceptingBlocksOfTxsResponseMessage) Reset() { + *x = GetAcceptingBlocksOfTxsResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[118] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAcceptingBlocksOfTxsResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAcceptingBlocksOfTxsResponseMessage) ProtoMessage() {} + +func (x *GetAcceptingBlocksOfTxsResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[118] + 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 GetAcceptingBlocksOfTxsResponseMessage.ProtoReflect.Descriptor instead. +func (*GetAcceptingBlocksOfTxsResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{118} +} + +func (x *GetAcceptingBlocksOfTxsResponseMessage) GetTxIDBlockPair() []*TxIDBlockPair { + if x != nil { + return x.TxIDBlockPair + } + return nil +} + +func (x *GetAcceptingBlocksOfTxsResponseMessage) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + +type GetIncludingBlockHashOfTxRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` +} + +func (x *GetIncludingBlockHashOfTxRequestMessage) Reset() { + *x = GetIncludingBlockHashOfTxRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[119] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetIncludingBlockHashOfTxRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetIncludingBlockHashOfTxRequestMessage) ProtoMessage() {} + +func (x *GetIncludingBlockHashOfTxRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[119] + 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 GetIncludingBlockHashOfTxRequestMessage.ProtoReflect.Descriptor instead. +func (*GetIncludingBlockHashOfTxRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{119} +} + +func (x *GetIncludingBlockHashOfTxRequestMessage) GetTxID() string { + if x != nil { + return x.TxID + } + return "" +} + +type GetIncludingBlockHashOfTxResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BlockHash string `protobuf:"bytes,1,opt,name=blockHash,proto3" json:"blockHash,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *GetIncludingBlockHashOfTxResponseMessage) Reset() { + *x = GetIncludingBlockHashOfTxResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[120] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetIncludingBlockHashOfTxResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetIncludingBlockHashOfTxResponseMessage) ProtoMessage() {} + +func (x *GetIncludingBlockHashOfTxResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[120] + 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 GetIncludingBlockHashOfTxResponseMessage.ProtoReflect.Descriptor instead. +func (*GetIncludingBlockHashOfTxResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{120} +} + +func (x *GetIncludingBlockHashOfTxResponseMessage) GetBlockHash() string { + if x != nil { + return x.BlockHash + } + return "" +} + +func (x *GetIncludingBlockHashOfTxResponseMessage) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + +type GetTxRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` +} + +func (x *GetTxRequestMessage) Reset() { + *x = GetTxRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[121] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTxRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTxRequestMessage) ProtoMessage() {} + +func (x *GetTxRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[121] + 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 GetTxRequestMessage.ProtoReflect.Descriptor instead. +func (*GetTxRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{121} +} + +func (x *GetTxRequestMessage) GetTxID() string { + if x != nil { + return x.TxID + } + return "" +} + +type GetTxResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Transaction *RpcTransaction `protobuf:"bytes,1,opt,name=transaction,proto3" json:"transaction,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *GetTxResponseMessage) Reset() { + *x = GetTxResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[122] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTxResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTxResponseMessage) ProtoMessage() {} + +func (x *GetTxResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[122] + 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 GetTxResponseMessage.ProtoReflect.Descriptor instead. +func (*GetTxResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{122} +} + +func (x *GetTxResponseMessage) GetTransaction() *RpcTransaction { + if x != nil { + return x.Transaction + } + return nil +} + +func (x *GetTxResponseMessage) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + +type GetTxsRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxID []string `protobuf:"bytes,1,rep,name=txID,proto3" json:"txID,omitempty"` +} + +func (x *GetTxsRequestMessage) Reset() { + *x = GetTxsRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[123] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTxsRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTxsRequestMessage) ProtoMessage() {} + +func (x *GetTxsRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[123] + 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 GetTxsRequestMessage.ProtoReflect.Descriptor instead. +func (*GetTxsRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{123} +} + +func (x *GetTxsRequestMessage) GetTxID() []string { + if x != nil { + return x.TxID + } + return nil +} + +type GetTxsResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Transactions []*RpcTransaction `protobuf:"bytes,1,rep,name=transactions,proto3" json:"transactions,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *GetTxsResponseMessage) Reset() { + *x = GetTxsResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[124] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTxsResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTxsResponseMessage) ProtoMessage() {} + +func (x *GetTxsResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[124] + 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 GetTxsResponseMessage.ProtoReflect.Descriptor instead. +func (*GetTxsResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{124} +} + +func (x *GetTxsResponseMessage) GetTransactions() []*RpcTransaction { + if x != nil { + return x.Transactions + } + return nil +} + +func (x *GetTxsResponseMessage) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + +type GetTxConfirmationRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` +} + +func (x *GetTxConfirmationRequestMessage) Reset() { + *x = GetTxConfirmationRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[125] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTxConfirmationRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTxConfirmationRequestMessage) ProtoMessage() {} + +func (x *GetTxConfirmationRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[125] + 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 GetTxConfirmationRequestMessage.ProtoReflect.Descriptor instead. +func (*GetTxConfirmationRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{125} +} + +func (x *GetTxConfirmationRequestMessage) GetTxID() string { + if x != nil { + return x.TxID + } + return "" +} + +type GetTxConfirmationResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Confirmations int64 `protobuf:"varint,1,opt,name=confirmations,proto3" json:"confirmations,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *GetTxConfirmationResponseMessage) Reset() { + *x = GetTxConfirmationResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[126] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTxConfirmationResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTxConfirmationResponseMessage) ProtoMessage() {} + +func (x *GetTxConfirmationResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[126] + 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 GetTxConfirmationResponseMessage.ProtoReflect.Descriptor instead. +func (*GetTxConfirmationResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{126} +} + +func (x *GetTxConfirmationResponseMessage) GetConfirmations() int64 { + if x != nil { + return x.Confirmations + } + return 0 +} + +func (x *GetTxConfirmationResponseMessage) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + +type GetTxsConfirmationRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxID []string `protobuf:"bytes,1,rep,name=txID,proto3" json:"txID,omitempty"` +} + +func (x *GetTxsConfirmationRequestMessage) Reset() { + *x = GetTxsConfirmationRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[127] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTxsConfirmationRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTxsConfirmationRequestMessage) ProtoMessage() {} + +func (x *GetTxsConfirmationRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[127] + 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 GetTxsConfirmationRequestMessage.ProtoReflect.Descriptor instead. +func (*GetTxsConfirmationRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{127} +} + +func (x *GetTxsConfirmationRequestMessage) GetTxID() []string { + if x != nil { + return x.TxID + } + return nil +} + +type GetTxsConfirmationResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxIDConfirmations []*TxIDConfirmations `protobuf:"bytes,1,rep,name=txIDConfirmations,proto3" json:"txIDConfirmations,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *GetTxsConfirmationResponseMessage) Reset() { + *x = GetTxsConfirmationResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[128] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTxsConfirmationResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTxsConfirmationResponseMessage) ProtoMessage() {} + +func (x *GetTxsConfirmationResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[128] + 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 GetTxsConfirmationResponseMessage.ProtoReflect.Descriptor instead. +func (*GetTxsConfirmationResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{128} +} + +func (x *GetTxsConfirmationResponseMessage) GetTxIDConfirmations() []*TxIDConfirmations { + if x != nil { + return x.TxIDConfirmations + } + return nil +} + +func (x *GetTxsConfirmationResponseMessage) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + var File_rpc_proto protoreflect.FileDescriptor var file_rpc_proto_rawDesc = []byte{ @@ -7029,10 +8010,121 @@ var file_rpc_proto_rawDesc = []byte{ 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, - 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4d, 0x0a, 0x11, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x24, 0x0a, + 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0x45, 0x0a, 0x11, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x22, 0x4e, 0x0a, 0x0d, 0x54, 0x78, + 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, + 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x40, 0x0a, 0x2a, 0x47, 0x65, + 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, + 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0xa5, 0x01, 0x0a, + 0x2b, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4a, 0x0a, 0x11, + 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, + 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, + 0x68, 0x50, 0x61, 0x69, 0x72, 0x52, 0x11, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x39, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, + 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, + 0x7d, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3b, + 0x0a, 0x25, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x94, 0x01, 0x0a, 0x26, + 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0d, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, + 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, + 0x44, 0x22, 0x74, 0x0a, 0x28, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, + 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x29, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x78, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, + 0x49, 0x44, 0x22, 0x7f, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, + 0x82, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x35, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x74, 0x0a, 0x20, 0x47, + 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x36, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x9b, 0x01, 0x0a, 0x21, 0x47, 0x65, + 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x4a, 0x0a, 0x11, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x11, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, + 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -7048,7 +8140,7 @@ func file_rpc_proto_rawDescGZIP() []byte { } var file_rpc_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 110) +var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 129) var file_rpc_proto_goTypes = []interface{}{ (SubmitBlockResponseMessage_RejectReason)(0), // 0: protowire.SubmitBlockResponseMessage.RejectReason (*RPCError)(nil), // 1: protowire.RPCError @@ -7161,6 +8253,25 @@ var file_rpc_proto_goTypes = []interface{}{ (*GetMempoolEntriesByAddressesResponseMessage)(nil), // 108: protowire.GetMempoolEntriesByAddressesResponseMessage (*GetCoinSupplyRequestMessage)(nil), // 109: protowire.GetCoinSupplyRequestMessage (*GetCoinSupplyResponseMessage)(nil), // 110: protowire.GetCoinSupplyResponseMessage + (*TxIDConfirmations)(nil), // 111: protowire.TxIDConfirmations + (*TxIDBlockHashPair)(nil), // 112: protowire.TxIDBlockHashPair + (*TxIDBlockPair)(nil), // 113: protowire.TxIDBlockPair + (*GetAcceptingBlockHashesOfTxsRequestMessage)(nil), // 114: protowire.GetAcceptingBlockHashesOfTxsRequestMessage + (*GetAcceptingBlockHashesOfTxsResponseMessage)(nil), // 115: protowire.GetAcceptingBlockHashesOfTxsResponseMessage + (*GetAcceptingBlockOfTxRequestMessage)(nil), // 116: protowire.GetAcceptingBlockOfTxRequestMessage + (*GetAcceptingBlockOfTxResponseMessage)(nil), // 117: protowire.GetAcceptingBlockOfTxResponseMessage + (*GetAcceptingBlocksOfTxsRequestMessage)(nil), // 118: protowire.GetAcceptingBlocksOfTxsRequestMessage + (*GetAcceptingBlocksOfTxsResponseMessage)(nil), // 119: protowire.GetAcceptingBlocksOfTxsResponseMessage + (*GetIncludingBlockHashOfTxRequestMessage)(nil), // 120: protowire.GetIncludingBlockHashOfTxRequestMessage + (*GetIncludingBlockHashOfTxResponseMessage)(nil), // 121: protowire.GetIncludingBlockHashOfTxResponseMessage + (*GetTxRequestMessage)(nil), // 122: protowire.GetTxRequestMessage + (*GetTxResponseMessage)(nil), // 123: protowire.GetTxResponseMessage + (*GetTxsRequestMessage)(nil), // 124: protowire.GetTxsRequestMessage + (*GetTxsResponseMessage)(nil), // 125: protowire.GetTxsResponseMessage + (*GetTxConfirmationRequestMessage)(nil), // 126: protowire.GetTxConfirmationRequestMessage + (*GetTxConfirmationResponseMessage)(nil), // 127: protowire.GetTxConfirmationResponseMessage + (*GetTxsConfirmationRequestMessage)(nil), // 128: protowire.GetTxsConfirmationRequestMessage + (*GetTxsConfirmationResponseMessage)(nil), // 129: protowire.GetTxsConfirmationResponseMessage } var file_rpc_proto_depIdxs = []int32{ 3, // 0: protowire.RpcBlock.header:type_name -> protowire.RpcBlockHeader @@ -7240,11 +8351,26 @@ var file_rpc_proto_depIdxs = []int32{ 106, // 74: protowire.GetMempoolEntriesByAddressesResponseMessage.entries:type_name -> protowire.MempoolEntryByAddress 1, // 75: protowire.GetMempoolEntriesByAddressesResponseMessage.error:type_name -> protowire.RPCError 1, // 76: protowire.GetCoinSupplyResponseMessage.error:type_name -> protowire.RPCError - 77, // [77:77] is the sub-list for method output_type - 77, // [77:77] is the sub-list for method input_type - 77, // [77:77] is the sub-list for extension type_name - 77, // [77:77] is the sub-list for extension extendee - 0, // [0:77] is the sub-list for field type_name + 2, // 77: protowire.TxIDBlockPair.block:type_name -> protowire.RpcBlock + 112, // 78: protowire.GetAcceptingBlockHashesOfTxsResponseMessage.txIDBlockHashPair:type_name -> protowire.TxIDBlockHashPair + 1, // 79: protowire.GetAcceptingBlockHashesOfTxsResponseMessage.error:type_name -> protowire.RPCError + 2, // 80: protowire.GetAcceptingBlockOfTxResponseMessage.block:type_name -> protowire.RpcBlock + 1, // 81: protowire.GetAcceptingBlockOfTxResponseMessage.error:type_name -> protowire.RPCError + 113, // 82: protowire.GetAcceptingBlocksOfTxsResponseMessage.txIDBlockPair:type_name -> protowire.TxIDBlockPair + 1, // 83: protowire.GetAcceptingBlocksOfTxsResponseMessage.error:type_name -> protowire.RPCError + 1, // 84: protowire.GetIncludingBlockHashOfTxResponseMessage.error:type_name -> protowire.RPCError + 6, // 85: protowire.GetTxResponseMessage.transaction:type_name -> protowire.RpcTransaction + 1, // 86: protowire.GetTxResponseMessage.error:type_name -> protowire.RPCError + 6, // 87: protowire.GetTxsResponseMessage.transactions:type_name -> protowire.RpcTransaction + 1, // 88: protowire.GetTxsResponseMessage.error:type_name -> protowire.RPCError + 1, // 89: protowire.GetTxConfirmationResponseMessage.error:type_name -> protowire.RPCError + 111, // 90: protowire.GetTxsConfirmationResponseMessage.txIDConfirmations:type_name -> protowire.TxIDConfirmations + 1, // 91: protowire.GetTxsConfirmationResponseMessage.error:type_name -> protowire.RPCError + 92, // [92:92] is the sub-list for method output_type + 92, // [92:92] is the sub-list for method input_type + 92, // [92:92] is the sub-list for extension type_name + 92, // [92:92] is the sub-list for extension extendee + 0, // [0:92] is the sub-list for field type_name } func init() { file_rpc_proto_init() } @@ -8573,6 +9699,234 @@ func file_rpc_proto_init() { return nil } } + file_rpc_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TxIDConfirmations); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TxIDBlockHashPair); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TxIDBlockPair); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAcceptingBlockHashesOfTxsRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAcceptingBlockHashesOfTxsResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAcceptingBlockOfTxRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[116].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAcceptingBlockOfTxResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[117].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAcceptingBlocksOfTxsRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[118].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAcceptingBlocksOfTxsResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[119].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetIncludingBlockHashOfTxRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[120].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetIncludingBlockHashOfTxResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[121].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[122].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[123].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxsRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[124].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxsResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[125].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxConfirmationRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[126].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxConfirmationResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[127].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxsConfirmationRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[128].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxsConfirmationResponseMessage); 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{ @@ -8580,7 +9934,7 @@ func file_rpc_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_rpc_proto_rawDesc, NumEnums: 1, - NumMessages: 110, + NumMessages: 129, NumExtensions: 0, NumServices: 0, }, diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto index 2e0a05c51e..0dde68f57f 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto @@ -733,3 +733,100 @@ message GetCoinSupplyResponseMessage{ RPCError error = 1000; } + +message TxIDConfirmations { + string txID = 1; + int32 confirmations = 2; +} + +message TxIDBlockHashPair { + string txID = 1; + string blockHash = 2; +} + +message TxIDBlockPair { + string txID = 1; + RpcBlock block = 2; +} + +message GetAcceptingBlockHashesOfTxsRequestMessage{ + repeated string txID = 1; +} + +message GetAcceptingBlockHashesOfTxsResponseMessage{ + repeated TxIDBlockHashPair txIDBlockHashPair = 1; + + RPCError error = 1000; +} + +message GetAcceptingBlockOfTxRequestMessage{ + string txID = 1; +} + +message GetAcceptingBlockOfTxResponseMessage{ + RpcBlock block = 1; + + RPCError error = 1000; +} + +message GetAcceptingBlocksOfTxsRequestMessage{ + repeated string txID = 1; +} + +message GetAcceptingBlocksOfTxsResponseMessage{ + repeated TxIDBlockPair txIDBlockPair = 1; + + RPCError error = 1000; +} + +message GetIncludingBlockHashOfTxRequestMessage{ + string txID = 1; +} + +message GetIncludingBlockHashOfTxResponseMessage{ + string blockHash = 1; + + RPCError error = 1000; +} + +message GetTxRequestMessage{ + string txID = 1; +} + +message GetTxResponseMessage{ + RpcTransaction transaction = 1; + + + RPCError error = 1000; +} + +message GetTxsRequestMessage{ + repeated string txID = 1; +} + +message GetTxsResponseMessage{ + repeated RpcTransaction transactions = 1; + + + RPCError error = 1000; +} + +message GetTxConfirmationRequestMessage{ + string txID = 1; +} + +message GetTxConfirmationResponseMessage{ + int64 confirmations = 1; + + RPCError error = 1000; +} + +message GetTxsConfirmationRequestMessage{ + repeated string txID = 1; +} + +message GetTxsConfirmationResponseMessage{ + repeated TxIDConfirmations txIDConfirmations = 1; + + RPCError error = 1000; +} \ No newline at end of file From cc937a2d99df0a4b634923f0ffead0728e27ae8e Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Sun, 9 Oct 2022 21:37:08 +0200 Subject: [PATCH 19/47] set up commands --- app/appmessage/message.go | 33 +++++++++++++++++++ .../grpcserver/protowire/messages.proto | 1 + 2 files changed, 34 insertions(+) diff --git a/app/appmessage/message.go b/app/appmessage/message.go index 053b35c7eb..4383ecc4bb 100644 --- a/app/appmessage/message.go +++ b/app/appmessage/message.go @@ -165,6 +165,23 @@ const ( CmdGetCoinSupplyResponseMessage CmdGetAcceptingBlockHashOfTxRequestMessage CmdGetAcceptingBlockHashOfTxResponseMessage + + CmdGetAcceptingBlockHashesOfTxsRequestMessage + CmdGetAcceptingBlockHashesOfTxsResponseMessage + CmdGetAcceptingBlockOfTxRequestMessage + CmdGetAcceptingBlockOfTxResponseMessage + CmdGetAcceptingBlocksOfTxsRequestMessage + CmdGetAcceptingBlocksOfTxsResponseMessage + CmdGetIncludingBlockHashOfTxRequestMessage + CmdGetIncludingBlockHashOfTxResponseMessage + CmdGetTxRequestMessage + CmdGetTxResponseMessage + CmdGetTxsRequestMessage + CmdGetTxsResponseMessage + CmdGetTxConfirmationRequestMessage + CmdGetTxConfirmationResponseMessage + CmdGetTxsConfirmationRequestMessage + CmdGetTxsConfirmationResponseMessage ) // ProtocolMessageCommandToString maps all MessageCommands to their string representation @@ -304,6 +321,22 @@ var RPCMessageCommandToString = map[MessageCommand]string{ CmdGetCoinSupplyResponseMessage: "GetCoinSupplyResponse", CmdGetAcceptingBlockHashOfTxRequestMessage: "GetAcceptingBlockHashOfTxRequest", CmdGetAcceptingBlockHashOfTxResponseMessage: "GetAcceptingBlockHashOfTxResponse", + CmdGetAcceptingBlockHashesOfTxsRequestMessage: "GetAcceptingBlockHashesOfTxsRequest", + CmdGetAcceptingBlockHashesOfTxsResponseMessage: "GetAcceptingBlockHashesOfTxsResponse", + CmdGetAcceptingBlockOfTxRequestMessage: "GetAcceptingBlockOfTxRequest", + CmdGetAcceptingBlockOfTxResponseMessage: "GetAcceptingBlockOfTxResponse", + CmdGetAcceptingBlocksOfTxsRequestMessage: "GetAcceptingBlocksOfTxsRequest", + CmdGetAcceptingBlocksOfTxsResponseMessage: "GetAcceptingBlocksOfTxsResponse", + CmdGetIncludingBlockHashOfTxRequestMessage: "GetIncludingBlockHashOfTxRequest", + CmdGetIncludingBlockHashOfTxResponseMessage: "GetIncludingBlockHashOfTxResponse", + CmdGetTxRequestMessage: "GetTxRequest", + CmdGetTxResponseMessage: "GetTxResponse", + CmdGetTxsRequestMessage: "GetTxsRequest", + CmdGetTxsResponseMessage: "GetTxsResponse", + CmdGetTxConfirmationRequestMessage: "GetTxConfirmationRequest", + CmdGetTxConfirmationResponseMessage: "GetTxConfirmationResponse", + CmdGetTxsConfirmationRequestMessage: "GetTxsConfirmationRequest", + CmdGetTxsConfirmationResponseMessage: "GetTxsConfirmationResponse", } // Message is an interface that describes a kaspa message. A type that diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto index 8a5d7c052b..26f9abe68d 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto @@ -139,6 +139,7 @@ message KaspadMessage { GetMempoolEntriesByAddressesResponseMessage getMempoolEntriesByAddressesResponse = 1085; GetCoinSupplyRequestMessage getCoinSupplyRequest = 1086; GetCoinSupplyResponseMessage getCoinSupplyResponse= 1087; + GetAcceptingBlockHashOfTxRequestMessage getAcceptingBlockHashOfTxRequest = 1088; GetAcceptingBlockHashOfTxResponseMessage getAcceptingBlockHashOfTxResponse = 1089; GetAcceptingBlockHashesOfTxsRequestMessage getAcceptingBlockHashesOfTxsRequest = 1090; From 15937698c5c6b478a175b777a8ca2e0878112dcc Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Mon, 10 Oct 2022 09:37:43 +0200 Subject: [PATCH 20/47] add appmessages --- app/appmessage/message.go | 16 +- .../rpc_get_accepting_block_of_tx.go | 41 +++ ...o => rpc_get_accepting_blockhash_of_tx.go} | 0 .../rpc_get_accepting_blockhashes_of_txs.go | 48 +++ .../rpc_get_accepting_blocks_of_txs.go | 47 +++ .../rpc_get_including_blockhash_of_tx.go | 41 +++ app/appmessage/rpc_get_tx.go | 41 +++ app/appmessage/rpc_get_tx_confirmations.go | 41 +++ app/appmessage/rpc_get_txs.go | 41 +++ app/appmessage/rpc_get_txs_confirmations.go | 48 +++ .../grpcserver/protowire/messages.pb.go | 168 ++++----- .../grpcserver/protowire/messages.proto | 8 +- .../server/grpcserver/protowire/rpc.md | 32 +- .../server/grpcserver/protowire/rpc.pb.go | 341 +++++++++--------- .../server/grpcserver/protowire/rpc.proto | 12 +- 15 files changed, 637 insertions(+), 288 deletions(-) create mode 100644 app/appmessage/rpc_get_accepting_block_of_tx.go rename app/appmessage/{rpc_get_accepting_block_hash_of_tx.go => rpc_get_accepting_blockhash_of_tx.go} (100%) create mode 100644 app/appmessage/rpc_get_accepting_blockhashes_of_txs.go create mode 100644 app/appmessage/rpc_get_accepting_blocks_of_txs.go create mode 100644 app/appmessage/rpc_get_including_blockhash_of_tx.go create mode 100644 app/appmessage/rpc_get_tx.go create mode 100644 app/appmessage/rpc_get_tx_confirmations.go create mode 100644 app/appmessage/rpc_get_txs.go create mode 100644 app/appmessage/rpc_get_txs_confirmations.go diff --git a/app/appmessage/message.go b/app/appmessage/message.go index 4383ecc4bb..d7f6adb8fb 100644 --- a/app/appmessage/message.go +++ b/app/appmessage/message.go @@ -178,10 +178,10 @@ const ( CmdGetTxResponseMessage CmdGetTxsRequestMessage CmdGetTxsResponseMessage - CmdGetTxConfirmationRequestMessage - CmdGetTxConfirmationResponseMessage - CmdGetTxsConfirmationRequestMessage - CmdGetTxsConfirmationResponseMessage + CmdGetTxConfirmationsRequestMessage + CmdGetTxConfirmationsResponseMessage + CmdGetTxsConfirmationsRequestMessage + CmdGetTxsConfirmationsResponseMessage ) // ProtocolMessageCommandToString maps all MessageCommands to their string representation @@ -333,10 +333,10 @@ var RPCMessageCommandToString = map[MessageCommand]string{ CmdGetTxResponseMessage: "GetTxResponse", CmdGetTxsRequestMessage: "GetTxsRequest", CmdGetTxsResponseMessage: "GetTxsResponse", - CmdGetTxConfirmationRequestMessage: "GetTxConfirmationRequest", - CmdGetTxConfirmationResponseMessage: "GetTxConfirmationResponse", - CmdGetTxsConfirmationRequestMessage: "GetTxsConfirmationRequest", - CmdGetTxsConfirmationResponseMessage: "GetTxsConfirmationResponse", + CmdGetTxConfirmationsRequestMessage: "GetTxConfirmationsRequest", + CmdGetTxConfirmationsResponseMessage: "GetTxConfirmationsResponse", + CmdGetTxsConfirmationsRequestMessage: "GetTxsConfirmationsRequest", + CmdGetTxsConfirmationsResponseMessage: "GetTxsConfirmationsResponse", } // Message is an interface that describes a kaspa message. A type that diff --git a/app/appmessage/rpc_get_accepting_block_of_tx.go b/app/appmessage/rpc_get_accepting_block_of_tx.go new file mode 100644 index 0000000000..767b49e342 --- /dev/null +++ b/app/appmessage/rpc_get_accepting_block_of_tx.go @@ -0,0 +1,41 @@ +package appmessage + +// GetAcceptingBlockOfTxRequestMessage is an appmessage corresponding to +// its respective RPC message +type GetAcceptingBlockOfTxRequestMessage struct { + baseMessage + TxID string +} + +// Command returns the protocol command string for the message +func (msg *GetAcceptingBlockOfTxRequestMessage) Command() MessageCommand { + return CmdGetAcceptingBlockHashOfTxRequestMessage +} + +// NewGetAcceptingBlockOfTxRequest returns a instance of the message +func NewGetAcceptingBlockOfTxRequest(txID string) *GetAcceptingBlockOfTxRequestMessage { + return &GetAcceptingBlockOfTxRequestMessage{ + TxID: txID, + } +} + +// GetAcceptingBlockOfTxResponseMessage is an appmessage corresponding to +// its respective RPC message +type GetAcceptingBlockOfTxResponseMessage struct { + baseMessage + Block *RPCBlock + + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *GetAcceptingBlockOfTxResponseMessage) Command() MessageCommand { + return CmdGetAcceptingBlockOfTxResponseMessage +} + +// NewGetAcceptingBlockOfTxResponse returns an instance of the message +func NewGetAcceptingBlockOfTxResponse(block *RPCBlock) *GetAcceptingBlockOfTxResponseMessage { + return &GetAcceptingBlockOfTxResponseMessage{ + Block: block, + } +} diff --git a/app/appmessage/rpc_get_accepting_block_hash_of_tx.go b/app/appmessage/rpc_get_accepting_blockhash_of_tx.go similarity index 100% rename from app/appmessage/rpc_get_accepting_block_hash_of_tx.go rename to app/appmessage/rpc_get_accepting_blockhash_of_tx.go diff --git a/app/appmessage/rpc_get_accepting_blockhashes_of_txs.go b/app/appmessage/rpc_get_accepting_blockhashes_of_txs.go new file mode 100644 index 0000000000..82c014a465 --- /dev/null +++ b/app/appmessage/rpc_get_accepting_blockhashes_of_txs.go @@ -0,0 +1,48 @@ +package appmessage + + + +type TxIdBlockHashPair struct { + TxId string + blockhash string +} + +// GetAcceptingBlockHashesOfTxsRequestMessage is an appmessage corresponding to +// its respective RPC message +type GetAcceptingBlockHashesOfTxsRequestMessage struct { + baseMessage + TxIDs []string +} + +// Command returns the protocol command string for the message +func (msg *GetAcceptingBlockHashesOfTxsRequestMessage) Command() MessageCommand { + return CmdGetAcceptingBlockHashesOfTxsRequestMessage +} + +// NewGetAcceptingBlockHashesOfTxsRequest returns a instance of the message +func NewGetAcceptingBlockHashesOfTxsRequest(txIDs []string) *GetAcceptingBlockHashesOfTxsRequestMessage { + return &GetAcceptingBlockHashesOfTxsRequestMessage{ + TxIDs: txIDs, + } +} + +// GetAcceptingBlockHashesOfTxResponseMessage is an appmessage corresponding to +// its respective RPC message +type GetAcceptingBlockHashesOfTxsResponseMessage struct { + baseMessage + TxIdBlockHashPairs []*TxIdBlockHashPair + + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *GetAcceptingBlockHashesOfTxsResponseMessage) Command() MessageCommand { + return CmdGetAcceptingBlockHashesOfTxsResponseMessage +} + +// NewGetAcceptingBlockHashesOfTxsResponse returns an instance of the message +func NewGetAcceptingBlockHashesOfTxsResponse(txIdBlockHashPairs []*TxIdBlockHashPair) *GetAcceptingBlockHashesOfTxsResponseMessage { + return &GetAcceptingBlockHashesOfTxsResponseMessage{ + TxIdBlockHashPairs: txIdBlockHashPairs, + } +} diff --git a/app/appmessage/rpc_get_accepting_blocks_of_txs.go b/app/appmessage/rpc_get_accepting_blocks_of_txs.go new file mode 100644 index 0000000000..42d7c5b46a --- /dev/null +++ b/app/appmessage/rpc_get_accepting_blocks_of_txs.go @@ -0,0 +1,47 @@ +package appmessage + + +type TxIdBlockPair struct { + TxId string + blockhash RPCBlock +} + +// GetAcceptingBlocksOfTxsRequestMessage is an appmessage corresponding to +// its respective RPC message +type GetAcceptingBlocksOfTxsRequestMessage struct { + baseMessage + TxIDs []string +} + +// Command returns the protocol command string for the message +func (msg *GetAcceptingBlocksOfTxsRequestMessage) Command() MessageCommand { + return CmdGetAcceptingBlocksOfTxsRequestMessage +} + +// NewGetAcceptingBlocksOfTxsRequest returns a instance of the message +func NewGetAcceptingBlocksOfTxsRequest(txIDs []string) *GetAcceptingBlocksOfTxsRequestMessage { + return &GetAcceptingBlocksOfTxsRequestMessage{ + TxIDs: txIDs, + } +} + +// GetAcceptingBlocksOfTxsResponseMessage is an appmessage corresponding to +// its respective RPC message +type GetAcceptingBlocksOfTxsResponseMessage struct { + baseMessage + TxIdBlockPairs []*TxIdBlockPair + + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *GetAcceptingBlocksOfTxsResponseMessage) Command() MessageCommand { + return CmdGetAcceptingBlocksOfTxsResponseMessage +} + +// NewGetAcceptingBlocksOfTxsResponse returns an instance of the message +func NewGetAcceptingBlocksOfTxsResponse(txIdBlockPairs []*TxIdBlockPair) *GetAcceptingBlocksOfTxsResponseMessage { + return &GetAcceptingBlocksOfTxsResponseMessage{ + TxIdBlockPairs: txIdBlockPairs, + } +} diff --git a/app/appmessage/rpc_get_including_blockhash_of_tx.go b/app/appmessage/rpc_get_including_blockhash_of_tx.go new file mode 100644 index 0000000000..71a86cf784 --- /dev/null +++ b/app/appmessage/rpc_get_including_blockhash_of_tx.go @@ -0,0 +1,41 @@ +package appmessage + +// GetIncludingBlockHashOfTxRequestMessage is an appmessage corresponding to +// its respective RPC message +type GetIncludingBlockHashOfTxRequestMessage struct { + baseMessage + TxID string +} + +// Command returns the protocol command string for the message +func (msg *GetIncludingBlockHashOfTxRequestMessage) Command() MessageCommand { + return CmdGetIncludingBlockHashOfTxRequestMessage +} + +// NewGetIncludingBlockHashOfTxRequest returns a instance of the message +func NewGetIncludingBlockHashOfTxRequest(txID string) *GetIncludingBlockHashOfTxRequestMessage { + return &GetIncludingBlockHashOfTxRequestMessage{ + TxID: txID, + } +} + +// GetIncludingBlockHashOfTxResponseMessage is an appmessage corresponding to +// its respective RPC message +type GetIncludingBlockHashOfTxResponseMessage struct { + baseMessage + Hash string + + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *GetIncludingBlockHashOfTxResponseMessage) Command() MessageCommand { + return CmdGetIncludingBlockHashOfTxResponseMessage +} + +// NewGetIncludingBlockHashOfTxResponse returns an instance of the message +func NewGetIncludingBlockHashOfTxResponse(hash string) *GetIncludingBlockHashOfTxResponseMessage { + return &GetIncludingBlockHashOfTxResponseMessage{ + Hash: hash, + } +} diff --git a/app/appmessage/rpc_get_tx.go b/app/appmessage/rpc_get_tx.go new file mode 100644 index 0000000000..d26bc9555e --- /dev/null +++ b/app/appmessage/rpc_get_tx.go @@ -0,0 +1,41 @@ +package appmessage + +// GetTxRequestMessage is an appmessage corresponding to +// its respective RPC message +type GetTxRequestMessage struct { + baseMessage + TxID string +} + +// Command returns the protocol command string for the message +func (msg *GetTxRequestMessage) Command() MessageCommand { + return CmdGetTxRequestMessage +} + +// NewTxRequest returns a instance of the message +func NewGetTxRequest(txID string) *GetTxRequestMessage { + return &GetTxRequestMessage{ + TxID: txID, + } +} + +// GetTxResponseMessage is an appmessage corresponding to +// its respective RPC message +type GetTxResponseMessage struct { + baseMessage + Transaction *RPCTransaction + + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *GetTxResponseMessage) Command() MessageCommand { + return CmdGetTxResponseMessage +} + +// NewGetTxResponse returns an instance of the message +func NewGetTxResponse(transaction *RPCTransaction) *GetTxResponseMessage { + return &GetTxResponseMessage{ + Transaction: transaction, + } +} diff --git a/app/appmessage/rpc_get_tx_confirmations.go b/app/appmessage/rpc_get_tx_confirmations.go new file mode 100644 index 0000000000..44ddc90648 --- /dev/null +++ b/app/appmessage/rpc_get_tx_confirmations.go @@ -0,0 +1,41 @@ +package appmessage + +// GetTxConfirmationsRequestMessage is an appmessage corresponding to +// its respective RPC message +type GetTxConfirmationsRequestMessage struct { + baseMessage + TxID string +} + +// Command returns the protocol command string for the message +func (msg *GetTxConfirmationsRequestMessage) Command() MessageCommand { + return CmdGetTxConfirmationsRequestMessage +} + +// NewGetTxConfirmationsRequest returns a instance of the message +func NewGetTxConfirmationsRequest(txID string) *GetTxConfirmationsRequestMessage { + return &GetTxConfirmationsRequestMessage{ + TxID: txID, + } +} + +// GetTxConfirmationsResponseMessage is an appmessage corresponding to +// its respective RPC message +type GetTxConfirmationsResponseMessage struct { + baseMessage + Confirmations int64 + + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *GetTxConfirmationsResponseMessage) Command() MessageCommand { + return CmdGetTxConfirmationsResponseMessage +} + +// NewGetTxConfirmationsResponse returns an instance of the message +func NewGetTxConfirmationsResponse(confirmations int64) *GetTxConfirmationsResponseMessage { + return &GetTxConfirmationsResponseMessage{ + Confirmations: confirmations, + } +} diff --git a/app/appmessage/rpc_get_txs.go b/app/appmessage/rpc_get_txs.go new file mode 100644 index 0000000000..5e775db04a --- /dev/null +++ b/app/appmessage/rpc_get_txs.go @@ -0,0 +1,41 @@ +package appmessage + +// GetTxsRequestMessage is an appmessage corresponding to +// its respective RPC message +type GetTxsRequestMessage struct { + baseMessage + TxIDs []string +} + +// Command returns the protocol command string for the message +func (msg *GetTxsRequestMessage) Command() MessageCommand { + return CmdGetTxsRequestMessage +} + +// NewGetTxsRequest returns a instance of the message +func NewGetTxsRequest(txIDs []string) *GetTxsRequestMessage { + return &GetTxsRequestMessage{ + TxIDs: txIDs, + } +} + +// GetTxsResponseMessage is an appmessage corresponding to +// its respective RPC message +type GetTxsResponseMessage struct { + baseMessage + Transactions []*RPCTransaction + + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *GetTxsResponseMessage) Command() MessageCommand { + return CmdGetTxsResponseMessage +} + +// NewGetTxsResponse returns an instance of the message +func NewGetTxsResponse(transactions []*RPCTransaction) *GetTxsResponseMessage { + return &GetTxsResponseMessage{ + Transactions: transactions, + } +} diff --git a/app/appmessage/rpc_get_txs_confirmations.go b/app/appmessage/rpc_get_txs_confirmations.go new file mode 100644 index 0000000000..b39ab3df4f --- /dev/null +++ b/app/appmessage/rpc_get_txs_confirmations.go @@ -0,0 +1,48 @@ +package appmessage + +// TxIDConfirmationsPair is an appmessage corresponding to +// its respective RPC message +type TxIDConfirmationsPair struct { + TxID string + Confirmations int64 +} + +// GetTxsConfirmationsRequestMessage is an appmessage corresponding to +// its respective RPC message +type GetTxsConfirmationsRequestMessage struct { + baseMessage + TxIDs []string +} + +// Command returns the protocol command string for the message +func (msg *GetTxsConfirmationsRequestMessage) Command() MessageCommand { + return CmdGetTxsConfirmationsRequestMessage +} + +// NewGetTxsConfirmationsRequest returns a instance of the message +func NewGetTxsConfirmationsRequest(txIDs []string) *GetTxsConfirmationsRequestMessage { + return &GetTxsConfirmationsRequestMessage{ + TxIDs: txIDs, + } +} + +// GetTxsConfirmationsResponseMessage is an appmessage corresponding to +// its respective RPC message +type GetTxsConfirmationsResponseMessage struct { + baseMessage + TxIDConfirmationsPairs []*TxIDConfirmationsPair + + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *GetTxsConfirmationsResponseMessage) Command() MessageCommand { + return CmdGetTxsConfirmationsResponseMessage +} + +// NewGetTxsConfirmationsResponse returns an instance of the message +func NewGetTxsConfirmationsResponse(txIDConfirmationsPairs []*TxIDConfirmationsPair) *GetTxsConfirmationsResponseMessage { + return &GetTxsConfirmationsResponseMessage{ + TxIDConfirmationsPairs: txIDConfirmationsPairs, + } +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go index bd7b85b58b..86086d4524 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go @@ -170,10 +170,10 @@ type KaspadMessage struct { // *KaspadMessage_GetTxResponse // *KaspadMessage_GetTxsRequest // *KaspadMessage_GetTxsResponse - // *KaspadMessage_GetTxConfirmationRequest - // *KaspadMessage_GetTxConfirmationResponse - // *KaspadMessage_GetTxsConfirmationRequest - // *KaspadMessage_GetTxsConfirmationResponse + // *KaspadMessage_GetTxConfirmationsRequest + // *KaspadMessage_GetTxConfirmationsResponse + // *KaspadMessage_GetTxsConfirmationsRequest + // *KaspadMessage_GetTxsConfirmationsResponse Payload isKaspadMessage_Payload `protobuf_oneof:"payload"` } @@ -1224,30 +1224,30 @@ func (x *KaspadMessage) GetGetTxsResponse() *GetTxsResponseMessage { return nil } -func (x *KaspadMessage) GetGetTxConfirmationRequest() *GetTxConfirmationRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetTxConfirmationRequest); ok { - return x.GetTxConfirmationRequest +func (x *KaspadMessage) GetGetTxConfirmationsRequest() *GetTxConfirmationsRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetTxConfirmationsRequest); ok { + return x.GetTxConfirmationsRequest } return nil } -func (x *KaspadMessage) GetGetTxConfirmationResponse() *GetTxConfirmationResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetTxConfirmationResponse); ok { - return x.GetTxConfirmationResponse +func (x *KaspadMessage) GetGetTxConfirmationsResponse() *GetTxConfirmationsResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetTxConfirmationsResponse); ok { + return x.GetTxConfirmationsResponse } return nil } -func (x *KaspadMessage) GetGetTxsConfirmationRequest() *GetTxsConfirmationRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetTxsConfirmationRequest); ok { - return x.GetTxsConfirmationRequest +func (x *KaspadMessage) GetGetTxsConfirmationsRequest() *GetTxsConfirmationsRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetTxsConfirmationsRequest); ok { + return x.GetTxsConfirmationsRequest } return nil } -func (x *KaspadMessage) GetGetTxsConfirmationResponse() *GetTxsConfirmationResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetTxsConfirmationResponse); ok { - return x.GetTxsConfirmationResponse +func (x *KaspadMessage) GetGetTxsConfirmationsResponse() *GetTxsConfirmationsResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetTxsConfirmationsResponse); ok { + return x.GetTxsConfirmationsResponse } return nil } @@ -1832,20 +1832,20 @@ type KaspadMessage_GetTxsResponse struct { GetTxsResponse *GetTxsResponseMessage `protobuf:"bytes,1101,opt,name=getTxsResponse,proto3,oneof"` } -type KaspadMessage_GetTxConfirmationRequest struct { - GetTxConfirmationRequest *GetTxConfirmationRequestMessage `protobuf:"bytes,1102,opt,name=getTxConfirmationRequest,proto3,oneof"` +type KaspadMessage_GetTxConfirmationsRequest struct { + GetTxConfirmationsRequest *GetTxConfirmationsRequestMessage `protobuf:"bytes,1102,opt,name=getTxConfirmationsRequest,proto3,oneof"` } -type KaspadMessage_GetTxConfirmationResponse struct { - GetTxConfirmationResponse *GetTxConfirmationResponseMessage `protobuf:"bytes,1103,opt,name=getTxConfirmationResponse,proto3,oneof"` +type KaspadMessage_GetTxConfirmationsResponse struct { + GetTxConfirmationsResponse *GetTxConfirmationsResponseMessage `protobuf:"bytes,1103,opt,name=getTxConfirmationsResponse,proto3,oneof"` } -type KaspadMessage_GetTxsConfirmationRequest struct { - GetTxsConfirmationRequest *GetTxsConfirmationRequestMessage `protobuf:"bytes,1104,opt,name=getTxsConfirmationRequest,proto3,oneof"` +type KaspadMessage_GetTxsConfirmationsRequest struct { + GetTxsConfirmationsRequest *GetTxsConfirmationsRequestMessage `protobuf:"bytes,1104,opt,name=getTxsConfirmationsRequest,proto3,oneof"` } -type KaspadMessage_GetTxsConfirmationResponse struct { - GetTxsConfirmationResponse *GetTxsConfirmationResponseMessage `protobuf:"bytes,1105,opt,name=getTxsConfirmationResponse,proto3,oneof"` +type KaspadMessage_GetTxsConfirmationsResponse struct { + GetTxsConfirmationsResponse *GetTxsConfirmationsResponseMessage `protobuf:"bytes,1105,opt,name=getTxsConfirmationsResponse,proto3,oneof"` } func (*KaspadMessage_Addresses) isKaspadMessage_Payload() {} @@ -2136,13 +2136,13 @@ func (*KaspadMessage_GetTxsRequest) isKaspadMessage_Payload() {} func (*KaspadMessage_GetTxsResponse) isKaspadMessage_Payload() {} -func (*KaspadMessage_GetTxConfirmationRequest) isKaspadMessage_Payload() {} +func (*KaspadMessage_GetTxConfirmationsRequest) isKaspadMessage_Payload() {} -func (*KaspadMessage_GetTxConfirmationResponse) isKaspadMessage_Payload() {} +func (*KaspadMessage_GetTxConfirmationsResponse) isKaspadMessage_Payload() {} -func (*KaspadMessage_GetTxsConfirmationRequest) isKaspadMessage_Payload() {} +func (*KaspadMessage_GetTxsConfirmationsRequest) isKaspadMessage_Payload() {} -func (*KaspadMessage_GetTxsConfirmationResponse) isKaspadMessage_Payload() {} +func (*KaspadMessage_GetTxsConfirmationsResponse) isKaspadMessage_Payload() {} var File_messages_proto protoreflect.FileDescriptor @@ -2150,7 +2150,7 @@ var file_messages_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x1a, 0x09, 0x70, 0x32, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x09, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xbc, 0x7d, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x6f, 0x22, 0xc8, 0x7d, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4d, 0x65, 0x73, 0x73, @@ -3125,49 +3125,49 @@ var file_messages_proto_rawDesc = []byte{ 0x73, 0x65, 0x18, 0xcd, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x67, - 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, - 0x18, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xce, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, - 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x54, - 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xcf, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, - 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0xd0, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, 0x54, 0x78, - 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x6f, 0x0a, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0xd1, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, - 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x32, 0x50, 0x0a, 0x03, 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, - 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, - 0x30, 0x01, 0x32, 0x50, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, - 0x28, 0x01, 0x30, 0x01, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, - 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, + 0x19, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xce, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, + 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x19, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6f, 0x0a, 0x1a, 0x67, + 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xcf, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, + 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x1a, + 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xd0, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, + 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x72, 0x0a, + 0x1b, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xd1, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x32, 0x50, 0x0a, 0x03, + 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0x50, + 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, + 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, + 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, + 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3328,10 +3328,10 @@ var file_messages_proto_goTypes = []interface{}{ (*GetTxResponseMessage)(nil), // 141: protowire.GetTxResponseMessage (*GetTxsRequestMessage)(nil), // 142: protowire.GetTxsRequestMessage (*GetTxsResponseMessage)(nil), // 143: protowire.GetTxsResponseMessage - (*GetTxConfirmationRequestMessage)(nil), // 144: protowire.GetTxConfirmationRequestMessage - (*GetTxConfirmationResponseMessage)(nil), // 145: protowire.GetTxConfirmationResponseMessage - (*GetTxsConfirmationRequestMessage)(nil), // 146: protowire.GetTxsConfirmationRequestMessage - (*GetTxsConfirmationResponseMessage)(nil), // 147: protowire.GetTxsConfirmationResponseMessage + (*GetTxConfirmationsRequestMessage)(nil), // 144: protowire.GetTxConfirmationsRequestMessage + (*GetTxConfirmationsResponseMessage)(nil), // 145: protowire.GetTxConfirmationsResponseMessage + (*GetTxsConfirmationsRequestMessage)(nil), // 146: protowire.GetTxsConfirmationsRequestMessage + (*GetTxsConfirmationsResponseMessage)(nil), // 147: protowire.GetTxsConfirmationsResponseMessage } var file_messages_proto_depIdxs = []int32{ 1, // 0: protowire.KaspadMessage.addresses:type_name -> protowire.AddressesMessage @@ -3478,10 +3478,10 @@ var file_messages_proto_depIdxs = []int32{ 141, // 141: protowire.KaspadMessage.getTxResponse:type_name -> protowire.GetTxResponseMessage 142, // 142: protowire.KaspadMessage.getTxsRequest:type_name -> protowire.GetTxsRequestMessage 143, // 143: protowire.KaspadMessage.getTxsResponse:type_name -> protowire.GetTxsResponseMessage - 144, // 144: protowire.KaspadMessage.getTxConfirmationRequest:type_name -> protowire.GetTxConfirmationRequestMessage - 145, // 145: protowire.KaspadMessage.getTxConfirmationResponse:type_name -> protowire.GetTxConfirmationResponseMessage - 146, // 146: protowire.KaspadMessage.getTxsConfirmationRequest:type_name -> protowire.GetTxsConfirmationRequestMessage - 147, // 147: protowire.KaspadMessage.getTxsConfirmationResponse:type_name -> protowire.GetTxsConfirmationResponseMessage + 144, // 144: protowire.KaspadMessage.getTxConfirmationsRequest:type_name -> protowire.GetTxConfirmationsRequestMessage + 145, // 145: protowire.KaspadMessage.getTxConfirmationsResponse:type_name -> protowire.GetTxConfirmationsResponseMessage + 146, // 146: protowire.KaspadMessage.getTxsConfirmationsRequest:type_name -> protowire.GetTxsConfirmationsRequestMessage + 147, // 147: protowire.KaspadMessage.getTxsConfirmationsResponse:type_name -> protowire.GetTxsConfirmationsResponseMessage 0, // 148: protowire.P2P.MessageStream:input_type -> protowire.KaspadMessage 0, // 149: protowire.RPC.MessageStream:input_type -> protowire.KaspadMessage 0, // 150: protowire.P2P.MessageStream:output_type -> protowire.KaspadMessage @@ -3659,10 +3659,10 @@ func file_messages_proto_init() { (*KaspadMessage_GetTxResponse)(nil), (*KaspadMessage_GetTxsRequest)(nil), (*KaspadMessage_GetTxsResponse)(nil), - (*KaspadMessage_GetTxConfirmationRequest)(nil), - (*KaspadMessage_GetTxConfirmationResponse)(nil), - (*KaspadMessage_GetTxsConfirmationRequest)(nil), - (*KaspadMessage_GetTxsConfirmationResponse)(nil), + (*KaspadMessage_GetTxConfirmationsRequest)(nil), + (*KaspadMessage_GetTxConfirmationsResponse)(nil), + (*KaspadMessage_GetTxsConfirmationsRequest)(nil), + (*KaspadMessage_GetTxsConfirmationsResponse)(nil), } type x struct{} out := protoimpl.TypeBuilder{ diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto index 26f9abe68d..83ca1df5e1 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto @@ -154,10 +154,10 @@ message KaspadMessage { GetTxResponseMessage getTxResponse = 1099; GetTxsRequestMessage getTxsRequest = 1100; GetTxsResponseMessage getTxsResponse = 1101; - GetTxConfirmationRequestMessage getTxConfirmationRequest = 1102; - GetTxConfirmationResponseMessage getTxConfirmationResponse = 1103; - GetTxsConfirmationRequestMessage getTxsConfirmationRequest = 1104; - GetTxsConfirmationResponseMessage getTxsConfirmationResponse = 1105; + GetTxConfirmationsRequestMessage getTxConfirmationsRequest = 1102; + GetTxConfirmationsResponseMessage getTxConfirmationsResponse = 1103; + GetTxsConfirmationsRequestMessage getTxsConfirmationsRequest = 1104; + GetTxsConfirmationsResponseMessage getTxsConfirmationsResponse = 1105; } } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md index d0afd72518..c930493b28 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md @@ -114,7 +114,7 @@ - [GetMempoolEntriesByAddressesResponseMessage](#protowire.GetMempoolEntriesByAddressesResponseMessage) - [GetCoinSupplyRequestMessage](#protowire.GetCoinSupplyRequestMessage) - [GetCoinSupplyResponseMessage](#protowire.GetCoinSupplyResponseMessage) - - [TxIDConfirmations](#protowire.TxIDConfirmations) + - [TxIDConfirmationsPair](#protowire.TxIDConfirmationsPair) - [TxIDBlockHashPair](#protowire.TxIDBlockHashPair) - [TxIDBlockPair](#protowire.TxIDBlockPair) - [GetAcceptingBlockHashesOfTxsRequestMessage](#protowire.GetAcceptingBlockHashesOfTxsRequestMessage) @@ -129,10 +129,10 @@ - [GetTxResponseMessage](#protowire.GetTxResponseMessage) - [GetTxsRequestMessage](#protowire.GetTxsRequestMessage) - [GetTxsResponseMessage](#protowire.GetTxsResponseMessage) - - [GetTxConfirmationRequestMessage](#protowire.GetTxConfirmationRequestMessage) - - [GetTxConfirmationResponseMessage](#protowire.GetTxConfirmationResponseMessage) - - [GetTxsConfirmationRequestMessage](#protowire.GetTxsConfirmationRequestMessage) - - [GetTxsConfirmationResponseMessage](#protowire.GetTxsConfirmationResponseMessage) + - [GetTxConfirmationsRequestMessage](#protowire.GetTxConfirmationsRequestMessage) + - [GetTxConfirmationsResponseMessage](#protowire.GetTxConfirmationsResponseMessage) + - [GetTxsConfirmationsRequestMessage](#protowire.GetTxsConfirmationsRequestMessage) + - [GetTxsConfirmationsResponseMessage](#protowire.GetTxsConfirmationsResponseMessage) - [SubmitBlockResponseMessage.RejectReason](#protowire.SubmitBlockResponseMessage.RejectReason) @@ -1910,9 +1910,9 @@ See NotifyNewBlockTemplateRequestMessage - + -### TxIDConfirmations +### TxIDConfirmationsPair @@ -2144,9 +2144,9 @@ See NotifyNewBlockTemplateRequestMessage - + -### GetTxConfirmationRequestMessage +### GetTxConfirmationsRequestMessage @@ -2159,9 +2159,9 @@ See NotifyNewBlockTemplateRequestMessage - + -### GetTxConfirmationResponseMessage +### GetTxConfirmationsResponseMessage @@ -2175,9 +2175,9 @@ See NotifyNewBlockTemplateRequestMessage - + -### GetTxsConfirmationRequestMessage +### GetTxsConfirmationsRequestMessage @@ -2190,15 +2190,15 @@ See NotifyNewBlockTemplateRequestMessage - + -### GetTxsConfirmationResponseMessage +### GetTxsConfirmationsResponseMessage | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| txIDConfirmations | [TxIDConfirmations](#protowire.TxIDConfirmations) | repeated | | +| txIDConfirmations | [TxIDConfirmationsPair](#protowire.TxIDConfirmationsPair) | repeated | | | error | [RPCError](#protowire.RPCError) | | | diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go index bfb379aeab..6666c7e9ac 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go @@ -6215,7 +6215,7 @@ func (x *GetCoinSupplyResponseMessage) GetError() *RPCError { return nil } -type TxIDConfirmations struct { +type TxIDConfirmationsPair struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -6224,8 +6224,8 @@ type TxIDConfirmations struct { Confirmations int32 `protobuf:"varint,2,opt,name=confirmations,proto3" json:"confirmations,omitempty"` } -func (x *TxIDConfirmations) Reset() { - *x = TxIDConfirmations{} +func (x *TxIDConfirmationsPair) Reset() { + *x = TxIDConfirmationsPair{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6233,13 +6233,13 @@ func (x *TxIDConfirmations) Reset() { } } -func (x *TxIDConfirmations) String() string { +func (x *TxIDConfirmationsPair) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TxIDConfirmations) ProtoMessage() {} +func (*TxIDConfirmationsPair) ProtoMessage() {} -func (x *TxIDConfirmations) ProtoReflect() protoreflect.Message { +func (x *TxIDConfirmationsPair) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[110] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6251,19 +6251,19 @@ func (x *TxIDConfirmations) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TxIDConfirmations.ProtoReflect.Descriptor instead. -func (*TxIDConfirmations) Descriptor() ([]byte, []int) { +// Deprecated: Use TxIDConfirmationsPair.ProtoReflect.Descriptor instead. +func (*TxIDConfirmationsPair) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{110} } -func (x *TxIDConfirmations) GetTxID() string { +func (x *TxIDConfirmationsPair) GetTxID() string { if x != nil { return x.TxID } return "" } -func (x *TxIDConfirmations) GetConfirmations() int32 { +func (x *TxIDConfirmationsPair) GetConfirmations() int32 { if x != nil { return x.Confirmations } @@ -6992,7 +6992,7 @@ func (x *GetTxsResponseMessage) GetError() *RPCError { return nil } -type GetTxConfirmationRequestMessage struct { +type GetTxConfirmationsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -7000,8 +7000,8 @@ type GetTxConfirmationRequestMessage struct { TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` } -func (x *GetTxConfirmationRequestMessage) Reset() { - *x = GetTxConfirmationRequestMessage{} +func (x *GetTxConfirmationsRequestMessage) Reset() { + *x = GetTxConfirmationsRequestMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[125] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7009,13 +7009,13 @@ func (x *GetTxConfirmationRequestMessage) Reset() { } } -func (x *GetTxConfirmationRequestMessage) String() string { +func (x *GetTxConfirmationsRequestMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetTxConfirmationRequestMessage) ProtoMessage() {} +func (*GetTxConfirmationsRequestMessage) ProtoMessage() {} -func (x *GetTxConfirmationRequestMessage) ProtoReflect() protoreflect.Message { +func (x *GetTxConfirmationsRequestMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[125] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7027,19 +7027,19 @@ func (x *GetTxConfirmationRequestMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetTxConfirmationRequestMessage.ProtoReflect.Descriptor instead. -func (*GetTxConfirmationRequestMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use GetTxConfirmationsRequestMessage.ProtoReflect.Descriptor instead. +func (*GetTxConfirmationsRequestMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{125} } -func (x *GetTxConfirmationRequestMessage) GetTxID() string { +func (x *GetTxConfirmationsRequestMessage) GetTxID() string { if x != nil { return x.TxID } return "" } -type GetTxConfirmationResponseMessage struct { +type GetTxConfirmationsResponseMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -7048,8 +7048,8 @@ type GetTxConfirmationResponseMessage struct { Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } -func (x *GetTxConfirmationResponseMessage) Reset() { - *x = GetTxConfirmationResponseMessage{} +func (x *GetTxConfirmationsResponseMessage) Reset() { + *x = GetTxConfirmationsResponseMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[126] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7057,13 +7057,13 @@ func (x *GetTxConfirmationResponseMessage) Reset() { } } -func (x *GetTxConfirmationResponseMessage) String() string { +func (x *GetTxConfirmationsResponseMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetTxConfirmationResponseMessage) ProtoMessage() {} +func (*GetTxConfirmationsResponseMessage) ProtoMessage() {} -func (x *GetTxConfirmationResponseMessage) ProtoReflect() protoreflect.Message { +func (x *GetTxConfirmationsResponseMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[126] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7075,26 +7075,26 @@ func (x *GetTxConfirmationResponseMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetTxConfirmationResponseMessage.ProtoReflect.Descriptor instead. -func (*GetTxConfirmationResponseMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use GetTxConfirmationsResponseMessage.ProtoReflect.Descriptor instead. +func (*GetTxConfirmationsResponseMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{126} } -func (x *GetTxConfirmationResponseMessage) GetConfirmations() int64 { +func (x *GetTxConfirmationsResponseMessage) GetConfirmations() int64 { if x != nil { return x.Confirmations } return 0 } -func (x *GetTxConfirmationResponseMessage) GetError() *RPCError { +func (x *GetTxConfirmationsResponseMessage) GetError() *RPCError { if x != nil { return x.Error } return nil } -type GetTxsConfirmationRequestMessage struct { +type GetTxsConfirmationsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -7102,8 +7102,8 @@ type GetTxsConfirmationRequestMessage struct { TxID []string `protobuf:"bytes,1,rep,name=txID,proto3" json:"txID,omitempty"` } -func (x *GetTxsConfirmationRequestMessage) Reset() { - *x = GetTxsConfirmationRequestMessage{} +func (x *GetTxsConfirmationsRequestMessage) Reset() { + *x = GetTxsConfirmationsRequestMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7111,13 +7111,13 @@ func (x *GetTxsConfirmationRequestMessage) Reset() { } } -func (x *GetTxsConfirmationRequestMessage) String() string { +func (x *GetTxsConfirmationsRequestMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetTxsConfirmationRequestMessage) ProtoMessage() {} +func (*GetTxsConfirmationsRequestMessage) ProtoMessage() {} -func (x *GetTxsConfirmationRequestMessage) ProtoReflect() protoreflect.Message { +func (x *GetTxsConfirmationsRequestMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[127] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7129,29 +7129,29 @@ func (x *GetTxsConfirmationRequestMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetTxsConfirmationRequestMessage.ProtoReflect.Descriptor instead. -func (*GetTxsConfirmationRequestMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use GetTxsConfirmationsRequestMessage.ProtoReflect.Descriptor instead. +func (*GetTxsConfirmationsRequestMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{127} } -func (x *GetTxsConfirmationRequestMessage) GetTxID() []string { +func (x *GetTxsConfirmationsRequestMessage) GetTxID() []string { if x != nil { return x.TxID } return nil } -type GetTxsConfirmationResponseMessage struct { +type GetTxsConfirmationsResponseMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxIDConfirmations []*TxIDConfirmations `protobuf:"bytes,1,rep,name=txIDConfirmations,proto3" json:"txIDConfirmations,omitempty"` - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` + TxIDConfirmations []*TxIDConfirmationsPair `protobuf:"bytes,1,rep,name=txIDConfirmations,proto3" json:"txIDConfirmations,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } -func (x *GetTxsConfirmationResponseMessage) Reset() { - *x = GetTxsConfirmationResponseMessage{} +func (x *GetTxsConfirmationsResponseMessage) Reset() { + *x = GetTxsConfirmationsResponseMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[128] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7159,13 +7159,13 @@ func (x *GetTxsConfirmationResponseMessage) Reset() { } } -func (x *GetTxsConfirmationResponseMessage) String() string { +func (x *GetTxsConfirmationsResponseMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetTxsConfirmationResponseMessage) ProtoMessage() {} +func (*GetTxsConfirmationsResponseMessage) ProtoMessage() {} -func (x *GetTxsConfirmationResponseMessage) ProtoReflect() protoreflect.Message { +func (x *GetTxsConfirmationsResponseMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[128] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7177,19 +7177,19 @@ func (x *GetTxsConfirmationResponseMessage) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use GetTxsConfirmationResponseMessage.ProtoReflect.Descriptor instead. -func (*GetTxsConfirmationResponseMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use GetTxsConfirmationsResponseMessage.ProtoReflect.Descriptor instead. +func (*GetTxsConfirmationsResponseMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{128} } -func (x *GetTxsConfirmationResponseMessage) GetTxIDConfirmations() []*TxIDConfirmations { +func (x *GetTxsConfirmationsResponseMessage) GetTxIDConfirmations() []*TxIDConfirmationsPair { if x != nil { return x.TxIDConfirmations } return nil } -func (x *GetTxsConfirmationResponseMessage) GetError() *RPCError { +func (x *GetTxsConfirmationsResponseMessage) GetError() *RPCError { if x != nil { return x.Error } @@ -8010,121 +8010,122 @@ var file_rpc_proto_rawDesc = []byte{ 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4d, 0x0a, 0x11, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, - 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x24, 0x0a, - 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x45, 0x0a, 0x11, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x22, 0x4e, 0x0a, 0x0d, 0x54, 0x78, - 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, - 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x40, 0x0a, 0x2a, 0x47, 0x65, - 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0xa5, 0x01, 0x0a, - 0x2b, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4a, 0x0a, 0x11, - 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, - 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, - 0x68, 0x50, 0x61, 0x69, 0x72, 0x52, 0x11, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x39, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, - 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, - 0x7d, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x51, 0x0a, 0x15, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, + 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x45, 0x0a, 0x11, 0x54, 0x78, 0x49, 0x44, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, + 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x22, 0x4e, + 0x0a, 0x0d, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x78, 0x49, 0x44, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3b, - 0x0a, 0x25, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x94, 0x01, 0x0a, 0x26, - 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0d, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x40, + 0x0a, 0x2a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, + 0x22, 0xa5, 0x01, 0x0a, 0x2b, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, + 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x4a, 0x0a, 0x11, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, + 0x68, 0x50, 0x61, 0x69, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x52, 0x11, 0x74, 0x78, 0x49, 0x44, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x12, 0x2a, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x39, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, + 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x78, 0x49, 0x44, 0x22, 0x7d, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, + 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, + 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, - 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, - 0x44, 0x22, 0x74, 0x0a, 0x28, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, - 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x29, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x78, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, - 0x49, 0x44, 0x22, 0x7f, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, + 0x6f, 0x72, 0x22, 0x3b, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, + 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, - 0x82, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x35, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x74, 0x0a, 0x20, 0x47, - 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x36, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x9b, 0x01, 0x0a, 0x21, 0x47, 0x65, - 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x4a, 0x0a, 0x11, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x11, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, + 0x94, 0x01, 0x0a, 0x26, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x74, 0x78, + 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, + 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0d, 0x74, 0x78, 0x49, + 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, + 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x74, 0x0a, 0x28, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, + 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, + 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x29, 0x0a, 0x13, 0x47, + 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x7f, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, + 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x78, 0x49, 0x44, 0x22, 0x82, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, + 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x36, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x54, + 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, + 0x22, 0x75, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, - 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x37, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, + 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, + 0x22, 0xa0, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x11, 0x74, 0x78, 0x49, 0x44, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, + 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x50, 0x61, 0x69, 0x72, 0x52, 0x11, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, + 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -8253,7 +8254,7 @@ var file_rpc_proto_goTypes = []interface{}{ (*GetMempoolEntriesByAddressesResponseMessage)(nil), // 108: protowire.GetMempoolEntriesByAddressesResponseMessage (*GetCoinSupplyRequestMessage)(nil), // 109: protowire.GetCoinSupplyRequestMessage (*GetCoinSupplyResponseMessage)(nil), // 110: protowire.GetCoinSupplyResponseMessage - (*TxIDConfirmations)(nil), // 111: protowire.TxIDConfirmations + (*TxIDConfirmationsPair)(nil), // 111: protowire.TxIDConfirmationsPair (*TxIDBlockHashPair)(nil), // 112: protowire.TxIDBlockHashPair (*TxIDBlockPair)(nil), // 113: protowire.TxIDBlockPair (*GetAcceptingBlockHashesOfTxsRequestMessage)(nil), // 114: protowire.GetAcceptingBlockHashesOfTxsRequestMessage @@ -8268,10 +8269,10 @@ var file_rpc_proto_goTypes = []interface{}{ (*GetTxResponseMessage)(nil), // 123: protowire.GetTxResponseMessage (*GetTxsRequestMessage)(nil), // 124: protowire.GetTxsRequestMessage (*GetTxsResponseMessage)(nil), // 125: protowire.GetTxsResponseMessage - (*GetTxConfirmationRequestMessage)(nil), // 126: protowire.GetTxConfirmationRequestMessage - (*GetTxConfirmationResponseMessage)(nil), // 127: protowire.GetTxConfirmationResponseMessage - (*GetTxsConfirmationRequestMessage)(nil), // 128: protowire.GetTxsConfirmationRequestMessage - (*GetTxsConfirmationResponseMessage)(nil), // 129: protowire.GetTxsConfirmationResponseMessage + (*GetTxConfirmationsRequestMessage)(nil), // 126: protowire.GetTxConfirmationsRequestMessage + (*GetTxConfirmationsResponseMessage)(nil), // 127: protowire.GetTxConfirmationsResponseMessage + (*GetTxsConfirmationsRequestMessage)(nil), // 128: protowire.GetTxsConfirmationsRequestMessage + (*GetTxsConfirmationsResponseMessage)(nil), // 129: protowire.GetTxsConfirmationsResponseMessage } var file_rpc_proto_depIdxs = []int32{ 3, // 0: protowire.RpcBlock.header:type_name -> protowire.RpcBlockHeader @@ -8363,9 +8364,9 @@ var file_rpc_proto_depIdxs = []int32{ 1, // 86: protowire.GetTxResponseMessage.error:type_name -> protowire.RPCError 6, // 87: protowire.GetTxsResponseMessage.transactions:type_name -> protowire.RpcTransaction 1, // 88: protowire.GetTxsResponseMessage.error:type_name -> protowire.RPCError - 1, // 89: protowire.GetTxConfirmationResponseMessage.error:type_name -> protowire.RPCError - 111, // 90: protowire.GetTxsConfirmationResponseMessage.txIDConfirmations:type_name -> protowire.TxIDConfirmations - 1, // 91: protowire.GetTxsConfirmationResponseMessage.error:type_name -> protowire.RPCError + 1, // 89: protowire.GetTxConfirmationsResponseMessage.error:type_name -> protowire.RPCError + 111, // 90: protowire.GetTxsConfirmationsResponseMessage.txIDConfirmations:type_name -> protowire.TxIDConfirmationsPair + 1, // 91: protowire.GetTxsConfirmationsResponseMessage.error:type_name -> protowire.RPCError 92, // [92:92] is the sub-list for method output_type 92, // [92:92] is the sub-list for method input_type 92, // [92:92] is the sub-list for extension type_name @@ -9700,7 +9701,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TxIDConfirmations); i { + switch v := v.(*TxIDConfirmationsPair); i { case 0: return &v.state case 1: @@ -9880,7 +9881,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[125].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxConfirmationRequestMessage); i { + switch v := v.(*GetTxConfirmationsRequestMessage); i { case 0: return &v.state case 1: @@ -9892,7 +9893,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[126].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxConfirmationResponseMessage); i { + switch v := v.(*GetTxConfirmationsResponseMessage); i { case 0: return &v.state case 1: @@ -9904,7 +9905,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[127].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxsConfirmationRequestMessage); i { + switch v := v.(*GetTxsConfirmationsRequestMessage); i { case 0: return &v.state case 1: @@ -9916,7 +9917,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[128].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxsConfirmationResponseMessage); i { + switch v := v.(*GetTxsConfirmationsResponseMessage); i { case 0: return &v.state case 1: diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto index 0dde68f57f..55c6333c03 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto @@ -734,7 +734,7 @@ message GetCoinSupplyResponseMessage{ RPCError error = 1000; } -message TxIDConfirmations { +message TxIDConfirmationsPair { string txID = 1; int32 confirmations = 2; } @@ -811,22 +811,22 @@ message GetTxsResponseMessage{ RPCError error = 1000; } -message GetTxConfirmationRequestMessage{ +message GetTxConfirmationsRequestMessage{ string txID = 1; } -message GetTxConfirmationResponseMessage{ +message GetTxConfirmationsResponseMessage{ int64 confirmations = 1; RPCError error = 1000; } -message GetTxsConfirmationRequestMessage{ +message GetTxsConfirmationsRequestMessage{ repeated string txID = 1; } -message GetTxsConfirmationResponseMessage{ - repeated TxIDConfirmations txIDConfirmations = 1; +message GetTxsConfirmationsResponseMessage{ + repeated TxIDConfirmationsPair txIDConfirmations = 1; RPCError error = 1000; } \ No newline at end of file From 06c67068ce6259f74d26842ab781bd0613dc62be Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Mon, 10 Oct 2022 10:01:35 +0200 Subject: [PATCH 21/47] pass tests - linting & fmt --- app/appmessage/message.go | 8 ++++---- .../rpc_get_accepting_blockhashes_of_txs.go | 16 ++++++++-------- .../rpc_get_accepting_blocks_of_txs.go | 15 ++++++++------- app/appmessage/rpc_get_tx.go | 2 +- app/appmessage/rpc_get_txs_confirmations.go | 4 ++-- 5 files changed, 23 insertions(+), 22 deletions(-) diff --git a/app/appmessage/message.go b/app/appmessage/message.go index d7f6adb8fb..2b2c934c74 100644 --- a/app/appmessage/message.go +++ b/app/appmessage/message.go @@ -333,10 +333,10 @@ var RPCMessageCommandToString = map[MessageCommand]string{ CmdGetTxResponseMessage: "GetTxResponse", CmdGetTxsRequestMessage: "GetTxsRequest", CmdGetTxsResponseMessage: "GetTxsResponse", - CmdGetTxConfirmationsRequestMessage: "GetTxConfirmationsRequest", - CmdGetTxConfirmationsResponseMessage: "GetTxConfirmationsResponse", - CmdGetTxsConfirmationsRequestMessage: "GetTxsConfirmationsRequest", - CmdGetTxsConfirmationsResponseMessage: "GetTxsConfirmationsResponse", + CmdGetTxConfirmationsRequestMessage: "GetTxConfirmationsRequest", + CmdGetTxConfirmationsResponseMessage: "GetTxConfirmationsResponse", + CmdGetTxsConfirmationsRequestMessage: "GetTxsConfirmationsRequest", + CmdGetTxsConfirmationsResponseMessage: "GetTxsConfirmationsResponse", } // Message is an interface that describes a kaspa message. A type that diff --git a/app/appmessage/rpc_get_accepting_blockhashes_of_txs.go b/app/appmessage/rpc_get_accepting_blockhashes_of_txs.go index 82c014a465..e2035a9f9c 100644 --- a/app/appmessage/rpc_get_accepting_blockhashes_of_txs.go +++ b/app/appmessage/rpc_get_accepting_blockhashes_of_txs.go @@ -1,9 +1,9 @@ package appmessage - - -type TxIdBlockHashPair struct { - TxId string +// TxIDBlockHashPair is an appmessage corresponding to +// its respective RPC message +type TxIDBlockHashPair struct { + TxID string blockhash string } @@ -26,11 +26,11 @@ func NewGetAcceptingBlockHashesOfTxsRequest(txIDs []string) *GetAcceptingBlockHa } } -// GetAcceptingBlockHashesOfTxResponseMessage is an appmessage corresponding to +// GetAcceptingBlockHashesOfTxsResponseMessage is an appmessage corresponding to // its respective RPC message type GetAcceptingBlockHashesOfTxsResponseMessage struct { baseMessage - TxIdBlockHashPairs []*TxIdBlockHashPair + TxIDBlockHashPairs []*TxIDBlockHashPair Error *RPCError } @@ -41,8 +41,8 @@ func (msg *GetAcceptingBlockHashesOfTxsResponseMessage) Command() MessageCommand } // NewGetAcceptingBlockHashesOfTxsResponse returns an instance of the message -func NewGetAcceptingBlockHashesOfTxsResponse(txIdBlockHashPairs []*TxIdBlockHashPair) *GetAcceptingBlockHashesOfTxsResponseMessage { +func NewGetAcceptingBlockHashesOfTxsResponse(txIDBlockHashPairs []*TxIDBlockHashPair) *GetAcceptingBlockHashesOfTxsResponseMessage { return &GetAcceptingBlockHashesOfTxsResponseMessage{ - TxIdBlockHashPairs: txIdBlockHashPairs, + TxIDBlockHashPairs: txIDBlockHashPairs, } } diff --git a/app/appmessage/rpc_get_accepting_blocks_of_txs.go b/app/appmessage/rpc_get_accepting_blocks_of_txs.go index 42d7c5b46a..b496eabfac 100644 --- a/app/appmessage/rpc_get_accepting_blocks_of_txs.go +++ b/app/appmessage/rpc_get_accepting_blocks_of_txs.go @@ -1,9 +1,10 @@ package appmessage - -type TxIdBlockPair struct { - TxId string - blockhash RPCBlock +// TxIDBlockPair is an appmessage corresponding to +// its respective RPC message +type TxIDBlockPair struct { + TxID string + BlockHash RPCBlock } // GetAcceptingBlocksOfTxsRequestMessage is an appmessage corresponding to @@ -29,7 +30,7 @@ func NewGetAcceptingBlocksOfTxsRequest(txIDs []string) *GetAcceptingBlocksOfTxsR // its respective RPC message type GetAcceptingBlocksOfTxsResponseMessage struct { baseMessage - TxIdBlockPairs []*TxIdBlockPair + TxIDBlockPairs []*TxIDBlockPair Error *RPCError } @@ -40,8 +41,8 @@ func (msg *GetAcceptingBlocksOfTxsResponseMessage) Command() MessageCommand { } // NewGetAcceptingBlocksOfTxsResponse returns an instance of the message -func NewGetAcceptingBlocksOfTxsResponse(txIdBlockPairs []*TxIdBlockPair) *GetAcceptingBlocksOfTxsResponseMessage { +func NewGetAcceptingBlocksOfTxsResponse(txIDBlockPairs []*TxIDBlockPair) *GetAcceptingBlocksOfTxsResponseMessage { return &GetAcceptingBlocksOfTxsResponseMessage{ - TxIdBlockPairs: txIdBlockPairs, + TxIDBlockPairs: txIDBlockPairs, } } diff --git a/app/appmessage/rpc_get_tx.go b/app/appmessage/rpc_get_tx.go index d26bc9555e..1909168756 100644 --- a/app/appmessage/rpc_get_tx.go +++ b/app/appmessage/rpc_get_tx.go @@ -12,7 +12,7 @@ func (msg *GetTxRequestMessage) Command() MessageCommand { return CmdGetTxRequestMessage } -// NewTxRequest returns a instance of the message +// NewGetTxRequest returns a instance of the message func NewGetTxRequest(txID string) *GetTxRequestMessage { return &GetTxRequestMessage{ TxID: txID, diff --git a/app/appmessage/rpc_get_txs_confirmations.go b/app/appmessage/rpc_get_txs_confirmations.go index b39ab3df4f..2b14438215 100644 --- a/app/appmessage/rpc_get_txs_confirmations.go +++ b/app/appmessage/rpc_get_txs_confirmations.go @@ -3,8 +3,8 @@ package appmessage // TxIDConfirmationsPair is an appmessage corresponding to // its respective RPC message type TxIDConfirmationsPair struct { - TxID string - Confirmations int64 + TxID string + Confirmations int64 } // GetTxsConfirmationsRequestMessage is an appmessage corresponding to From 38e9ab81e442ca69ea64785ebb96379286a55751 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Mon, 10 Oct 2022 12:06:45 +0200 Subject: [PATCH 22/47] set up appmessage converters --- .../rpc_get_accepting_blockhashes_of_txs.go | 2 +- .../rpc_get_accepting_blocks_of_txs.go | 2 +- .../grpcserver/protowire/messages.pb.go | 215 ++++++------- .../grpcserver/protowire/messages.proto | 4 +- .../server/grpcserver/protowire/rpc.md | 20 +- .../server/grpcserver/protowire/rpc.pb.go | 284 +++++++++--------- .../server/grpcserver/protowire/rpc.proto | 20 +- .../rpc_get_accepting_block_of_tx.go | 81 +++++ ...o => rpc_get_accepting_blockhash_of_tx.go} | 0 .../rpc_get_accepting_blockhashes_of_txs.go | 104 +++++++ .../rpc_get_accepting_blocks_of_txs.go | 119 ++++++++ .../rpc_get_including_blockhash_of_tx.go | 70 +++++ .../server/grpcserver/protowire/rpc_get_tx.go | 78 +++++ .../protowire/rpc_get_tx_confirmations.go | 71 +++++ .../grpcserver/protowire/rpc_get_txs.go | 84 ++++++ .../protowire/rpc_get_txs_confirmations.go | 103 +++++++ .../server/grpcserver/protowire/wire.go | 112 +++++++ 17 files changed, 1096 insertions(+), 273 deletions(-) create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_block_of_tx.go rename infrastructure/network/netadapter/server/grpcserver/protowire/{rpc_get_accepting_block_hash_of_tx.go => rpc_get_accepting_blockhash_of_tx.go} (100%) create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blockhashes_of_txs.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blocks_of_txs.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blockhash_of_tx.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx_confirmations.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs_confirmations.go diff --git a/app/appmessage/rpc_get_accepting_blockhashes_of_txs.go b/app/appmessage/rpc_get_accepting_blockhashes_of_txs.go index e2035a9f9c..31883eddba 100644 --- a/app/appmessage/rpc_get_accepting_blockhashes_of_txs.go +++ b/app/appmessage/rpc_get_accepting_blockhashes_of_txs.go @@ -4,7 +4,7 @@ package appmessage // its respective RPC message type TxIDBlockHashPair struct { TxID string - blockhash string + Hash string } // GetAcceptingBlockHashesOfTxsRequestMessage is an appmessage corresponding to diff --git a/app/appmessage/rpc_get_accepting_blocks_of_txs.go b/app/appmessage/rpc_get_accepting_blocks_of_txs.go index b496eabfac..22cb24bdaa 100644 --- a/app/appmessage/rpc_get_accepting_blocks_of_txs.go +++ b/app/appmessage/rpc_get_accepting_blocks_of_txs.go @@ -4,7 +4,7 @@ package appmessage // its respective RPC message type TxIDBlockPair struct { TxID string - BlockHash RPCBlock + Block RPCBlock } // GetAcceptingBlocksOfTxsRequestMessage is an appmessage corresponding to diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go index 86086d4524..a01a864b65 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go @@ -162,8 +162,8 @@ type KaspadMessage struct { // *KaspadMessage_GetAcceptingBlockHashesOfTxsResponse // *KaspadMessage_GetAcceptingBlockOfTxRequest // *KaspadMessage_GetAcceptingBlockOfTxResponse - // *KaspadMessage_GetAcceptingBlocksOfTxRequest - // *KaspadMessage_GetAcceptingBlocksOfTxResponse + // *KaspadMessage_GetAcceptingBlocksOfTxsRequest + // *KaspadMessage_GetAcceptingBlocksOfTxsResponse // *KaspadMessage_GetIncludingBlockHashOfTxRequest // *KaspadMessage_GetIncludingBlockHashOfTxResponse // *KaspadMessage_GetTxRequest @@ -1168,16 +1168,16 @@ func (x *KaspadMessage) GetGetAcceptingBlockOfTxResponse() *GetAcceptingBlockOfT return nil } -func (x *KaspadMessage) GetGetAcceptingBlocksOfTxRequest() *GetAcceptingBlocksOfTxsRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlocksOfTxRequest); ok { - return x.GetAcceptingBlocksOfTxRequest +func (x *KaspadMessage) GetGetAcceptingBlocksOfTxsRequest() *GetAcceptingBlocksOfTxsRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlocksOfTxsRequest); ok { + return x.GetAcceptingBlocksOfTxsRequest } return nil } -func (x *KaspadMessage) GetGetAcceptingBlocksOfTxResponse() *GetAcceptingBlocksOfTxsResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlocksOfTxResponse); ok { - return x.GetAcceptingBlocksOfTxResponse +func (x *KaspadMessage) GetGetAcceptingBlocksOfTxsResponse() *GetAcceptingBlocksOfTxsResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlocksOfTxsResponse); ok { + return x.GetAcceptingBlocksOfTxsResponse } return nil } @@ -1800,12 +1800,12 @@ type KaspadMessage_GetAcceptingBlockOfTxResponse struct { GetAcceptingBlockOfTxResponse *GetAcceptingBlockOfTxResponseMessage `protobuf:"bytes,1093,opt,name=getAcceptingBlockOfTxResponse,proto3,oneof"` } -type KaspadMessage_GetAcceptingBlocksOfTxRequest struct { - GetAcceptingBlocksOfTxRequest *GetAcceptingBlocksOfTxsRequestMessage `protobuf:"bytes,1094,opt,name=getAcceptingBlocksOfTxRequest,proto3,oneof"` +type KaspadMessage_GetAcceptingBlocksOfTxsRequest struct { + GetAcceptingBlocksOfTxsRequest *GetAcceptingBlocksOfTxsRequestMessage `protobuf:"bytes,1094,opt,name=getAcceptingBlocksOfTxsRequest,proto3,oneof"` } -type KaspadMessage_GetAcceptingBlocksOfTxResponse struct { - GetAcceptingBlocksOfTxResponse *GetAcceptingBlocksOfTxsResponseMessage `protobuf:"bytes,1095,opt,name=getAcceptingBlocksOfTxResponse,proto3,oneof"` +type KaspadMessage_GetAcceptingBlocksOfTxsResponse struct { + GetAcceptingBlocksOfTxsResponse *GetAcceptingBlocksOfTxsResponseMessage `protobuf:"bytes,1095,opt,name=getAcceptingBlocksOfTxsResponse,proto3,oneof"` } type KaspadMessage_GetIncludingBlockHashOfTxRequest struct { @@ -2120,9 +2120,9 @@ func (*KaspadMessage_GetAcceptingBlockOfTxRequest) isKaspadMessage_Payload() {} func (*KaspadMessage_GetAcceptingBlockOfTxResponse) isKaspadMessage_Payload() {} -func (*KaspadMessage_GetAcceptingBlocksOfTxRequest) isKaspadMessage_Payload() {} +func (*KaspadMessage_GetAcceptingBlocksOfTxsRequest) isKaspadMessage_Payload() {} -func (*KaspadMessage_GetAcceptingBlocksOfTxResponse) isKaspadMessage_Payload() {} +func (*KaspadMessage_GetAcceptingBlocksOfTxsResponse) isKaspadMessage_Payload() {} func (*KaspadMessage_GetIncludingBlockHashOfTxRequest) isKaspadMessage_Payload() {} @@ -2150,7 +2150,7 @@ var file_messages_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x1a, 0x09, 0x70, 0x32, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x09, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xc8, 0x7d, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x6f, 0x22, 0xcc, 0x7d, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4d, 0x65, 0x73, 0x73, @@ -3075,99 +3075,100 @@ var file_messages_proto_rawDesc = []byte{ 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x79, 0x0a, 0x1d, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, - 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0xc6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, - 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x67, - 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x73, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7c, 0x0a, 0x1e, + 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, + 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0xc6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, + 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc7, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, + 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7e, + 0x0a, 0x1f, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x67, 0x65, 0x74, 0x41, - 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, - 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x20, 0x67, - 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, - 0xc8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, + 0x65, 0x18, 0xc7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, + 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1f, 0x67, + 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, + 0x01, 0x0a, 0x20, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x20, 0x67, 0x65, - 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x84, - 0x01, 0x0a, 0x21, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc9, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, - 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x21, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xca, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0c, - 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0d, - 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xcb, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xcc, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x4b, 0x0a, 0x0e, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0xcd, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x67, - 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, - 0x19, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xce, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, - 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x65, 0x73, 0x74, 0x18, 0xc8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x19, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6f, 0x0a, 0x1a, 0x67, - 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xcf, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x1a, - 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xd0, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, - 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x72, 0x0a, - 0x1b, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xd1, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x52, 0x20, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x84, 0x01, 0x0a, 0x21, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc9, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x33, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, + 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x21, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, + 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x67, 0x65, 0x74, + 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xca, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, + 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x0c, 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x48, 0x0a, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0xcb, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x67, 0x65, 0x74, + 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0d, 0x67, 0x65, + 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xcc, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, + 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x0e, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xcd, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x0e, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xce, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x6f, 0x0a, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xcf, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x32, 0x50, 0x0a, 0x03, - 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0x50, - 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, - 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, - 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, - 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x6f, 0x0a, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xd0, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x72, 0x0a, 0x1b, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0xd1, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x32, 0x50, 0x0a, 0x03, 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, + 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, + 0x30, 0x01, 0x32, 0x50, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, + 0x28, 0x01, 0x30, 0x01, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, + 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3470,8 +3471,8 @@ var file_messages_proto_depIdxs = []int32{ 133, // 133: protowire.KaspadMessage.getAcceptingBlockHashesOfTxsResponse:type_name -> protowire.GetAcceptingBlockHashesOfTxsResponseMessage 134, // 134: protowire.KaspadMessage.getAcceptingBlockOfTxRequest:type_name -> protowire.GetAcceptingBlockOfTxRequestMessage 135, // 135: protowire.KaspadMessage.getAcceptingBlockOfTxResponse:type_name -> protowire.GetAcceptingBlockOfTxResponseMessage - 136, // 136: protowire.KaspadMessage.getAcceptingBlocksOfTxRequest:type_name -> protowire.GetAcceptingBlocksOfTxsRequestMessage - 137, // 137: protowire.KaspadMessage.getAcceptingBlocksOfTxResponse:type_name -> protowire.GetAcceptingBlocksOfTxsResponseMessage + 136, // 136: protowire.KaspadMessage.getAcceptingBlocksOfTxsRequest:type_name -> protowire.GetAcceptingBlocksOfTxsRequestMessage + 137, // 137: protowire.KaspadMessage.getAcceptingBlocksOfTxsResponse:type_name -> protowire.GetAcceptingBlocksOfTxsResponseMessage 138, // 138: protowire.KaspadMessage.getIncludingBlockHashOfTxRequest:type_name -> protowire.GetIncludingBlockHashOfTxRequestMessage 139, // 139: protowire.KaspadMessage.getIncludingBlockHashOfTxResponse:type_name -> protowire.GetIncludingBlockHashOfTxResponseMessage 140, // 140: protowire.KaspadMessage.getTxRequest:type_name -> protowire.GetTxRequestMessage @@ -3651,8 +3652,8 @@ func file_messages_proto_init() { (*KaspadMessage_GetAcceptingBlockHashesOfTxsResponse)(nil), (*KaspadMessage_GetAcceptingBlockOfTxRequest)(nil), (*KaspadMessage_GetAcceptingBlockOfTxResponse)(nil), - (*KaspadMessage_GetAcceptingBlocksOfTxRequest)(nil), - (*KaspadMessage_GetAcceptingBlocksOfTxResponse)(nil), + (*KaspadMessage_GetAcceptingBlocksOfTxsRequest)(nil), + (*KaspadMessage_GetAcceptingBlocksOfTxsResponse)(nil), (*KaspadMessage_GetIncludingBlockHashOfTxRequest)(nil), (*KaspadMessage_GetIncludingBlockHashOfTxResponse)(nil), (*KaspadMessage_GetTxRequest)(nil), diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto index 83ca1df5e1..5e01760dfd 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto @@ -146,8 +146,8 @@ message KaspadMessage { GetAcceptingBlockHashesOfTxsResponseMessage getAcceptingBlockHashesOfTxsResponse = 1091; GetAcceptingBlockOfTxRequestMessage getAcceptingBlockOfTxRequest = 1092; GetAcceptingBlockOfTxResponseMessage getAcceptingBlockOfTxResponse = 1093; - GetAcceptingBlocksOfTxsRequestMessage getAcceptingBlocksOfTxRequest = 1094; - GetAcceptingBlocksOfTxsResponseMessage getAcceptingBlocksOfTxResponse = 1095; + GetAcceptingBlocksOfTxsRequestMessage getAcceptingBlocksOfTxsRequest = 1094; + GetAcceptingBlocksOfTxsResponseMessage getAcceptingBlocksOfTxsResponse = 1095; GetIncludingBlockHashOfTxRequestMessage getIncludingBlockHashOfTxRequest = 1096; GetIncludingBlockHashOfTxResponseMessage getIncludingBlockHashOfTxResponse = 1097; GetTxRequestMessage getTxRequest = 1098; diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md index c930493b28..b6a97a7520 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md @@ -1919,7 +1919,7 @@ See NotifyNewBlockTemplateRequestMessage | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | txID | [string](#string) | | | -| confirmations | [int32](#int32) | | | +| confirmations | [int64](#int64) | | | @@ -1935,7 +1935,7 @@ See NotifyNewBlockTemplateRequestMessage | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | txID | [string](#string) | | | -| blockHash | [string](#string) | | | +| Hash | [string](#string) | | | @@ -1966,7 +1966,7 @@ See NotifyNewBlockTemplateRequestMessage | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| txID | [string](#string) | repeated | | +| txIDs | [string](#string) | repeated | | @@ -1981,7 +1981,7 @@ See NotifyNewBlockTemplateRequestMessage | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| txIDBlockHashPair | [TxIDBlockHashPair](#protowire.TxIDBlockHashPair) | repeated | | +| txIDBlockHashPairs | [TxIDBlockHashPair](#protowire.TxIDBlockHashPair) | repeated | | | error | [RPCError](#protowire.RPCError) | | | @@ -2028,7 +2028,7 @@ See NotifyNewBlockTemplateRequestMessage | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| txID | [string](#string) | repeated | | +| txIDs | [string](#string) | repeated | | @@ -2043,7 +2043,7 @@ See NotifyNewBlockTemplateRequestMessage | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| txIDBlockPair | [TxIDBlockPair](#protowire.TxIDBlockPair) | repeated | | +| txIDBlockPairs | [TxIDBlockPair](#protowire.TxIDBlockPair) | repeated | | | error | [RPCError](#protowire.RPCError) | | | @@ -2074,7 +2074,7 @@ See NotifyNewBlockTemplateRequestMessage | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| blockHash | [string](#string) | | | +| hash | [string](#string) | | | | error | [RPCError](#protowire.RPCError) | | | @@ -2121,7 +2121,7 @@ See NotifyNewBlockTemplateRequestMessage | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| txID | [string](#string) | repeated | | +| txIDs | [string](#string) | repeated | | @@ -2183,7 +2183,7 @@ See NotifyNewBlockTemplateRequestMessage | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| txID | [string](#string) | repeated | | +| txIDs | [string](#string) | repeated | | @@ -2198,7 +2198,7 @@ See NotifyNewBlockTemplateRequestMessage | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| txIDConfirmations | [TxIDConfirmationsPair](#protowire.TxIDConfirmationsPair) | repeated | | +| txIDConfirmationsPairs | [TxIDConfirmationsPair](#protowire.TxIDConfirmationsPair) | repeated | | | error | [RPCError](#protowire.RPCError) | | | diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go index 6666c7e9ac..251d33f630 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go @@ -6221,7 +6221,7 @@ type TxIDConfirmationsPair struct { unknownFields protoimpl.UnknownFields TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` - Confirmations int32 `protobuf:"varint,2,opt,name=confirmations,proto3" json:"confirmations,omitempty"` + Confirmations int64 `protobuf:"varint,2,opt,name=confirmations,proto3" json:"confirmations,omitempty"` } func (x *TxIDConfirmationsPair) Reset() { @@ -6263,7 +6263,7 @@ func (x *TxIDConfirmationsPair) GetTxID() string { return "" } -func (x *TxIDConfirmationsPair) GetConfirmations() int32 { +func (x *TxIDConfirmationsPair) GetConfirmations() int64 { if x != nil { return x.Confirmations } @@ -6275,8 +6275,8 @@ type TxIDBlockHashPair struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` - BlockHash string `protobuf:"bytes,2,opt,name=blockHash,proto3" json:"blockHash,omitempty"` + TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` + Hash string `protobuf:"bytes,2,opt,name=Hash,proto3" json:"Hash,omitempty"` } func (x *TxIDBlockHashPair) Reset() { @@ -6318,9 +6318,9 @@ func (x *TxIDBlockHashPair) GetTxID() string { return "" } -func (x *TxIDBlockHashPair) GetBlockHash() string { +func (x *TxIDBlockHashPair) GetHash() string { if x != nil { - return x.BlockHash + return x.Hash } return "" } @@ -6385,7 +6385,7 @@ type GetAcceptingBlockHashesOfTxsRequestMessage struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxID []string `protobuf:"bytes,1,rep,name=txID,proto3" json:"txID,omitempty"` + TxIDs []string `protobuf:"bytes,1,rep,name=txIDs,proto3" json:"txIDs,omitempty"` } func (x *GetAcceptingBlockHashesOfTxsRequestMessage) Reset() { @@ -6420,9 +6420,9 @@ func (*GetAcceptingBlockHashesOfTxsRequestMessage) Descriptor() ([]byte, []int) return file_rpc_proto_rawDescGZIP(), []int{113} } -func (x *GetAcceptingBlockHashesOfTxsRequestMessage) GetTxID() []string { +func (x *GetAcceptingBlockHashesOfTxsRequestMessage) GetTxIDs() []string { if x != nil { - return x.TxID + return x.TxIDs } return nil } @@ -6432,8 +6432,8 @@ type GetAcceptingBlockHashesOfTxsResponseMessage struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxIDBlockHashPair []*TxIDBlockHashPair `protobuf:"bytes,1,rep,name=txIDBlockHashPair,proto3" json:"txIDBlockHashPair,omitempty"` - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` + TxIDBlockHashPairs []*TxIDBlockHashPair `protobuf:"bytes,1,rep,name=txIDBlockHashPairs,proto3" json:"txIDBlockHashPairs,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } func (x *GetAcceptingBlockHashesOfTxsResponseMessage) Reset() { @@ -6468,9 +6468,9 @@ func (*GetAcceptingBlockHashesOfTxsResponseMessage) Descriptor() ([]byte, []int) return file_rpc_proto_rawDescGZIP(), []int{114} } -func (x *GetAcceptingBlockHashesOfTxsResponseMessage) GetTxIDBlockHashPair() []*TxIDBlockHashPair { +func (x *GetAcceptingBlockHashesOfTxsResponseMessage) GetTxIDBlockHashPairs() []*TxIDBlockHashPair { if x != nil { - return x.TxIDBlockHashPair + return x.TxIDBlockHashPairs } return nil } @@ -6589,7 +6589,7 @@ type GetAcceptingBlocksOfTxsRequestMessage struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxID []string `protobuf:"bytes,1,rep,name=txID,proto3" json:"txID,omitempty"` + TxIDs []string `protobuf:"bytes,1,rep,name=txIDs,proto3" json:"txIDs,omitempty"` } func (x *GetAcceptingBlocksOfTxsRequestMessage) Reset() { @@ -6624,9 +6624,9 @@ func (*GetAcceptingBlocksOfTxsRequestMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{117} } -func (x *GetAcceptingBlocksOfTxsRequestMessage) GetTxID() []string { +func (x *GetAcceptingBlocksOfTxsRequestMessage) GetTxIDs() []string { if x != nil { - return x.TxID + return x.TxIDs } return nil } @@ -6636,8 +6636,8 @@ type GetAcceptingBlocksOfTxsResponseMessage struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxIDBlockPair []*TxIDBlockPair `protobuf:"bytes,1,rep,name=txIDBlockPair,proto3" json:"txIDBlockPair,omitempty"` - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` + TxIDBlockPairs []*TxIDBlockPair `protobuf:"bytes,1,rep,name=txIDBlockPairs,proto3" json:"txIDBlockPairs,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } func (x *GetAcceptingBlocksOfTxsResponseMessage) Reset() { @@ -6672,9 +6672,9 @@ func (*GetAcceptingBlocksOfTxsResponseMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{118} } -func (x *GetAcceptingBlocksOfTxsResponseMessage) GetTxIDBlockPair() []*TxIDBlockPair { +func (x *GetAcceptingBlocksOfTxsResponseMessage) GetTxIDBlockPairs() []*TxIDBlockPair { if x != nil { - return x.TxIDBlockPair + return x.TxIDBlockPairs } return nil } @@ -6738,8 +6738,8 @@ type GetIncludingBlockHashOfTxResponseMessage struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - BlockHash string `protobuf:"bytes,1,opt,name=blockHash,proto3" json:"blockHash,omitempty"` - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` + Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } func (x *GetIncludingBlockHashOfTxResponseMessage) Reset() { @@ -6774,9 +6774,9 @@ func (*GetIncludingBlockHashOfTxResponseMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{120} } -func (x *GetIncludingBlockHashOfTxResponseMessage) GetBlockHash() string { +func (x *GetIncludingBlockHashOfTxResponseMessage) GetHash() string { if x != nil { - return x.BlockHash + return x.Hash } return "" } @@ -6895,7 +6895,7 @@ type GetTxsRequestMessage struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxID []string `protobuf:"bytes,1,rep,name=txID,proto3" json:"txID,omitempty"` + TxIDs []string `protobuf:"bytes,1,rep,name=txIDs,proto3" json:"txIDs,omitempty"` } func (x *GetTxsRequestMessage) Reset() { @@ -6930,9 +6930,9 @@ func (*GetTxsRequestMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{123} } -func (x *GetTxsRequestMessage) GetTxID() []string { +func (x *GetTxsRequestMessage) GetTxIDs() []string { if x != nil { - return x.TxID + return x.TxIDs } return nil } @@ -7099,7 +7099,7 @@ type GetTxsConfirmationsRequestMessage struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxID []string `protobuf:"bytes,1,rep,name=txID,proto3" json:"txID,omitempty"` + TxIDs []string `protobuf:"bytes,1,rep,name=txIDs,proto3" json:"txIDs,omitempty"` } func (x *GetTxsConfirmationsRequestMessage) Reset() { @@ -7134,9 +7134,9 @@ func (*GetTxsConfirmationsRequestMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{127} } -func (x *GetTxsConfirmationsRequestMessage) GetTxID() []string { +func (x *GetTxsConfirmationsRequestMessage) GetTxIDs() []string { if x != nil { - return x.TxID + return x.TxIDs } return nil } @@ -7146,8 +7146,8 @@ type GetTxsConfirmationsResponseMessage struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxIDConfirmations []*TxIDConfirmationsPair `protobuf:"bytes,1,rep,name=txIDConfirmations,proto3" json:"txIDConfirmations,omitempty"` - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` + TxIDConfirmationsPairs []*TxIDConfirmationsPair `protobuf:"bytes,1,rep,name=txIDConfirmationsPairs,proto3" json:"txIDConfirmationsPairs,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } func (x *GetTxsConfirmationsResponseMessage) Reset() { @@ -7182,9 +7182,9 @@ func (*GetTxsConfirmationsResponseMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{128} } -func (x *GetTxsConfirmationsResponseMessage) GetTxIDConfirmations() []*TxIDConfirmationsPair { +func (x *GetTxsConfirmationsResponseMessage) GetTxIDConfirmationsPairs() []*TxIDConfirmationsPair { if x != nil { - return x.TxIDConfirmations + return x.TxIDConfirmationsPairs } return nil } @@ -8014,118 +8014,118 @@ var file_rpc_proto_rawDesc = []byte{ 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x45, 0x0a, 0x11, 0x54, 0x78, 0x49, 0x44, 0x42, + 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3b, 0x0a, 0x11, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, - 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x22, 0x4e, - 0x0a, 0x0d, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x78, 0x49, 0x44, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x40, - 0x0a, 0x2a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, - 0x22, 0xa5, 0x01, 0x0a, 0x2b, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, - 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x4a, 0x0a, 0x11, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, - 0x68, 0x50, 0x61, 0x69, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x52, 0x11, 0x74, 0x78, 0x49, 0x44, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x12, 0x2a, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x39, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x41, - 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, - 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x78, 0x49, 0x44, 0x22, 0x7d, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, - 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, - 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0x12, 0x12, 0x0a, 0x04, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x48, 0x61, 0x73, 0x68, 0x22, 0x4e, 0x0a, 0x0d, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x42, 0x0a, 0x2a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, + 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, + 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x2b, 0x47, 0x65, 0x74, + 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, + 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4c, 0x0a, 0x12, 0x74, 0x78, 0x49, 0x44, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, + 0x69, 0x72, 0x52, 0x12, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, + 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x3b, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, - 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, - 0x94, 0x01, 0x0a, 0x26, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x74, 0x78, - 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, - 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0d, 0x74, 0x78, 0x49, - 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, - 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x74, 0x0a, 0x28, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, - 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, + 0x6f, 0x72, 0x22, 0x39, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, + 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x7d, 0x0a, + 0x24, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x25, + 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0x96, 0x01, 0x0a, 0x26, + 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x49, 0x44, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0e, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, + 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x78, 0x49, 0x44, 0x22, 0x6a, 0x0a, 0x28, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, + 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, + 0x29, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x7f, 0x0a, 0x14, 0x47, 0x65, + 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x29, 0x0a, 0x13, 0x47, - 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2c, 0x0a, 0x14, 0x47, + 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x15, 0x47, 0x65, + 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x36, + 0x0a, 0x20, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x7f, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, - 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x78, 0x49, 0x44, 0x22, 0x82, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, - 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x36, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x54, - 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, - 0x22, 0x75, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x37, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, - 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, - 0x22, 0xa0, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x11, 0x74, 0x78, 0x49, 0x44, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, - 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x50, 0x61, 0x69, 0x72, 0x52, 0x11, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, - 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x75, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, + 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x39, 0x0a, + 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, + 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x58, 0x0a, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x49, 0x44, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, + 0x72, 0x52, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, + 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -8353,11 +8353,11 @@ var file_rpc_proto_depIdxs = []int32{ 1, // 75: protowire.GetMempoolEntriesByAddressesResponseMessage.error:type_name -> protowire.RPCError 1, // 76: protowire.GetCoinSupplyResponseMessage.error:type_name -> protowire.RPCError 2, // 77: protowire.TxIDBlockPair.block:type_name -> protowire.RpcBlock - 112, // 78: protowire.GetAcceptingBlockHashesOfTxsResponseMessage.txIDBlockHashPair:type_name -> protowire.TxIDBlockHashPair + 112, // 78: protowire.GetAcceptingBlockHashesOfTxsResponseMessage.txIDBlockHashPairs:type_name -> protowire.TxIDBlockHashPair 1, // 79: protowire.GetAcceptingBlockHashesOfTxsResponseMessage.error:type_name -> protowire.RPCError 2, // 80: protowire.GetAcceptingBlockOfTxResponseMessage.block:type_name -> protowire.RpcBlock 1, // 81: protowire.GetAcceptingBlockOfTxResponseMessage.error:type_name -> protowire.RPCError - 113, // 82: protowire.GetAcceptingBlocksOfTxsResponseMessage.txIDBlockPair:type_name -> protowire.TxIDBlockPair + 113, // 82: protowire.GetAcceptingBlocksOfTxsResponseMessage.txIDBlockPairs:type_name -> protowire.TxIDBlockPair 1, // 83: protowire.GetAcceptingBlocksOfTxsResponseMessage.error:type_name -> protowire.RPCError 1, // 84: protowire.GetIncludingBlockHashOfTxResponseMessage.error:type_name -> protowire.RPCError 6, // 85: protowire.GetTxResponseMessage.transaction:type_name -> protowire.RpcTransaction @@ -8365,7 +8365,7 @@ var file_rpc_proto_depIdxs = []int32{ 6, // 87: protowire.GetTxsResponseMessage.transactions:type_name -> protowire.RpcTransaction 1, // 88: protowire.GetTxsResponseMessage.error:type_name -> protowire.RPCError 1, // 89: protowire.GetTxConfirmationsResponseMessage.error:type_name -> protowire.RPCError - 111, // 90: protowire.GetTxsConfirmationsResponseMessage.txIDConfirmations:type_name -> protowire.TxIDConfirmationsPair + 111, // 90: protowire.GetTxsConfirmationsResponseMessage.txIDConfirmationsPairs:type_name -> protowire.TxIDConfirmationsPair 1, // 91: protowire.GetTxsConfirmationsResponseMessage.error:type_name -> protowire.RPCError 92, // [92:92] is the sub-list for method output_type 92, // [92:92] is the sub-list for method input_type diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto index 55c6333c03..dcb1a529a0 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto @@ -736,12 +736,12 @@ message GetCoinSupplyResponseMessage{ message TxIDConfirmationsPair { string txID = 1; - int32 confirmations = 2; + int64 confirmations = 2; } message TxIDBlockHashPair { string txID = 1; - string blockHash = 2; + string Hash = 2; } message TxIDBlockPair { @@ -750,11 +750,11 @@ message TxIDBlockPair { } message GetAcceptingBlockHashesOfTxsRequestMessage{ - repeated string txID = 1; + repeated string txIDs = 1; } message GetAcceptingBlockHashesOfTxsResponseMessage{ - repeated TxIDBlockHashPair txIDBlockHashPair = 1; + repeated TxIDBlockHashPair txIDBlockHashPairs = 1; RPCError error = 1000; } @@ -770,11 +770,11 @@ message GetAcceptingBlockOfTxResponseMessage{ } message GetAcceptingBlocksOfTxsRequestMessage{ - repeated string txID = 1; + repeated string txIDs = 1; } message GetAcceptingBlocksOfTxsResponseMessage{ - repeated TxIDBlockPair txIDBlockPair = 1; + repeated TxIDBlockPair txIDBlockPairs = 1; RPCError error = 1000; } @@ -784,7 +784,7 @@ message GetIncludingBlockHashOfTxRequestMessage{ } message GetIncludingBlockHashOfTxResponseMessage{ - string blockHash = 1; + string hash = 1; RPCError error = 1000; } @@ -801,7 +801,7 @@ message GetTxResponseMessage{ } message GetTxsRequestMessage{ - repeated string txID = 1; + repeated string txIDs = 1; } message GetTxsResponseMessage{ @@ -822,11 +822,11 @@ message GetTxConfirmationsResponseMessage{ } message GetTxsConfirmationsRequestMessage{ - repeated string txID = 1; + repeated string txIDs = 1; } message GetTxsConfirmationsResponseMessage{ - repeated TxIDConfirmationsPair txIDConfirmations = 1; + repeated TxIDConfirmationsPair txIDConfirmationsPairs = 1; RPCError error = 1000; } \ No newline at end of file diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_block_of_tx.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_block_of_tx.go new file mode 100644 index 0000000000..91ab4cf30d --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_block_of_tx.go @@ -0,0 +1,81 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_GetAcceptingBlockOfTxRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetAcceptingBlockOfTxRequest") + } + return x.GetAcceptingBlockOfTxRequest.toAppMessage() +} + +func (x *KaspadMessage_GetAcceptingBlockOfTxRequest) fromAppMessage(message *appmessage.GetAcceptingBlockOfTxRequestMessage) error { + x.GetAcceptingBlockOfTxRequest = &GetAcceptingBlockOfTxRequestMessage{ + TxID: message.TxID, + } + return nil +} + +func (x *GetAcceptingBlockOfTxRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetAcceptingBlockOfTxRequestMessage is nil") + } + return &appmessage.GetAcceptingBlockOfTxRequestMessage{ + TxID: x.TxID, + }, nil +} + +func (x *KaspadMessage_GetAcceptingBlockOfTxResponse) toAppMessage() (appmessage.Message, error) { + + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetAcceptingBlockOfTxResponse is nil") + } + return x.GetAcceptingBlockOfTxResponse.toAppMessage() +} + +func (x *KaspadMessage_GetAcceptingBlockOfTxResponse) fromAppMessage(message *appmessage.GetAcceptingBlockOfTxResponseMessage) error { + var rpcErr *RPCError + if message.Error != nil { + rpcErr = &RPCError{Message: message.Error.Message} + } + rpcBlock := &RpcBlock{} + + err := rpcBlock.fromAppMessage(message.Block) + if err != nil { + return err + } + x.GetAcceptingBlockOfTxResponse = &GetAcceptingBlockOfTxResponseMessage{ + Block: rpcBlock, + + Error: rpcErr, + } + return nil +} + +func (x *GetAcceptingBlockOfTxResponseMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetAcceptingBlockOfTxResponseMessage is nil") + } + rpcErr, err := x.Error.toAppMessage() + // Error is an optional field + if err != nil && !errors.Is(err, errorNil) { + return nil, err + } + + if rpcErr != nil && x.Block != nil { + return nil, errors.New("GetAcceptingBlockOfTxResponseMessage contains both an error and a response") + } + + appBlock, err := x.Block.toAppMessage() + if err != nil { + return nil, err + } + + return &appmessage.GetAcceptingBlockOfTxResponseMessage{ + Block: appBlock, + Error: rpcErr, + }, nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_block_hash_of_tx.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blockhash_of_tx.go similarity index 100% rename from infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_block_hash_of_tx.go rename to infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blockhash_of_tx.go diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blockhashes_of_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blockhashes_of_txs.go new file mode 100644 index 0000000000..8689a52488 --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blockhashes_of_txs.go @@ -0,0 +1,104 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_GetAcceptingBlockHashesOfTxsRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetAcceptingBlockHashesOfTxsRequest") + } + return x.GetAcceptingBlockHashesOfTxsRequest.toAppMessage() +} + +func (x *KaspadMessage_GetAcceptingBlockHashesOfTxsRequest) fromAppMessage(message *appmessage.GetAcceptingBlockHashesOfTxsRequestMessage) error { + x.GetAcceptingBlockHashesOfTxsRequest = &GetAcceptingBlockHashesOfTxsRequestMessage{ + TxIDs: message.TxIDs, + } + return nil +} + +func (x *GetAcceptingBlockHashesOfTxsRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetAcceptingBlockHashesOfTxsRequestMessage is nil") + } + return &appmessage.GetAcceptingBlockHashesOfTxsRequestMessage{ + TxIDs: x.TxIDs, + }, nil +} + +func (x *KaspadMessage_GetAcceptingBlockHashesOfTxsResponse) toAppMessage() (appmessage.Message, error) { + + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetAcceptingBlockHashesOfTxsResponse is nil") + } + return x.GetAcceptingBlockHashesOfTxsResponse.toAppMessage() +} + +func (x *KaspadMessage_GetAcceptingBlockHashesOfTxsResponse) fromAppMessage(message *appmessage.GetAcceptingBlockHashesOfTxsResponseMessage) error { + var rpcErr *RPCError + if message.Error != nil { + rpcErr = &RPCError{Message: message.Error.Message} + } + + rpcTxIDBlockHashPairs := make([]*TxIDBlockHashPair, len(message.TxIDBlockHashPairs)) + for i := range rpcTxIDBlockHashPairs { + rpcTxIDBlockHashPairs[i].fromAppMessage(message.TxIDBlockHashPairs[i]) + } + + x.GetAcceptingBlockHashesOfTxsResponse = &GetAcceptingBlockHashesOfTxsResponseMessage{ + TxIDBlockHashPairs: rpcTxIDBlockHashPairs, + + Error: rpcErr, + } + return nil +} + +func (x *GetAcceptingBlockHashesOfTxsResponseMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetAcceptingBlockHashesOfTxsResponseMessage is nil") + } + rpcErr, err := x.Error.toAppMessage() + // Error is an optional field + if err != nil && !errors.Is(err, errorNil) { + return nil, err + } + + if rpcErr != nil && x.TxIDBlockHashPairs != nil { + return nil, errors.New("GetAcceptingBlockHashesfTxsResponseMessage contains both an error and a response") + } + + appTxIDBlockHashPairs := make([]*appmessage.TxIDBlockHashPair, len(x.TxIDBlockHashPairs)) + for i := range appTxIDBlockHashPairs { + appTxIDBlockHashPairs[i], err = x.TxIDBlockHashPairs[i].toAppMessage() + if err != nil { + return nil, err + } + } + + return &appmessage.GetAcceptingBlockHashesOfTxsResponseMessage{ + TxIDBlockHashPairs: appTxIDBlockHashPairs, + Error: rpcErr, + }, nil +} + +func (x *TxIDBlockHashPair) toAppMessage() (*appmessage.TxIDBlockHashPair, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "TxIDBlockHashPair is nil") + } + + return &appmessage.TxIDBlockHashPair{ + TxID: x.TxID, + Hash: x.Hash, + }, nil +} + +func (x *TxIDBlockHashPair) fromAppMessage(message *appmessage.TxIDBlockHashPair) { + + *x = TxIDBlockHashPair{ + TxID: message.TxID, + Hash: message.Hash, + + } +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blocks_of_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blocks_of_txs.go new file mode 100644 index 0000000000..40b3fcca41 --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blocks_of_txs.go @@ -0,0 +1,119 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_GetAcceptingBlocksOfTxsRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetAcceptingBlocksOfTxsRequest") + } + return x.GetAcceptingBlocksOfTxsRequest.toAppMessage() +} + +func (x *KaspadMessage_GetAcceptingBlocksOfTxsRequest) fromAppMessage(message *appmessage.GetAcceptingBlocksOfTxsRequestMessage) error { + x.GetAcceptingBlocksOfTxsRequest = &GetAcceptingBlocksOfTxsRequestMessage{ + TxIDs: message.TxIDs, + } + return nil +} + +func (x *GetAcceptingBlocksOfTxsRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetAcceptingBlocksOfTxsRequestMessage is nil") + } + return &appmessage.GetAcceptingBlocksOfTxsRequestMessage{ + TxIDs: x.TxIDs, + }, nil +} + +func (x *KaspadMessage_GetAcceptingBlocksOfTxsResponse) toAppMessage() (appmessage.Message, error) { + + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetAcceptingBlocksOfTxsResponse is nil") + } + return x.GetAcceptingBlocksOfTxsResponse.toAppMessage() +} + +func (x *KaspadMessage_GetAcceptingBlocksOfTxsResponse) fromAppMessage(message *appmessage.GetAcceptingBlocksOfTxsResponseMessage) error { + var rpcErr *RPCError + if message.Error != nil { + rpcErr = &RPCError{Message: message.Error.Message} + } + + rpcTxIDBlockPairs := make([]*TxIDBlockPair, len(message.TxIDBlockPairs)) + for i := range rpcTxIDBlockPairs { + err := rpcTxIDBlockPairs[i].fromAppMessage(message.TxIDBlockPairs[i]) + if err != nil { + return err + } + } + + x.GetAcceptingBlocksOfTxsResponse = &GetAcceptingBlocksOfTxsResponseMessage{ + TxIDBlockPairs: rpcTxIDBlockPairs, + + Error: rpcErr, + } + return nil +} + +func (x *GetAcceptingBlocksOfTxsResponseMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetAcceptingBlocksOfTxsResponseMessage is nil") + } + rpcErr, err := x.Error.toAppMessage() + // Error is an optional field + if err != nil && !errors.Is(err, errorNil) { + return nil, err + } + + if rpcErr != nil && x.TxIDBlockPairs != nil { + return nil, errors.New("GetAcceptingBlocksOfTxsResponseMessage contains both an error and a response") + } + + appTxIDBlockPairs := make([]*appmessage.TxIDBlockPair, len(x.TxIDBlockPairs)) + for i := range appTxIDBlockPairs { + appTxIDBlockPairs[i], err = x.TxIDBlockPairs[i].toAppMessage() + if err != nil { + return nil, err + } + } + + return &appmessage.GetAcceptingBlocksOfTxsResponseMessage{ + TxIDBlockPairs: appTxIDBlockPairs, + Error: rpcErr, + }, nil +} + +func (x *TxIDBlockPair) toAppMessage() (*appmessage.TxIDBlockPair, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "TxIDBlockPair is nil") + } + + appBlock, err := x.Block.toAppMessage() + if err != nil { + return nil, err + } + + return &appmessage.TxIDBlockPair{ + TxID: x.TxID, + Block: *appBlock, + }, nil +} + +func (x *TxIDBlockPair) fromAppMessage(message *appmessage.TxIDBlockPair) error { + + rpcBlock := &RpcBlock{} + + err := rpcBlock.fromAppMessage(&message.Block) + if err != nil { + return err + } + *x = TxIDBlockPair{ + TxID: message.TxID, + Block: rpcBlock, + + } + return nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blockhash_of_tx.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blockhash_of_tx.go new file mode 100644 index 0000000000..4ae30ec77d --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blockhash_of_tx.go @@ -0,0 +1,70 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_GetIncludingBlockHashOfTxRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetIncludingBlockHashOfTxRequest") + } + return x.GetIncludingBlockHashOfTxRequest.toAppMessage() +} + +func (x *KaspadMessage_GetIncludingBlockHashOfTxRequest) fromAppMessage(message *appmessage.GetIncludingBlockHashOfTxRequestMessage) error { + x.GetIncludingBlockHashOfTxRequest = &GetIncludingBlockHashOfTxRequestMessage{ + TxID: message.TxID, + } + return nil +} + +func (x *GetIncludingBlockHashOfTxRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetIncludingBlockHashOfTxRequestMessage is nil") + } + return &appmessage.GetIncludingBlockHashOfTxRequestMessage{ + TxID: x.TxID, + }, nil +} + +func (x *KaspadMessage_GetIncludingBlockHashOfTxResponse) toAppMessage() (appmessage.Message, error) { + + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetIncludingBlockHashOfTxResponse is nil") + } + return x.GetIncludingBlockHashOfTxResponse.toAppMessage() +} + +func (x *KaspadMessage_GetIncludingBlockHashOfTxResponse) fromAppMessage(message *appmessage.GetIncludingBlockHashOfTxResponseMessage) error { + var err *RPCError + if message.Error != nil { + err = &RPCError{Message: message.Error.Message} + } + x.GetIncludingBlockHashOfTxResponse = &GetIncludingBlockHashOfTxResponseMessage{ + Hash: message.Hash, + + Error: err, + } + return nil +} + +func (x *GetIncludingBlockHashOfTxResponseMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetIncludingBlockHashOfTxResponseMessage is nil") + } + rpcErr, err := x.Error.toAppMessage() + // Error is an optional field + if err != nil && !errors.Is(err, errorNil) { + return nil, err + } + + if rpcErr != nil && x.Hash != "" { + return nil, errors.New("GetIncludingBlockHashOfTxResponseMessage contains both an error and a response") + } + + return &appmessage.GetIncludingBlockHashOfTxResponseMessage{ + Hash: x.Hash, + Error: rpcErr, + }, nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx.go new file mode 100644 index 0000000000..f676aac392 --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx.go @@ -0,0 +1,78 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_GetTxRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetTxRequest") + } + return x.GetTxRequest.toAppMessage() +} + +func (x *KaspadMessage_GetTxRequest) fromAppMessage(message *appmessage.GetTxRequestMessage) error { + x.GetTxRequest = &GetTxRequestMessage{ + TxID: message.TxID, + } + return nil +} + +func (x *GetTxRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetTxRequestMessage is nil") + } + return &appmessage.GetTxRequestMessage{ + TxID: x.TxID, + }, nil +} + +func (x *KaspadMessage_GetTxResponse) toAppMessage() (appmessage.Message, error) { + + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetTxResponse is nil") + } + return x.GetTxResponse.toAppMessage() +} + +func (x *KaspadMessage_GetTxResponse) fromAppMessage(message *appmessage.GetTxResponseMessage) error { + var rpcErr *RPCError + if message.Error != nil { + rpcErr = &RPCError{Message: message.Error.Message} + } + rpcTransaction := &RpcTransaction{} + rpcTransaction.fromAppMessage(message.Transaction) + + x.GetTxResponse = &GetTxResponseMessage{ + Transaction: rpcTransaction, + + Error: rpcErr, + } + return nil +} + +func (x *GetTxResponseMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetTxResponseMessage is nil") + } + rpcErr, err := x.Error.toAppMessage() + // Error is an optional field + if err != nil && !errors.Is(err, errorNil) { + return nil, err + } + + if rpcErr != nil && x.Transaction != nil { + return nil, errors.New("GetTxResponseMessage contains both an error and a response") + } + + appTransaction, err := x.Transaction.toAppMessage() + if err != nil { + return nil, err + } + + return &appmessage.GetTxResponseMessage{ + Transaction: appTransaction, + Error: rpcErr, + }, nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx_confirmations.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx_confirmations.go new file mode 100644 index 0000000000..9726c5beda --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx_confirmations.go @@ -0,0 +1,71 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_GetTxConfirmationsRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetTxConfirmationsRequest") + } + return x.GetTxConfirmationsRequest.toAppMessage() +} + +func (x *KaspadMessage_GetTxConfirmationsRequest) fromAppMessage(message *appmessage.GetTxConfirmationsRequestMessage) error { + x.GetTxConfirmationsRequest = &GetTxConfirmationsRequestMessage{ + TxID: message.TxID, + } + return nil +} + +func (x *GetTxConfirmationsRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetTxConfirmationsRequestMessage is nil") + } + return &appmessage.GetTxConfirmationsRequestMessage{ + TxID: x.TxID, + }, nil +} + +func (x *KaspadMessage_GetTxConfirmationsResponse) toAppMessage() (appmessage.Message, error) { + + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetTxConfirmationsResponse is nil") + } + return x.GetTxConfirmationsResponse.toAppMessage() +} + +func (x *KaspadMessage_GetTxConfirmationsResponse) fromAppMessage(message *appmessage.GetTxConfirmationsResponseMessage) error { + var rpcErr *RPCError + if message.Error != nil { + rpcErr = &RPCError{Message: message.Error.Message} + } + + x.GetTxConfirmationsResponse = &GetTxConfirmationsResponseMessage{ + Confirmations: message.Confirmations, + + Error: rpcErr, + } + return nil +} + +func (x *GetTxConfirmationsResponseMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetTxConfirmationsResponseMessage is nil") + } + rpcErr, err := x.Error.toAppMessage() + // Error is an optional field + if err != nil && !errors.Is(err, errorNil) { + return nil, err + } + + if err != nil { + return nil, err + } + + return &appmessage.GetTxConfirmationsResponseMessage{ + Confirmations: x.Confirmations, + Error: rpcErr, + }, nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs.go new file mode 100644 index 0000000000..c232741141 --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs.go @@ -0,0 +1,84 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_GetTxsRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetTxsRequest") + } + return x.GetTxsRequest.toAppMessage() +} + +func (x *KaspadMessage_GetTxsRequest) fromAppMessage(message *appmessage.GetTxsRequestMessage) error { + x.GetTxsRequest = &GetTxsRequestMessage{ + TxIDs: message.TxIDs, + } + return nil +} + +func (x *GetTxsRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetTxsRequestMessage is nil") + } + return &appmessage.GetTxsRequestMessage{ + TxIDs: x.TxIDs, + }, nil +} + +func (x *KaspadMessage_GetTxsResponse) toAppMessage() (appmessage.Message, error) { + + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetTxsResponse is nil") + } + return x.GetTxsResponse.toAppMessage() +} + +func (x *KaspadMessage_GetTxsResponse) fromAppMessage(message *appmessage.GetTxsResponseMessage) error { + var rpcErr *RPCError + if message.Error != nil { + rpcErr = &RPCError{Message: message.Error.Message} + } + + rpcTransactions := make([]*RpcTransaction, len(message.Transactions)) + for i := range rpcTransactions { + rpcTransactions[i].fromAppMessage(message.Transactions[i]) + } + + x.GetTxsResponse = &GetTxsResponseMessage{ + Transactions: rpcTransactions, + + Error: rpcErr, + } + return nil +} + +func (x *GetTxsResponseMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetTxsResponseMessage is nil") + } + rpcErr, err := x.Error.toAppMessage() + // Error is an optional field + if err != nil && !errors.Is(err, errorNil) { + return nil, err + } + + if rpcErr != nil && x.Transactions != nil { + return nil, errors.New("GetTxsResponseMessage contains both an error and a response") + } + + appTransactions := make([]*appmessage.RPCTransaction, len(x.Transactions)) + for i := range appTransactions { + appTransactions[i], err = x.Transactions[i].toAppMessage() + if err != nil { + return nil, err + } + } + + return &appmessage.GetTxsResponseMessage{ + Transactions: appTransactions, + Error: rpcErr, + }, nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs_confirmations.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs_confirmations.go new file mode 100644 index 0000000000..9d612cbefc --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs_confirmations.go @@ -0,0 +1,103 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_GetTxsConfirmationsRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetTxsConfirmationsRequest") + } + return x.GetTxsConfirmationsRequest.toAppMessage() +} + +func (x *KaspadMessage_GetTxsConfirmationsRequest) fromAppMessage(message *appmessage.GetTxsConfirmationsRequestMessage) error { + x.GetTxsConfirmationsRequest = &GetTxsConfirmationsRequestMessage{ + TxIDs: message.TxIDs, + } + return nil +} + +func (x *GetTxsConfirmationsRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetTxsConfirmationsRequestMessage is nil") + } + return &appmessage.GetTxsConfirmationsRequestMessage{ + TxIDs: x.TxIDs, + }, nil +} + +func (x *KaspadMessage_GetTxsConfirmationsResponse) toAppMessage() (appmessage.Message, error) { + + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetTxsConfirmationsResponse is nil") + } + return x.GetTxsConfirmationsResponse.toAppMessage() +} + +func (x *KaspadMessage_GetTxsConfirmationsResponse) fromAppMessage(message *appmessage.GetTxsConfirmationsResponseMessage) error { + var rpcErr *RPCError + if message.Error != nil { + rpcErr = &RPCError{Message: message.Error.Message} + } + + rpcTxIDConfirmationsPairs := make([]*TxIDConfirmationsPair, len(message.TxIDConfirmationsPairs)) + for i := range rpcTxIDConfirmationsPairs { + rpcTxIDConfirmationsPairs[i].fromAppMessage(message.TxIDConfirmationsPairs[i]) + } + + x.GetTxsConfirmationsResponse = &GetTxsConfirmationsResponseMessage{ + TxIDConfirmationsPairs: rpcTxIDConfirmationsPairs, + + Error: rpcErr, + } + return nil +} + +func (x *GetTxsConfirmationsResponseMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetTxsConfirmationsResponseMessage is nil") + } + rpcErr, err := x.Error.toAppMessage() + // Error is an optional field + if err != nil && !errors.Is(err, errorNil) { + return nil, err + } + + if rpcErr != nil && x.TxIDConfirmationsPairs != nil { + return nil, errors.New("GetTxsConfirmationsResponseMessage contains both an error and a response") + } + + appTxIDConfirmationsPairs := make([]*appmessage.TxIDConfirmationsPair, len(x.TxIDConfirmationsPairs)) + for i := range appTxIDConfirmationsPairs { + appTxIDConfirmationsPairs[i], err = x.TxIDConfirmationsPairs[i].toAppMessage() + if err != nil { + return nil, err + } + } + + return &appmessage.GetTxsConfirmationsResponseMessage{ + TxIDConfirmationsPairs: appTxIDConfirmationsPairs, + Error: rpcErr, + }, nil +} + +func (x *TxIDConfirmationsPair) toAppMessage() (*appmessage.TxIDConfirmationsPair, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "TxIDConfirmationsPair is nil") + } + + return &appmessage.TxIDConfirmationsPair{ + TxID: x.TxID, + Confirmations: x.Confirmations, + }, nil +} + +func (x *TxIDConfirmationsPair) fromAppMessage(message *appmessage.TxIDConfirmationsPair) { + + *x = TxIDConfirmationsPair{ + TxID: message.TxID, + Confirmations: message.Confirmations, + } +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go b/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go index 4d92fe79c6..0e6fd5bd6f 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go @@ -982,6 +982,118 @@ func toRPCPayload(message appmessage.Message) (isKaspadMessage_Payload, error) { return nil, err } return payload, nil + case *appmessage.GetAcceptingBlockHashesOfTxsRequestMessage: + payload := new(KaspadMessage_GetAcceptingBlockHashesOfTxsRequest) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetAcceptingBlockHashesOfTxsResponseMessage: + payload := new(KaspadMessage_GetAcceptingBlockHashesOfTxsResponse) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetAcceptingBlockOfTxRequestMessage: + payload := new(KaspadMessage_GetAcceptingBlockOfTxRequest) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetAcceptingBlockOfTxResponseMessage: + payload := new(KaspadMessage_GetAcceptingBlockOfTxResponse) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetAcceptingBlocksOfTxsRequestMessage: + payload := new(KaspadMessage_GetAcceptingBlocksOfTxsRequest) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetAcceptingBlocksOfTxsResponseMessage: + payload := new(KaspadMessage_GetAcceptingBlocksOfTxsResponse) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetIncludingBlockHashOfTxRequestMessage: + payload := new(KaspadMessage_GetIncludingBlockHashOfTxRequest) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetIncludingBlockHashOfTxResponseMessage: + payload := new(KaspadMessage_GetIncludingBlockHashOfTxResponse) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetTxRequestMessage: + payload := new(KaspadMessage_GetTxRequest) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetTxResponseMessage: + payload := new(KaspadMessage_GetTxResponse) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetTxsRequestMessage: + payload := new(KaspadMessage_GetTxsRequest) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetTxsResponseMessage: + payload := new(KaspadMessage_GetTxsResponse) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetTxConfirmationsRequestMessage: + payload := new(KaspadMessage_GetTxConfirmationsRequest) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetTxConfirmationsResponseMessage: + payload := new(KaspadMessage_GetTxConfirmationsResponse) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetTxsConfirmationsRequestMessage: + payload := new(KaspadMessage_GetTxsConfirmationsRequest) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetTxsConfirmationsResponseMessage: + payload := new(KaspadMessage_GetTxsConfirmationsResponse) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil default: return nil, nil } From e8e57fc2be905bf180ad4121326fbfa4ad378471 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Mon, 10 Oct 2022 13:56:48 +0200 Subject: [PATCH 23/47] checkpoint: started work on handlers --- .../rpc_get_accepting_block_of_tx.go | 3 +- .../rpc_get_accepting_blockhashes_of_txs.go | 4 +- .../rpc_get_accepting_blocks_of_txs.go | 7 +- .../rpchandlers/get_accepting_block_of_tx.go | 64 ++++++ ...tx.go => get_accepting_blockhash_of_tx.go} | 4 +- .../get_accepting_blockhashes_of_txs.go | 57 ++++++ .../get_accepting_blocks_of_txs.go | 68 +++++++ .../get_including_blockhash_of_tx.go | 52 +++++ app/rpc/rpchandlers/get_tx.go | 80 ++++++++ app/rpc/rpchandlers/get_tx_confirmations.go | 47 +++++ app/rpc/rpchandlers/get_txs.go | 12 ++ app/rpc/rpchandlers/get_txs_confirmations.go | 12 ++ domain/txindex/model.go | 3 + domain/txindex/store.go | 2 +- domain/txindex/txindex.go | 97 +++++++-- .../server/grpcserver/protowire/rpc.md | 2 + .../server/grpcserver/protowire/rpc.pb.go | 188 ++++++++++-------- .../server/grpcserver/protowire/rpc.proto | 2 + .../rpc_get_accepting_block_of_tx.go | 10 +- .../rpc_get_accepting_blockhashes_of_txs.go | 13 +- .../rpc_get_accepting_blocks_of_txs.go | 23 ++- .../server/grpcserver/protowire/rpc_get_tx.go | 6 +- .../protowire/rpc_get_tx_confirmations.go | 6 +- .../grpcserver/protowire/rpc_get_txs.go | 6 +- .../protowire/rpc_get_txs_confirmations.go | 14 +- 25 files changed, 635 insertions(+), 147 deletions(-) create mode 100644 app/rpc/rpchandlers/get_accepting_block_of_tx.go rename app/rpc/rpchandlers/{get_accepting_block_hash_of_tx.go => get_accepting_blockhash_of_tx.go} (92%) create mode 100644 app/rpc/rpchandlers/get_accepting_blockhashes_of_txs.go create mode 100644 app/rpc/rpchandlers/get_accepting_blocks_of_txs.go create mode 100644 app/rpc/rpchandlers/get_including_blockhash_of_tx.go create mode 100644 app/rpc/rpchandlers/get_tx.go create mode 100644 app/rpc/rpchandlers/get_tx_confirmations.go create mode 100644 app/rpc/rpchandlers/get_txs.go create mode 100644 app/rpc/rpchandlers/get_txs_confirmations.go diff --git a/app/appmessage/rpc_get_accepting_block_of_tx.go b/app/appmessage/rpc_get_accepting_block_of_tx.go index 767b49e342..97bb39c100 100644 --- a/app/appmessage/rpc_get_accepting_block_of_tx.go +++ b/app/appmessage/rpc_get_accepting_block_of_tx.go @@ -4,7 +4,8 @@ package appmessage // its respective RPC message type GetAcceptingBlockOfTxRequestMessage struct { baseMessage - TxID string + TxID string + IncludeTransactions bool } // Command returns the protocol command string for the message diff --git a/app/appmessage/rpc_get_accepting_blockhashes_of_txs.go b/app/appmessage/rpc_get_accepting_blockhashes_of_txs.go index 31883eddba..8b08ab3464 100644 --- a/app/appmessage/rpc_get_accepting_blockhashes_of_txs.go +++ b/app/appmessage/rpc_get_accepting_blockhashes_of_txs.go @@ -3,8 +3,8 @@ package appmessage // TxIDBlockHashPair is an appmessage corresponding to // its respective RPC message type TxIDBlockHashPair struct { - TxID string - Hash string + TxID string + Hash string } // GetAcceptingBlockHashesOfTxsRequestMessage is an appmessage corresponding to diff --git a/app/appmessage/rpc_get_accepting_blocks_of_txs.go b/app/appmessage/rpc_get_accepting_blocks_of_txs.go index 22cb24bdaa..480677b03e 100644 --- a/app/appmessage/rpc_get_accepting_blocks_of_txs.go +++ b/app/appmessage/rpc_get_accepting_blocks_of_txs.go @@ -3,15 +3,16 @@ package appmessage // TxIDBlockPair is an appmessage corresponding to // its respective RPC message type TxIDBlockPair struct { - TxID string - Block RPCBlock + TxID string + Block *RPCBlock } // GetAcceptingBlocksOfTxsRequestMessage is an appmessage corresponding to // its respective RPC message type GetAcceptingBlocksOfTxsRequestMessage struct { baseMessage - TxIDs []string + TxIDs []string + IncludeTransactions bool } // Command returns the protocol command string for the message diff --git a/app/rpc/rpchandlers/get_accepting_block_of_tx.go b/app/rpc/rpchandlers/get_accepting_block_of_tx.go new file mode 100644 index 0000000000..69fcee3511 --- /dev/null +++ b/app/rpc/rpchandlers/get_accepting_block_of_tx.go @@ -0,0 +1,64 @@ +package rpchandlers + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/kaspanet/kaspad/app/rpc/rpccontext" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing" + "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" + + "github.com/pkg/errors" +) + +// HandleGetAcceptingBlockOfTx handles the respectively named RPC command +func HandleGetAcceptingBlockOfTx(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { + if !context.Config.TXIndex { + errorMessage := &appmessage.GetAcceptingBlockHashOfTxResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") + return errorMessage, nil + } + + getAcceptingBlockHashOfTxRequest := request.(*appmessage.GetAcceptingBlockOfTxRequestMessage) + + domainTxID, err := externalapi.NewDomainTransactionIDFromString(getAcceptingBlockHashOfTxRequest.TxID) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetAcceptingBlockOfTxResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + + acceptingBlock, found, err := context.TXIndex.TXAcceptingBlock(domainTxID) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetAcceptingBlockOfTxResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + if !found { + errorMessage := &appmessage.GetAcceptingBlockOfTxResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Could not find accepting block in the txindex database for txID: %s", domainTxID.String()) + return errorMessage, nil + } + + rpcAcceptingBlock := appmessage.DomainBlockToRPCBlock(acceptingBlock) + err = context.PopulateBlockWithVerboseData(rpcAcceptingBlock, acceptingBlock.Header, acceptingBlock, getAcceptingBlockHashOfTxRequest.IncludeTransactions) + if err != nil { + if errors.Is(err, rpccontext.ErrBuildBlockVerboseDataInvalidBlock) { + errorMessage := &appmessage.GetAcceptingBlockOfTxResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Block %s is invalid", consensushashing.BlockHash(acceptingBlock).String()) + return errorMessage, nil + } + return nil, err + } + + response := appmessage.NewGetAcceptingBlockOfTxResponse(rpcAcceptingBlock) + + return response, nil +} diff --git a/app/rpc/rpchandlers/get_accepting_block_hash_of_tx.go b/app/rpc/rpchandlers/get_accepting_blockhash_of_tx.go similarity index 92% rename from app/rpc/rpchandlers/get_accepting_block_hash_of_tx.go rename to app/rpc/rpchandlers/get_accepting_blockhash_of_tx.go index 3c6349386f..f9497f3422 100644 --- a/app/rpc/rpchandlers/get_accepting_block_hash_of_tx.go +++ b/app/rpc/rpchandlers/get_accepting_blockhash_of_tx.go @@ -25,7 +25,7 @@ func HandleGetAcceptingBlockHashOfTx(context *rpccontext.Context, _ *router.Rout if !errors.As(err, &rpcError) { return nil, err } - errorMessage := &appmessage.GetUTXOsByAddressesResponseMessage{} + errorMessage := &appmessage.GetAcceptingBlockHashOfTxResponseMessage{} errorMessage.Error = rpcError return errorMessage, nil } @@ -36,7 +36,7 @@ func HandleGetAcceptingBlockHashOfTx(context *rpccontext.Context, _ *router.Rout if !errors.As(err, &rpcError) { return nil, err } - errorMessage := &appmessage.GetUTXOsByAddressesResponseMessage{} + errorMessage := &appmessage.GetAcceptingBlockHashOfTxResponseMessage{} errorMessage.Error = rpcError return errorMessage, nil } diff --git a/app/rpc/rpchandlers/get_accepting_blockhashes_of_txs.go b/app/rpc/rpchandlers/get_accepting_blockhashes_of_txs.go new file mode 100644 index 0000000000..46b3331d6f --- /dev/null +++ b/app/rpc/rpchandlers/get_accepting_blockhashes_of_txs.go @@ -0,0 +1,57 @@ +package rpchandlers + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/kaspanet/kaspad/app/rpc/rpccontext" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" + + "github.com/pkg/errors" +) + +// HandleGetAcceptingBlockHashesOfTxs handles the respectively named RPC command +func HandleGetAcceptingBlockHashesOfTxs(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { + var err error + + if !context.Config.TXIndex { + errorMessage := &appmessage.GetAcceptingBlockHashesOfTxsResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") + return errorMessage, nil + } + + getAcceptingBlockHashesOfTxsRequest := request.(*appmessage.GetAcceptingBlockHashesOfTxsRequestMessage) + + domainTxIDs := make([]*externalapi.DomainTransactionID, len(getAcceptingBlockHashesOfTxsRequest.TxIDs)) + for i := range domainTxIDs { + domainTxIDs[i], err = externalapi.NewDomainTransactionIDFromString(getAcceptingBlockHashesOfTxsRequest.TxIDs[i]) + if err != nil { + errorMessage := &appmessage.GetAcceptingBlockHashesOfTxsResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("error parsing txID: %s", getAcceptingBlockHashesOfTxsRequest.TxIDs[i]) + return errorMessage, nil + } + } + acceptingBlockHashes, _, err := context.TXIndex.TXAcceptingBlockHashes(domainTxIDs) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetUTXOsByAddressesResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + + txIDBlockHashpairs := make([]*appmessage.TxIDBlockHashPair, len(acceptingBlockHashes)) + i := 0 + for txID, blockHash := range acceptingBlockHashes { + txIDBlockHashpairs[i] = &appmessage.TxIDBlockHashPair{ + TxID: txID.String(), + Hash: blockHash.String(), + } + i++ + } + + response := appmessage.NewGetAcceptingBlockHashesOfTxsResponse(txIDBlockHashpairs) + + return response, nil +} diff --git a/app/rpc/rpchandlers/get_accepting_blocks_of_txs.go b/app/rpc/rpchandlers/get_accepting_blocks_of_txs.go new file mode 100644 index 0000000000..f45076b79d --- /dev/null +++ b/app/rpc/rpchandlers/get_accepting_blocks_of_txs.go @@ -0,0 +1,68 @@ +package rpchandlers + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/kaspanet/kaspad/app/rpc/rpccontext" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing" + "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" + + "github.com/pkg/errors" +) + +// HandleGetAcceptingBlocksOfTx handles the respectively named RPC command +func HandleGetAcceptingBlocksOfTx(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { + var err error + + if !context.Config.TXIndex { + errorMessage := &appmessage.GetAcceptingBlocksOfTxsResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") + return errorMessage, nil + } + + getAcceptingBlocksOfTxsRequest := request.(*appmessage.GetAcceptingBlocksOfTxsRequestMessage) + + domainTxIDs := make([]*externalapi.DomainTransactionID, len(getAcceptingBlocksOfTxsRequest.TxIDs)) + for i := range domainTxIDs { + domainTxIDs[i], err = externalapi.NewDomainTransactionIDFromString(getAcceptingBlocksOfTxsRequest.TxIDs[i]) + if err != nil { + errorMessage := &appmessage.GetAcceptingBlocksOfTxsResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("error parsing txID: %s, %s", getAcceptingBlocksOfTxsRequest.TxIDs[i], err.Error()) + return errorMessage, nil + } + } + acceptingBlockHashes, _, err := context.TXIndex.TXAcceptingBlocks(domainTxIDs) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetUTXOsByAddressesResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + + txIDBlockPairs := make([]*appmessage.TxIDBlockPair, len(acceptingBlockHashes)) + i := 0 + for txID, acceptingBlock := range acceptingBlockHashes { + rpcAcceptingBlock := appmessage.DomainBlockToRPCBlock(acceptingBlock) + err = context.PopulateBlockWithVerboseData(rpcAcceptingBlock, acceptingBlock.Header, acceptingBlock, getAcceptingBlocksOfTxsRequest.IncludeTransactions) + if err != nil { + if errors.Is(err, rpccontext.ErrBuildBlockVerboseDataInvalidBlock) { + errorMessage := &appmessage.GetAcceptingBlockOfTxResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Block %s is invalid", consensushashing.BlockHash(acceptingBlock).String()) + return errorMessage, nil + } + return nil, err + } + txIDBlockPairs[i] = &appmessage.TxIDBlockPair{ + TxID: txID.String(), + Block: rpcAcceptingBlock, + } + i++ + } + + response := appmessage.NewGetAcceptingBlocksOfTxsResponse(txIDBlockPairs) + + return response, nil +} diff --git a/app/rpc/rpchandlers/get_including_blockhash_of_tx.go b/app/rpc/rpchandlers/get_including_blockhash_of_tx.go new file mode 100644 index 0000000000..22dfc48c6e --- /dev/null +++ b/app/rpc/rpchandlers/get_including_blockhash_of_tx.go @@ -0,0 +1,52 @@ +package rpchandlers + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/kaspanet/kaspad/app/rpc/rpccontext" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" + + "github.com/pkg/errors" +) + +// HandleGetIncludingBlockHashOfTx handles the respectively named RPC command +func HandleGetIncludingBlockHashOfTx(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { + if !context.Config.TXIndex { + errorMessage := &appmessage.GetIncludingBlockHashOfTxResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") + return errorMessage, nil + } + + getIncludingBlockHashOfTxRequest := request.(*appmessage.GetIncludingBlockHashOfTxRequestMessage) + + domainTxID, err := externalapi.NewDomainTransactionIDFromString(getIncludingBlockHashOfTxRequest.TxID) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetIncludingBlockHashOfTxResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + + includingBlockHash, found, err := context.TXIndex.TXIncludingBlockHash(domainTxID) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetIncludingBlockHashOfTxResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + if !found { + errorMessage := &appmessage.GetAcceptingBlockHashOfTxResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Could not find including block hash in the txindex database for txID: %s", domainTxID.String()) + return errorMessage, nil + } + + response := appmessage.NewGetIncludingBlockHashOfTxResponse(includingBlockHash.String()) + + return response, nil +} diff --git a/app/rpc/rpchandlers/get_tx.go b/app/rpc/rpchandlers/get_tx.go new file mode 100644 index 0000000000..84d2a6d6ef --- /dev/null +++ b/app/rpc/rpchandlers/get_tx.go @@ -0,0 +1,80 @@ +package rpchandlers + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/kaspanet/kaspad/app/rpc/rpccontext" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing" + "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" + + "github.com/pkg/errors" +) + +// HandleGetTx handles the respectively named RPC command +func HandleGetTx(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { + if !context.Config.TXIndex { + errorMessage := &appmessage.GetTxResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") + return errorMessage, nil + } + + getTxRequest := request.(*appmessage.GetTxRequestMessage) + + domainTxID, err := externalapi.NewDomainTransactionIDFromString(getTxRequest.TxID) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetTxResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + + transaction, found, err := context.TXIndex.GetTX(domainTxID) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetTxResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + if !found { + errorMessage := &appmessage.GetTxResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Could not find tx in the txindex database for txID: %s", domainTxID.String()) + return errorMessage, nil + } + + blockForVerboseData, found, err := context.TXIndex.TXAcceptingBlock(domainTxID) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetTxResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + if !found { + errorMessage := &appmessage.GetTxResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Could not find accepting block in the txindex database for txID: %s", domainTxID.String()) + return errorMessage, nil + } + + rpcTransaction := appmessage.DomainTransactionToRPCTransaction(transaction) + err = context.PopulateTransactionWithVerboseData(rpcTransaction, blockForVerboseData.Header) + if err != nil { + if errors.Is(err, rpccontext.ErrBuildBlockVerboseDataInvalidBlock) { + errorMessage := &appmessage.GetTxResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Block %s is invalid", consensushashing.BlockHash(blockForVerboseData).String()) + return errorMessage, nil + } + return nil, err + } + + response := appmessage.NewGetTxResponse(rpcTransaction) + + return response, nil +} diff --git a/app/rpc/rpchandlers/get_tx_confirmations.go b/app/rpc/rpchandlers/get_tx_confirmations.go new file mode 100644 index 0000000000..48348a0085 --- /dev/null +++ b/app/rpc/rpchandlers/get_tx_confirmations.go @@ -0,0 +1,47 @@ +package rpchandlers + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/kaspanet/kaspad/app/rpc/rpccontext" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" + + "github.com/pkg/errors" +) + +// HandleGetTxConfirmations handles the respectively named RPC command +func HandleGetTxConfirmations(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { + if !context.Config.TXIndex { + errorMessage := &appmessage.GetTxConfirmationsResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") + return errorMessage, nil + } + + getTxConfirmationsRequest := request.(*appmessage.GetTxConfirmationsRequestMessage) + + domainTxID, err := externalapi.NewDomainTransactionIDFromString(getTxConfirmationsRequest.TxID) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetTxConfirmationsResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + + confirmations, _, err := context.TXIndex.GetTXConfirmations(domainTxID) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetTxConfirmationsResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + + response := appmessage.NewGetTxConfirmationsResponse(confirmations) + + return response, nil +} diff --git a/app/rpc/rpchandlers/get_txs.go b/app/rpc/rpchandlers/get_txs.go new file mode 100644 index 0000000000..645cb64cc6 --- /dev/null +++ b/app/rpc/rpchandlers/get_txs.go @@ -0,0 +1,12 @@ +package rpchandlers + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/kaspanet/kaspad/app/rpc/rpccontext" + "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" +) + +// HandleGetTxs handles the respectively named RPC command +func HandleGetTxs(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { + return nil, nil +} diff --git a/app/rpc/rpchandlers/get_txs_confirmations.go b/app/rpc/rpchandlers/get_txs_confirmations.go new file mode 100644 index 0000000000..46917cdd45 --- /dev/null +++ b/app/rpc/rpchandlers/get_txs_confirmations.go @@ -0,0 +1,12 @@ +package rpchandlers + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/kaspanet/kaspad/app/rpc/rpccontext" + "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" +) + +// HandleGetTxsConfirmations handles the respectively named RPC command +func HandleGetTxsConfirmations(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { + return nil, nil +} diff --git a/domain/txindex/model.go b/domain/txindex/model.go index 8df405237a..c7b268a1c0 100644 --- a/domain/txindex/model.go +++ b/domain/txindex/model.go @@ -19,6 +19,9 @@ type TxIDsToBlockHashes map[*externalapi.DomainTransactionID]*externalapi.Domain //TxIDsToBlocks is a map of TxIDs to corrospnding blocks type TxIDsToBlocks map[*externalapi.DomainTransactionID]*externalapi.DomainBlock +//TxIDsToConfirmations is a map of TxIDs to corrospnding Confirmations +type TxIDsToConfirmations map[*externalapi.DomainTransactionID]int64 + // ConvertDomainHashToString converts the given DomainHash to a string func ConvertDomainHashToString(blockHash *externalapi.DomainHash) string { return hex.EncodeToString(blockHash.ByteSlice()) diff --git a/domain/txindex/store.go b/domain/txindex/store.go index 61b7f66ec8..38be9d19db 100644 --- a/domain/txindex/store.go +++ b/domain/txindex/store.go @@ -247,7 +247,7 @@ func (tis *txIndexStore) getTxAcceptingBlockHashes(txIDs []*externalapi.DomainTr serializedAcceptingBlockHash, err := tis.database.Get(key) if err != nil { if database.IsNotFoundError(err) { - return nil, false, nil + continue //ignore not found errors we expect this to happen frequently with queries } return nil, false, err } diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 00059011ad..15f61b3948 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -302,7 +302,7 @@ func (ti *TXIndex) TXAcceptingBlock(txID *externalapi.DomainTransactionID) ( // TXAcceptingBlocks returns the accepting blocks for for the given txIDs func (ti *TXIndex) TXAcceptingBlocks(txIDs []*externalapi.DomainTransactionID) ( - acceptingBlocks []*externalapi.DomainBlock, found bool, err error) { + acceptingBlocks TxIDsToBlocks, found bool, err error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlock") defer onEnd() @@ -314,23 +314,20 @@ func (ti *TXIndex) TXAcceptingBlocks(txIDs []*externalapi.DomainTransactionID) ( return nil, false, err } - acceptingBlockHashes := make([]*externalapi.DomainHash, len(acceptingBlockHashTxIDPairs)) - + acceptingBlocks = make(TxIDsToBlocks) i := 0 - for _, acceptingBlockHash := range acceptingBlockHashTxIDPairs { - acceptingBlockHashes[i] = acceptingBlockHash + for txID, blockHash := range acceptingBlockHashTxIDPairs { + acceptingBlocks[txID], err = ti.domain.Consensus().GetBlock(blockHash) + if err != nil { + if database.IsNotFoundError(err) { + continue // ignore + } else { + return nil, false, err + } + } i++ } - if !found { - return nil, false, nil - } - - acceptingBlocks, err = ti.domain.Consensus().GetBlocks(acceptingBlockHashes) - if err != nil { - return nil, false, err - } - return acceptingBlocks, true, nil } @@ -365,9 +362,44 @@ func (ti *TXIndex) GetTX(txID *externalapi.DomainTransactionID) ( return nil, false, fmt.Errorf("Could not find transaction with ID %s in Txindex database", txID.String()) } +// GetTXs returns the domain transaction for for the given txIDs +func (ti *TXIndex) GetTXs(txIDs []*externalapi.DomainTransactionID) ( + txs []*externalapi.DomainTransaction, found bool, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTXs") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + acceptingBlockHashes, found, err := ti.store.getTxAcceptingBlockHashes(txIDs) + if err != nil { + return nil, false, err + } + + txs = make([]*externalapi.DomainTransaction, 0) + for txID, acceptingBlockHash := range acceptingBlockHashes { + acceptingBlock, err := ti.domain.Consensus().GetBlock(acceptingBlockHash) + if err != nil { + if database.IsNotFoundError(err) { + continue // ignore + } else { + return nil, false, err + } + } + for _, tx := range acceptingBlock.Transactions { + if consensushashing.TransactionID(tx).Equal(txID) { + txs = append(txs, tx) + } + } + + } + + return txs, true, nil +} + // GetTXConfirmations returns the tx confirmations for for the given txID func (ti *TXIndex) GetTXConfirmations(txID *externalapi.DomainTransactionID) ( - BlockHashTxIDPair uint64, found bool, err error) { + Confirmations int64, found bool, err error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTXConfirmations") defer onEnd() @@ -381,7 +413,7 @@ func (ti *TXIndex) GetTXConfirmations(txID *externalapi.DomainTransactionID) ( acceptingBlockHeader, err := ti.domain.Consensus().GetBlockHeader(acceptingBlockHash) if err != nil { - return 0, false, err + return -1, false, err } virtualBlock, err := ti.domain.Consensus().GetVirtualInfo() @@ -389,7 +421,38 @@ func (ti *TXIndex) GetTXConfirmations(txID *externalapi.DomainTransactionID) ( return 0, false, err } - return virtualBlock.BlueScore - acceptingBlockHeader.BlueScore(), true, nil + return int64(virtualBlock.BlueScore - acceptingBlockHeader.BlueScore()), true, nil +} + +// GetTXsConfirmations returns the tx confirmations for for the given txIDs +func (ti *TXIndex) GetTXsConfirmations(txIDs []*externalapi.DomainTransactionID) ( + Confirmations TxIDsToConfirmations, found bool, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTXsConfirmations") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + virtualBlock, err := ti.domain.Consensus().GetVirtualInfo() + if err != nil { + return nil, false, err + } + + acceptingBlockHashes, _, err := ti.store.getTxAcceptingBlockHashes(txIDs) + if err != nil { + return nil, false, err + } + + Confirmations = make(TxIDsToConfirmations) + for txID, acceptingBlockHash := range acceptingBlockHashes { + acceptingBlockHeader, err := ti.domain.Consensus().GetBlockHeader(acceptingBlockHash) + if err != nil { + return nil, false, err + } + Confirmations[txID] = int64(acceptingBlockHeader.BlueScore() - virtualBlock.BlueScore) + } + + return Confirmations, true, nil } // TXIncludingBlockHash returns the including block hash for the given txID diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md index b6a97a7520..46025b1aac 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md @@ -1998,6 +1998,7 @@ See NotifyNewBlockTemplateRequestMessage | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | txID | [string](#string) | | | +| includeTransactions | [bool](#bool) | | | @@ -2029,6 +2030,7 @@ See NotifyNewBlockTemplateRequestMessage | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | txIDs | [string](#string) | repeated | | +| includeTransactions | [bool](#bool) | | | diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go index 251d33f630..f454c03252 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go @@ -6487,7 +6487,8 @@ type GetAcceptingBlockOfTxRequestMessage struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` + TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` + IncludeTransactions bool `protobuf:"varint,2,opt,name=includeTransactions,proto3" json:"includeTransactions,omitempty"` } func (x *GetAcceptingBlockOfTxRequestMessage) Reset() { @@ -6529,6 +6530,13 @@ func (x *GetAcceptingBlockOfTxRequestMessage) GetTxID() string { return "" } +func (x *GetAcceptingBlockOfTxRequestMessage) GetIncludeTransactions() bool { + if x != nil { + return x.IncludeTransactions + } + return false +} + type GetAcceptingBlockOfTxResponseMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6589,7 +6597,8 @@ type GetAcceptingBlocksOfTxsRequestMessage struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxIDs []string `protobuf:"bytes,1,rep,name=txIDs,proto3" json:"txIDs,omitempty"` + TxIDs []string `protobuf:"bytes,1,rep,name=txIDs,proto3" json:"txIDs,omitempty"` + IncludeTransactions bool `protobuf:"varint,2,opt,name=includeTransactions,proto3" json:"includeTransactions,omitempty"` } func (x *GetAcceptingBlocksOfTxsRequestMessage) Reset() { @@ -6631,6 +6640,13 @@ func (x *GetAcceptingBlocksOfTxsRequestMessage) GetTxIDs() []string { return nil } +func (x *GetAcceptingBlocksOfTxsRequestMessage) GetIncludeTransactions() bool { + if x != nil { + return x.IncludeTransactions + } + return false +} + type GetAcceptingBlocksOfTxsResponseMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -8039,93 +8055,99 @@ var file_rpc_proto_rawDesc = []byte{ 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x39, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, + 0x6f, 0x72, 0x22, 0x6b, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, - 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x7d, 0x0a, - 0x24, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x25, - 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0x96, 0x01, 0x0a, 0x26, - 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x49, 0x44, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0e, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, - 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x78, 0x49, 0x44, 0x22, 0x6a, 0x0a, 0x28, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, - 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x30, 0x0a, + 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, + 0x7d, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x6f, + 0x0a, 0x25, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x12, 0x30, 0x0a, + 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, + 0x96, 0x01, 0x0a, 0x26, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x74, 0x78, + 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, + 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0e, 0x74, 0x78, + 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x49, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, + 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x6a, 0x0a, 0x28, 0x47, 0x65, 0x74, 0x49, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, + 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0x29, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x7f, + 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0x29, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x2c, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0x82, 0x01, + 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x36, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x7f, 0x0a, 0x14, 0x47, 0x65, - 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2c, 0x0a, 0x14, 0x47, - 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x15, 0x47, 0x65, - 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x36, - 0x0a, 0x20, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x75, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, - 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x39, 0x0a, - 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, - 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x75, 0x0a, 0x21, 0x47, 0x65, + 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x58, 0x0a, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x49, 0x44, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, - 0x72, 0x52, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, - 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x39, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0xaa, 0x01, 0x0a, + 0x22, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x58, 0x0a, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, + 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto index dcb1a529a0..52f7427c44 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto @@ -761,6 +761,7 @@ message GetAcceptingBlockHashesOfTxsResponseMessage{ message GetAcceptingBlockOfTxRequestMessage{ string txID = 1; + bool includeTransactions = 2; } message GetAcceptingBlockOfTxResponseMessage{ @@ -771,6 +772,7 @@ message GetAcceptingBlockOfTxResponseMessage{ message GetAcceptingBlocksOfTxsRequestMessage{ repeated string txIDs = 1; + bool includeTransactions = 2; } message GetAcceptingBlocksOfTxsResponseMessage{ diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_block_of_tx.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_block_of_tx.go index 91ab4cf30d..598ff37776 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_block_of_tx.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_block_of_tx.go @@ -14,7 +14,8 @@ func (x *KaspadMessage_GetAcceptingBlockOfTxRequest) toAppMessage() (appmessage. func (x *KaspadMessage_GetAcceptingBlockOfTxRequest) fromAppMessage(message *appmessage.GetAcceptingBlockOfTxRequestMessage) error { x.GetAcceptingBlockOfTxRequest = &GetAcceptingBlockOfTxRequestMessage{ - TxID: message.TxID, + TxID: message.TxID, + IncludeTransactions: message.IncludeTransactions, } return nil } @@ -24,7 +25,8 @@ func (x *GetAcceptingBlockOfTxRequestMessage) toAppMessage() (appmessage.Message return nil, errors.Wrapf(errorNil, "GetAcceptingBlockOfTxRequestMessage is nil") } return &appmessage.GetAcceptingBlockOfTxRequestMessage{ - TxID: x.TxID, + TxID: x.TxID, + IncludeTransactions: x.IncludeTransactions, }, nil } @@ -42,7 +44,7 @@ func (x *KaspadMessage_GetAcceptingBlockOfTxResponse) fromAppMessage(message *ap rpcErr = &RPCError{Message: message.Error.Message} } rpcBlock := &RpcBlock{} - + err := rpcBlock.fromAppMessage(message.Block) if err != nil { return err @@ -75,7 +77,7 @@ func (x *GetAcceptingBlockOfTxResponseMessage) toAppMessage() (appmessage.Messag } return &appmessage.GetAcceptingBlockOfTxResponseMessage{ - Block: appBlock, + Block: appBlock, Error: rpcErr, }, nil } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blockhashes_of_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blockhashes_of_txs.go index 8689a52488..ac0125025c 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blockhashes_of_txs.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blockhashes_of_txs.go @@ -46,7 +46,7 @@ func (x *KaspadMessage_GetAcceptingBlockHashesOfTxsResponse) fromAppMessage(mess for i := range rpcTxIDBlockHashPairs { rpcTxIDBlockHashPairs[i].fromAppMessage(message.TxIDBlockHashPairs[i]) } - + x.GetAcceptingBlockHashesOfTxsResponse = &GetAcceptingBlockHashesOfTxsResponseMessage{ TxIDBlockHashPairs: rpcTxIDBlockHashPairs, @@ -78,8 +78,8 @@ func (x *GetAcceptingBlockHashesOfTxsResponseMessage) toAppMessage() (appmessage } return &appmessage.GetAcceptingBlockHashesOfTxsResponseMessage{ - TxIDBlockHashPairs: appTxIDBlockHashPairs, - Error: rpcErr, + TxIDBlockHashPairs: appTxIDBlockHashPairs, + Error: rpcErr, }, nil } @@ -89,16 +89,15 @@ func (x *TxIDBlockHashPair) toAppMessage() (*appmessage.TxIDBlockHashPair, error } return &appmessage.TxIDBlockHashPair{ - TxID: x.TxID, - Hash: x.Hash, + TxID: x.TxID, + Hash: x.Hash, }, nil } func (x *TxIDBlockHashPair) fromAppMessage(message *appmessage.TxIDBlockHashPair) { - + *x = TxIDBlockHashPair{ TxID: message.TxID, Hash: message.Hash, - } } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blocks_of_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blocks_of_txs.go index 40b3fcca41..673d5c1832 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blocks_of_txs.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blocks_of_txs.go @@ -14,7 +14,8 @@ func (x *KaspadMessage_GetAcceptingBlocksOfTxsRequest) toAppMessage() (appmessag func (x *KaspadMessage_GetAcceptingBlocksOfTxsRequest) fromAppMessage(message *appmessage.GetAcceptingBlocksOfTxsRequestMessage) error { x.GetAcceptingBlocksOfTxsRequest = &GetAcceptingBlocksOfTxsRequestMessage{ - TxIDs: message.TxIDs, + TxIDs: message.TxIDs, + IncludeTransactions: message.IncludeTransactions, } return nil } @@ -24,7 +25,8 @@ func (x *GetAcceptingBlocksOfTxsRequestMessage) toAppMessage() (appmessage.Messa return nil, errors.Wrapf(errorNil, "GetAcceptingBlocksOfTxsRequestMessage is nil") } return &appmessage.GetAcceptingBlocksOfTxsRequestMessage{ - TxIDs: x.TxIDs, + TxIDs: x.TxIDs, + IncludeTransactions: x.IncludeTransactions, }, nil } @@ -49,7 +51,7 @@ func (x *KaspadMessage_GetAcceptingBlocksOfTxsResponse) fromAppMessage(message * return err } } - + x.GetAcceptingBlocksOfTxsResponse = &GetAcceptingBlocksOfTxsResponseMessage{ TxIDBlockPairs: rpcTxIDBlockPairs, @@ -81,8 +83,8 @@ func (x *GetAcceptingBlocksOfTxsResponseMessage) toAppMessage() (appmessage.Mess } return &appmessage.GetAcceptingBlocksOfTxsResponseMessage{ - TxIDBlockPairs: appTxIDBlockPairs, - Error: rpcErr, + TxIDBlockPairs: appTxIDBlockPairs, + Error: rpcErr, }, nil } @@ -98,22 +100,21 @@ func (x *TxIDBlockPair) toAppMessage() (*appmessage.TxIDBlockPair, error) { return &appmessage.TxIDBlockPair{ TxID: x.TxID, - Block: *appBlock, + Block: appBlock, }, nil } func (x *TxIDBlockPair) fromAppMessage(message *appmessage.TxIDBlockPair) error { - + rpcBlock := &RpcBlock{} - - err := rpcBlock.fromAppMessage(&message.Block) + + err := rpcBlock.fromAppMessage(message.Block) if err != nil { return err } *x = TxIDBlockPair{ - TxID: message.TxID, + TxID: message.TxID, Block: rpcBlock, - } return nil } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx.go index f676aac392..310c67d1c4 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx.go @@ -43,7 +43,7 @@ func (x *KaspadMessage_GetTxResponse) fromAppMessage(message *appmessage.GetTxRe } rpcTransaction := &RpcTransaction{} rpcTransaction.fromAppMessage(message.Transaction) - + x.GetTxResponse = &GetTxResponseMessage{ Transaction: rpcTransaction, @@ -72,7 +72,7 @@ func (x *GetTxResponseMessage) toAppMessage() (appmessage.Message, error) { } return &appmessage.GetTxResponseMessage{ - Transaction: appTransaction, - Error: rpcErr, + Transaction: appTransaction, + Error: rpcErr, }, nil } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx_confirmations.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx_confirmations.go index 9726c5beda..4ea36692c4 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx_confirmations.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx_confirmations.go @@ -41,7 +41,7 @@ func (x *KaspadMessage_GetTxConfirmationsResponse) fromAppMessage(message *appme if message.Error != nil { rpcErr = &RPCError{Message: message.Error.Message} } - + x.GetTxConfirmationsResponse = &GetTxConfirmationsResponseMessage{ Confirmations: message.Confirmations, @@ -65,7 +65,7 @@ func (x *GetTxConfirmationsResponseMessage) toAppMessage() (appmessage.Message, } return &appmessage.GetTxConfirmationsResponseMessage{ - Confirmations: x.Confirmations, - Error: rpcErr, + Confirmations: x.Confirmations, + Error: rpcErr, }, nil } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs.go index c232741141..54396f6421 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs.go @@ -46,7 +46,7 @@ func (x *KaspadMessage_GetTxsResponse) fromAppMessage(message *appmessage.GetTxs for i := range rpcTransactions { rpcTransactions[i].fromAppMessage(message.Transactions[i]) } - + x.GetTxsResponse = &GetTxsResponseMessage{ Transactions: rpcTransactions, @@ -78,7 +78,7 @@ func (x *GetTxsResponseMessage) toAppMessage() (appmessage.Message, error) { } return &appmessage.GetTxsResponseMessage{ - Transactions: appTransactions, - Error: rpcErr, + Transactions: appTransactions, + Error: rpcErr, }, nil } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs_confirmations.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs_confirmations.go index 9d612cbefc..07e70b011c 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs_confirmations.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs_confirmations.go @@ -46,7 +46,7 @@ func (x *KaspadMessage_GetTxsConfirmationsResponse) fromAppMessage(message *appm for i := range rpcTxIDConfirmationsPairs { rpcTxIDConfirmationsPairs[i].fromAppMessage(message.TxIDConfirmationsPairs[i]) } - + x.GetTxsConfirmationsResponse = &GetTxsConfirmationsResponseMessage{ TxIDConfirmationsPairs: rpcTxIDConfirmationsPairs, @@ -78,8 +78,8 @@ func (x *GetTxsConfirmationsResponseMessage) toAppMessage() (appmessage.Message, } return &appmessage.GetTxsConfirmationsResponseMessage{ - TxIDConfirmationsPairs: appTxIDConfirmationsPairs, - Error: rpcErr, + TxIDConfirmationsPairs: appTxIDConfirmationsPairs, + Error: rpcErr, }, nil } @@ -89,15 +89,15 @@ func (x *TxIDConfirmationsPair) toAppMessage() (*appmessage.TxIDConfirmationsPai } return &appmessage.TxIDConfirmationsPair{ - TxID: x.TxID, - Confirmations: x.Confirmations, + TxID: x.TxID, + Confirmations: x.Confirmations, }, nil } func (x *TxIDConfirmationsPair) fromAppMessage(message *appmessage.TxIDConfirmationsPair) { - + *x = TxIDConfirmationsPair{ - TxID: message.TxID, + TxID: message.TxID, Confirmations: message.Confirmations, } } From 4c9aa952cb8e1d05c220b57e7f2fab4df59ac5ad Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Mon, 10 Oct 2022 14:31:42 +0200 Subject: [PATCH 24/47] finish handlers --- .../get_accepting_blockhashes_of_txs.go | 2 +- .../get_accepting_blocks_of_txs.go | 2 +- app/rpc/rpchandlers/get_txs.go | 71 ++++++++++++++++++- app/rpc/rpchandlers/get_txs_confirmations.go | 50 ++++++++++++- 4 files changed, 121 insertions(+), 4 deletions(-) diff --git a/app/rpc/rpchandlers/get_accepting_blockhashes_of_txs.go b/app/rpc/rpchandlers/get_accepting_blockhashes_of_txs.go index 46b3331d6f..931e138d1f 100644 --- a/app/rpc/rpchandlers/get_accepting_blockhashes_of_txs.go +++ b/app/rpc/rpchandlers/get_accepting_blockhashes_of_txs.go @@ -36,7 +36,7 @@ func HandleGetAcceptingBlockHashesOfTxs(context *rpccontext.Context, _ *router.R if !errors.As(err, &rpcError) { return nil, err } - errorMessage := &appmessage.GetUTXOsByAddressesResponseMessage{} + errorMessage := &appmessage.GetAcceptingBlockHashesOfTxsResponseMessage{} errorMessage.Error = rpcError return errorMessage, nil } diff --git a/app/rpc/rpchandlers/get_accepting_blocks_of_txs.go b/app/rpc/rpchandlers/get_accepting_blocks_of_txs.go index f45076b79d..5aeba7d29b 100644 --- a/app/rpc/rpchandlers/get_accepting_blocks_of_txs.go +++ b/app/rpc/rpchandlers/get_accepting_blocks_of_txs.go @@ -37,7 +37,7 @@ func HandleGetAcceptingBlocksOfTx(context *rpccontext.Context, _ *router.Router, if !errors.As(err, &rpcError) { return nil, err } - errorMessage := &appmessage.GetUTXOsByAddressesResponseMessage{} + errorMessage := &appmessage.GetAcceptingBlocksOfTxsResponseMessage{} errorMessage.Error = rpcError return errorMessage, nil } diff --git a/app/rpc/rpchandlers/get_txs.go b/app/rpc/rpchandlers/get_txs.go index 645cb64cc6..035e182e9e 100644 --- a/app/rpc/rpchandlers/get_txs.go +++ b/app/rpc/rpchandlers/get_txs.go @@ -1,12 +1,81 @@ package rpchandlers import ( + "errors" + "github.com/kaspanet/kaspad/app/appmessage" "github.com/kaspanet/kaspad/app/rpc/rpccontext" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing" "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" ) // HandleGetTxs handles the respectively named RPC command func HandleGetTxs(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { - return nil, nil + var err error + + if !context.Config.TXIndex { + errorMessage := &appmessage.GetTxsResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") + return errorMessage, nil + } + + getTxsRequest := request.(*appmessage.GetTxsRequestMessage) + + domainTxIDs := make([]*externalapi.DomainTransactionID, len(getTxsRequest.TxIDs)) + + for i := range domainTxIDs { + domainTxIDs[i], err = externalapi.NewDomainTransactionIDFromString(getTxsRequest.TxIDs[i]) + if err != nil { + errorMessage := &appmessage.GetTxsConfirmationsResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("error parsing txID: %s", getTxsRequest.TxIDs[i]) + return errorMessage, nil + } + } + + transactions, _, err := context.TXIndex.GetTXs(domainTxIDs) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetTxsResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + + rpcTransactions := make([]*appmessage.RPCTransaction, len(transactions)) + + for i := range transactions { + rpcTransactions[i] = appmessage.DomainTransactionToRPCTransaction(transactions[i]) + blockForVerboseData, found, err := context.TXIndex.TXAcceptingBlock(consensushashing.TransactionID(transactions[i])) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetTxsResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + if !found { + errorMessage := &appmessage.GetTxsResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Could not find accepting block in the txindex database for txID: %s", consensushashing.TransactionID(transactions[i]).String()) + return errorMessage, nil + } + + err = context.PopulateTransactionWithVerboseData(rpcTransactions[i], blockForVerboseData.Header) + if err != nil { + if errors.Is(err, rpccontext.ErrBuildBlockVerboseDataInvalidBlock) { + errorMessage := &appmessage.GetTxsResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Block %s is invalid", consensushashing.BlockHash(blockForVerboseData).String()) + return errorMessage, nil + } + return nil, err + } + } + + response := appmessage.NewGetTxsResponse(rpcTransactions) + + return response, nil } diff --git a/app/rpc/rpchandlers/get_txs_confirmations.go b/app/rpc/rpchandlers/get_txs_confirmations.go index 46917cdd45..314c57eb4c 100644 --- a/app/rpc/rpchandlers/get_txs_confirmations.go +++ b/app/rpc/rpchandlers/get_txs_confirmations.go @@ -1,12 +1,60 @@ package rpchandlers import ( + "errors" + "github.com/kaspanet/kaspad/app/appmessage" "github.com/kaspanet/kaspad/app/rpc/rpccontext" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" ) // HandleGetTxsConfirmations handles the respectively named RPC command func HandleGetTxsConfirmations(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { - return nil, nil + var err error + + if !context.Config.TXIndex { + errorMessage := &appmessage.GetTxsConfirmationsResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") + return errorMessage, nil + } + + getTxsConfirmationsRequest := request.(*appmessage.GetTxsConfirmationsRequestMessage) + + domainTxIDs := make([]*externalapi.DomainTransactionID, len(getTxsConfirmationsRequest.TxIDs)) + + for i := range domainTxIDs { + domainTxIDs[i], err = externalapi.NewDomainTransactionIDFromString(getTxsConfirmationsRequest.TxIDs[i]) + if err != nil { + errorMessage := &appmessage.GetTxsConfirmationsResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("error parsing txID: %s", getTxsConfirmationsRequest.TxIDs[i]) + return errorMessage, nil + } + } + + txIDsToConfirmations, _, err := context.TXIndex.GetTXsConfirmations(domainTxIDs) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetTxsConfirmationsResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + + txIDConfirmationPairs := make([]*appmessage.TxIDConfirmationsPair, len(txIDsToConfirmations)) + + i := 0 + for txID, Confirmations := range txIDsToConfirmations { + txIDConfirmationPairs[i] = &appmessage.TxIDConfirmationsPair{ + TxID: txID.String(), + Confirmations: Confirmations, + } + i++ + } + + response := appmessage.NewGetTxsConfirmationsResponse(txIDConfirmationPairs) + + return response, nil } From 8f1348b562eb0af8e610bbcff9abeb0fd8a3e43c Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Mon, 10 Oct 2022 14:49:52 +0200 Subject: [PATCH 25/47] set-up client commnds --- .../rpc_get_accepting_block_of_tx.go | 20 ++++++++++++++++++ ...o => rpc_get_accepting_blockhash_of_tx.go} | 4 ++-- .../rpc_get_accepting_blockhashes_of_txs.go | 20 ++++++++++++++++++ .../rpc_get_accepting_blocks_of_txs.go | 20 ++++++++++++++++++ .../rpcclient/rpc_get_coin_supply copy.go | 20 ++++++++++++++++++ .../rpc_get_including_blockhash_of_tx.go | 20 ++++++++++++++++++ .../network/rpcclient/rpc_get_tx.go | 20 ++++++++++++++++++ .../rpcclient/rpc_get_tx_confirmations.go | 20 ++++++++++++++++++ .../network/rpcclient/rpc_get_txs.go | 21 +++++++++++++++++++ .../rpcclient/rpc_get_txs_confirmations.go | 21 +++++++++++++++++++ 10 files changed, 184 insertions(+), 2 deletions(-) create mode 100644 infrastructure/network/rpcclient/rpc_get_accepting_block_of_tx.go rename infrastructure/network/rpcclient/{rpc_get_accepting_block_hash_of_tx.go => rpc_get_accepting_blockhash_of_tx.go} (72%) create mode 100644 infrastructure/network/rpcclient/rpc_get_accepting_blockhashes_of_txs.go create mode 100644 infrastructure/network/rpcclient/rpc_get_accepting_blocks_of_txs.go create mode 100644 infrastructure/network/rpcclient/rpc_get_coin_supply copy.go create mode 100644 infrastructure/network/rpcclient/rpc_get_including_blockhash_of_tx.go create mode 100644 infrastructure/network/rpcclient/rpc_get_tx.go create mode 100644 infrastructure/network/rpcclient/rpc_get_tx_confirmations.go create mode 100644 infrastructure/network/rpcclient/rpc_get_txs.go create mode 100644 infrastructure/network/rpcclient/rpc_get_txs_confirmations.go diff --git a/infrastructure/network/rpcclient/rpc_get_accepting_block_of_tx.go b/infrastructure/network/rpcclient/rpc_get_accepting_block_of_tx.go new file mode 100644 index 0000000000..4153ae0ce4 --- /dev/null +++ b/infrastructure/network/rpcclient/rpc_get_accepting_block_of_tx.go @@ -0,0 +1,20 @@ +package rpcclient + +import "github.com/kaspanet/kaspad/app/appmessage" + +// GetAcceptingBlockOfTx sends an RPC request respective to the function's name and returns the RPC server's response +func (c *RPCClient) GetAcceptingBlockOfTx(txID string) (*appmessage.GetAcceptingBlockOfTxResponseMessage, error) { + err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetAcceptingBlockOfTxRequest(txID)) + if err != nil { + return nil, err + } + response, err := c.route(appmessage.CmdGetAcceptingBlockOfTxResponseMessage).DequeueWithTimeout(c.timeout) + if err != nil { + return nil, err + } + getAcceptingBlockOfTxResponse := response.(*appmessage.GetAcceptingBlockOfTxResponseMessage) + if getAcceptingBlockOfTxResponse.Error != nil { + return nil, c.convertRPCError(getAcceptingBlockOfTxResponse.Error) + } + return getAcceptingBlockOfTxResponse, nil +} diff --git a/infrastructure/network/rpcclient/rpc_get_accepting_block_hash_of_tx.go b/infrastructure/network/rpcclient/rpc_get_accepting_blockhash_of_tx.go similarity index 72% rename from infrastructure/network/rpcclient/rpc_get_accepting_block_hash_of_tx.go rename to infrastructure/network/rpcclient/rpc_get_accepting_blockhash_of_tx.go index 577764d60d..70390b9e38 100644 --- a/infrastructure/network/rpcclient/rpc_get_accepting_block_hash_of_tx.go +++ b/infrastructure/network/rpcclient/rpc_get_accepting_blockhash_of_tx.go @@ -2,8 +2,8 @@ package rpcclient import "github.com/kaspanet/kaspad/app/appmessage" -// GetAcceptingBlockHashOfTx sends an RPC request respective to the function's name and returns the RPC server's response -func (c *RPCClient) GetAcceptingBlockHashOfTx(txID string) (*appmessage.GetAcceptingBlockHashOfTxResponseMessage, error) { +// GetAcceptingBlockHashOfTxs sends an RPC request respective to the function's name and returns the RPC server's response +func (c *RPCClient) GetAcceptingBlockHashOfTxs(txID string) (*appmessage.GetAcceptingBlockHashOfTxResponseMessage, error) { err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetAcceptingBlockHashOfTxRequest(txID)) if err != nil { return nil, err diff --git a/infrastructure/network/rpcclient/rpc_get_accepting_blockhashes_of_txs.go b/infrastructure/network/rpcclient/rpc_get_accepting_blockhashes_of_txs.go new file mode 100644 index 0000000000..b22ae811cc --- /dev/null +++ b/infrastructure/network/rpcclient/rpc_get_accepting_blockhashes_of_txs.go @@ -0,0 +1,20 @@ +package rpcclient + +import "github.com/kaspanet/kaspad/app/appmessage" + +// GetAcceptingBlockHashesOfTxs sends an RPC request respective to the function's name and returns the RPC server's response +func (c *RPCClient) GetAcceptingBlockHashesOfTxs(txIDs []string) (*appmessage.GetAcceptingBlockHashesOfTxsResponseMessage, error) { + err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetAcceptingBlockHashesOfTxsRequest(txIDs)) + if err != nil { + return nil, err + } + response, err := c.route(appmessage.CmdGetAcceptingBlockHashesOfTxsResponseMessage).DequeueWithTimeout(c.timeout) + if err != nil { + return nil, err + } + getAcceptingBlockHashesOfTxsResponse := response.(*appmessage.GetAcceptingBlockHashesOfTxsResponseMessage) + if getAcceptingBlockHashesOfTxsResponse.Error != nil { + return nil, c.convertRPCError(getAcceptingBlockHashesOfTxsResponse.Error) + } + return getAcceptingBlockHashesOfTxsResponse, nil +} diff --git a/infrastructure/network/rpcclient/rpc_get_accepting_blocks_of_txs.go b/infrastructure/network/rpcclient/rpc_get_accepting_blocks_of_txs.go new file mode 100644 index 0000000000..5d3d74734e --- /dev/null +++ b/infrastructure/network/rpcclient/rpc_get_accepting_blocks_of_txs.go @@ -0,0 +1,20 @@ +package rpcclient + +import "github.com/kaspanet/kaspad/app/appmessage" + +// GetAcceptingBlocksTxs sends an RPC request respective to the function's name and returns the RPC server's response +func (c *RPCClient) GetAcceptingBlocksTxs(txIDs []string) (*appmessage.GetAcceptingBlocksOfTxsResponseMessage, error) { + err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetAcceptingBlocksOfTxsRequest(txIDs)) + if err != nil { + return nil, err + } + response, err := c.route(appmessage.CmdGetAcceptingBlocksOfTxsResponseMessage).DequeueWithTimeout(c.timeout) + if err != nil { + return nil, err + } + getAcceptingBlocksOfTxsResponse := response.(*appmessage.GetAcceptingBlocksOfTxsResponseMessage) + if getAcceptingBlocksOfTxsResponse.Error != nil { + return nil, c.convertRPCError(getAcceptingBlocksOfTxsResponse.Error) + } + return getAcceptingBlocksOfTxsResponse, nil +} diff --git a/infrastructure/network/rpcclient/rpc_get_coin_supply copy.go b/infrastructure/network/rpcclient/rpc_get_coin_supply copy.go new file mode 100644 index 0000000000..92b8f8c47c --- /dev/null +++ b/infrastructure/network/rpcclient/rpc_get_coin_supply copy.go @@ -0,0 +1,20 @@ +package rpcclient + +import "github.com/kaspanet/kaspad/app/appmessage" + +// GetCoinSupply sends an RPC request respective to the function's name and returns the RPC server's response +func (c *RPCClient) GetCoinSupply() (*appmessage.GetCoinSupplyResponseMessage, error) { + err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetCoinSupplyRequestMessage()) + if err != nil { + return nil, err + } + response, err := c.route(appmessage.CmdGetCoinSupplyResponseMessage).DequeueWithTimeout(c.timeout) + if err != nil { + return nil, err + } + geCoinSupplyResponse := response.(*appmessage.GetCoinSupplyResponseMessage) + if geCoinSupplyResponse.Error != nil { + return nil, c.convertRPCError(geCoinSupplyResponse.Error) + } + return geCoinSupplyResponse, nil +} diff --git a/infrastructure/network/rpcclient/rpc_get_including_blockhash_of_tx.go b/infrastructure/network/rpcclient/rpc_get_including_blockhash_of_tx.go new file mode 100644 index 0000000000..b6b8f34a31 --- /dev/null +++ b/infrastructure/network/rpcclient/rpc_get_including_blockhash_of_tx.go @@ -0,0 +1,20 @@ +package rpcclient + +import "github.com/kaspanet/kaspad/app/appmessage" + +// GetIncludingBlockHashOfTxs sends an RPC request respective to the function's name and returns the RPC server's response +func (c *RPCClient) GetIncludingBlockHashOfTxs(txID string) (*appmessage.GetIncludingBlockHashOfTxResponseMessage, error) { + err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetIncludingBlockHashOfTxRequest(txID)) + if err != nil { + return nil, err + } + response, err := c.route(appmessage.CmdGetIncludingBlockHashOfTxResponseMessage).DequeueWithTimeout(c.timeout) + if err != nil { + return nil, err + } + getIncludingBlockHashOfTxResponse := response.(*appmessage.GetIncludingBlockHashOfTxResponseMessage) + if getIncludingBlockHashOfTxResponse.Error != nil { + return nil, c.convertRPCError(getIncludingBlockHashOfTxResponse.Error) + } + return getIncludingBlockHashOfTxResponse, nil +} diff --git a/infrastructure/network/rpcclient/rpc_get_tx.go b/infrastructure/network/rpcclient/rpc_get_tx.go new file mode 100644 index 0000000000..9a80a83937 --- /dev/null +++ b/infrastructure/network/rpcclient/rpc_get_tx.go @@ -0,0 +1,20 @@ +package rpcclient + +import "github.com/kaspanet/kaspad/app/appmessage" + +// GetTx sends an RPC request respective to the function's name and returns the RPC server's response +func (c *RPCClient) GetTx(txID string) (*appmessage.GetTxResponseMessage, error) { + err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetTxRequest(txID)) + if err != nil { + return nil, err + } + response, err := c.route(appmessage.CmdGetTxResponseMessage).DequeueWithTimeout(c.timeout) + if err != nil { + return nil, err + } + getTxResponse := response.(*appmessage.GetTxResponseMessage) + if getTxResponse.Error != nil { + return nil, c.convertRPCError(getTxResponse.Error) + } + return getTxResponse, nil +} diff --git a/infrastructure/network/rpcclient/rpc_get_tx_confirmations.go b/infrastructure/network/rpcclient/rpc_get_tx_confirmations.go new file mode 100644 index 0000000000..6be7147aee --- /dev/null +++ b/infrastructure/network/rpcclient/rpc_get_tx_confirmations.go @@ -0,0 +1,20 @@ +package rpcclient + +import "github.com/kaspanet/kaspad/app/appmessage" + +// GetTx sends an RPC request respective to the function's name and returns the RPC server's response +func (c *RPCClient) GetTxConfirmations(txID string) (*appmessage.GetTxConfirmationsResponseMessage, error) { + err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetTxConfirmationsRequest(txID)) + if err != nil { + return nil, err + } + response, err := c.route(appmessage.CmdGetTxConfirmationsResponseMessage).DequeueWithTimeout(c.timeout) + if err != nil { + return nil, err + } + getTxConfirmationsResponse := response.(*appmessage.GetTxConfirmationsResponseMessage) + if getTxConfirmationsResponse.Error != nil { + return nil, c.convertRPCError(getTxConfirmationsResponse.Error) + } + return getTxConfirmationsResponse, nil +} diff --git a/infrastructure/network/rpcclient/rpc_get_txs.go b/infrastructure/network/rpcclient/rpc_get_txs.go new file mode 100644 index 0000000000..7c5ff01d77 --- /dev/null +++ b/infrastructure/network/rpcclient/rpc_get_txs.go @@ -0,0 +1,21 @@ +package rpcclient + +import "github.com/kaspanet/kaspad/app/appmessage" + +// GetTxs sends an RPC request respective to the function's name and returns the RPC server's response +func (c *RPCClient) GetTxs(txIDs []string) (*appmessage.GetTxsResponseMessage, error) { + err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetTxsRequest(txIDs)) + if err != nil { + return nil, err + } + response, err := c.route(appmessage.CmdGetTxsResponseMessage).DequeueWithTimeout(c.timeout) + if err != nil { + return nil, err + } + getTxsResponse := response.(*appmessage.GetTxsResponseMessage) + if getTxsResponse.Error != nil { + return nil, c.convertRPCError(getTxsResponse.Error) + } + return getTxsResponse, nil +} + diff --git a/infrastructure/network/rpcclient/rpc_get_txs_confirmations.go b/infrastructure/network/rpcclient/rpc_get_txs_confirmations.go new file mode 100644 index 0000000000..3905770b35 --- /dev/null +++ b/infrastructure/network/rpcclient/rpc_get_txs_confirmations.go @@ -0,0 +1,21 @@ +package rpcclient + +import "github.com/kaspanet/kaspad/app/appmessage" + +// GetTXsConfirmations sends an RPC request respective to the function's name and returns the RPC server's response +func (c *RPCClient) GetTxsConfirmations(txIDs []string) (*appmessage.GetTxsConfirmationsResponseMessage, error) { + err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetTxsConfirmationsRequest(txIDs)) + if err != nil { + return nil, err + } + response, err := c.route(appmessage.CmdGetTxsConfirmationsResponseMessage).DequeueWithTimeout(c.timeout) + if err != nil { + return nil, err + } + getTxsConfirmationsResponse := response.(*appmessage.GetTxsConfirmationsResponseMessage) + if getTxsConfirmationsResponse.Error != nil { + return nil, c.convertRPCError(getTxsConfirmationsResponse.Error) + } + return getTxsConfirmationsResponse, nil +} + From 3c94c86af39f63452d71ef3e637989bf617e1299 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Mon, 10 Oct 2022 14:51:10 +0200 Subject: [PATCH 26/47] fix fmt and linting --- .../rpcclient/rpc_get_coin_supply copy.go | 20 ------------------- .../rpcclient/rpc_get_tx_confirmations.go | 2 +- .../network/rpcclient/rpc_get_txs.go | 1 - .../rpcclient/rpc_get_txs_confirmations.go | 3 +-- 4 files changed, 2 insertions(+), 24 deletions(-) delete mode 100644 infrastructure/network/rpcclient/rpc_get_coin_supply copy.go diff --git a/infrastructure/network/rpcclient/rpc_get_coin_supply copy.go b/infrastructure/network/rpcclient/rpc_get_coin_supply copy.go deleted file mode 100644 index 92b8f8c47c..0000000000 --- a/infrastructure/network/rpcclient/rpc_get_coin_supply copy.go +++ /dev/null @@ -1,20 +0,0 @@ -package rpcclient - -import "github.com/kaspanet/kaspad/app/appmessage" - -// GetCoinSupply sends an RPC request respective to the function's name and returns the RPC server's response -func (c *RPCClient) GetCoinSupply() (*appmessage.GetCoinSupplyResponseMessage, error) { - err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetCoinSupplyRequestMessage()) - if err != nil { - return nil, err - } - response, err := c.route(appmessage.CmdGetCoinSupplyResponseMessage).DequeueWithTimeout(c.timeout) - if err != nil { - return nil, err - } - geCoinSupplyResponse := response.(*appmessage.GetCoinSupplyResponseMessage) - if geCoinSupplyResponse.Error != nil { - return nil, c.convertRPCError(geCoinSupplyResponse.Error) - } - return geCoinSupplyResponse, nil -} diff --git a/infrastructure/network/rpcclient/rpc_get_tx_confirmations.go b/infrastructure/network/rpcclient/rpc_get_tx_confirmations.go index 6be7147aee..d165db9d9f 100644 --- a/infrastructure/network/rpcclient/rpc_get_tx_confirmations.go +++ b/infrastructure/network/rpcclient/rpc_get_tx_confirmations.go @@ -2,7 +2,7 @@ package rpcclient import "github.com/kaspanet/kaspad/app/appmessage" -// GetTx sends an RPC request respective to the function's name and returns the RPC server's response +// GetTxConfirmations sends an RPC request respective to the function's name and returns the RPC server's response func (c *RPCClient) GetTxConfirmations(txID string) (*appmessage.GetTxConfirmationsResponseMessage, error) { err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetTxConfirmationsRequest(txID)) if err != nil { diff --git a/infrastructure/network/rpcclient/rpc_get_txs.go b/infrastructure/network/rpcclient/rpc_get_txs.go index 7c5ff01d77..4d7058358d 100644 --- a/infrastructure/network/rpcclient/rpc_get_txs.go +++ b/infrastructure/network/rpcclient/rpc_get_txs.go @@ -18,4 +18,3 @@ func (c *RPCClient) GetTxs(txIDs []string) (*appmessage.GetTxsResponseMessage, e } return getTxsResponse, nil } - diff --git a/infrastructure/network/rpcclient/rpc_get_txs_confirmations.go b/infrastructure/network/rpcclient/rpc_get_txs_confirmations.go index 3905770b35..007feaa888 100644 --- a/infrastructure/network/rpcclient/rpc_get_txs_confirmations.go +++ b/infrastructure/network/rpcclient/rpc_get_txs_confirmations.go @@ -2,7 +2,7 @@ package rpcclient import "github.com/kaspanet/kaspad/app/appmessage" -// GetTXsConfirmations sends an RPC request respective to the function's name and returns the RPC server's response +// GetTxsConfirmations sends an RPC request respective to the function's name and returns the RPC server's response func (c *RPCClient) GetTxsConfirmations(txIDs []string) (*appmessage.GetTxsConfirmationsResponseMessage, error) { err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetTxsConfirmationsRequest(txIDs)) if err != nil { @@ -18,4 +18,3 @@ func (c *RPCClient) GetTxsConfirmations(txIDs []string) (*appmessage.GetTxsConfi } return getTxsConfirmationsResponse, nil } - From 1b5a236651e5912c60c678c9d8e0bc6b398009fe Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Mon, 10 Oct 2022 15:14:08 +0200 Subject: [PATCH 27/47] include commands in kaspactl --- cmd/kaspactl/commands.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cmd/kaspactl/commands.go b/cmd/kaspactl/commands.go index 9b68ad551e..af9ca15a7c 100644 --- a/cmd/kaspactl/commands.go +++ b/cmd/kaspactl/commands.go @@ -16,6 +16,15 @@ var commandTypes = []reflect.Type{ reflect.TypeOf(protowire.KaspadMessage_GetInfoRequest{}), reflect.TypeOf(protowire.KaspadMessage_GetAcceptingBlockHashOfTxRequest{}), + reflect.TypeOf(protowire.KaspadMessage_GetAcceptingBlockHashesOfTxsRequest{}), + reflect.TypeOf(protowire.KaspadMessage_GetAcceptingBlockOfTxRequest{}), + reflect.TypeOf(protowire.KaspadMessage_GetAcceptingBlocksOfTxsRequest{}), + reflect.TypeOf(protowire.KaspadMessage_GetIncludingBlockHashOfTxRequest{}), + reflect.TypeOf(protowire.KaspadMessage_GetTxRequest{}), + reflect.TypeOf(protowire.KaspadMessage_GetTxsRequest{}), + reflect.TypeOf(protowire.KaspadMessage_GetTxConfirmationsRequest{}), + reflect.TypeOf(protowire.KaspadMessage_GetTxsConfirmationsRequest{}), + reflect.TypeOf(protowire.KaspadMessage_GetBlockRequest{}), reflect.TypeOf(protowire.KaspadMessage_GetBlocksRequest{}), From 1aa93d2fc48e96adfae04d5f3176d8a987b2b423 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Mon, 10 Oct 2022 17:12:24 +0200 Subject: [PATCH 28/47] some fixes, not all commands working --- app/appmessage/message.go | 1 - .../rpc_get_accepting_block_of_tx.go | 5 +++-- .../rpc_get_accepting_blocks_of_txs.go | 3 ++- app/rpc/rpc.go | 9 +++++++++ .../rpchandlers/get_accepting_block_of_tx.go | 6 +++--- .../get_accepting_blocks_of_txs.go | 4 ++-- app/rpc/rpchandlers/get_txs_confirmations.go | 4 ++++ domain/txindex/txindex.go | 19 ++++++++----------- .../rpc_get_accepting_block_of_tx.go | 4 ++-- .../rpc_get_accepting_blockhash_of_tx.go | 4 ++-- .../rpc_get_accepting_blocks_of_txs.go | 4 ++-- 11 files changed, 37 insertions(+), 26 deletions(-) diff --git a/app/appmessage/message.go b/app/appmessage/message.go index 2b2c934c74..27a27d2fc2 100644 --- a/app/appmessage/message.go +++ b/app/appmessage/message.go @@ -165,7 +165,6 @@ const ( CmdGetCoinSupplyResponseMessage CmdGetAcceptingBlockHashOfTxRequestMessage CmdGetAcceptingBlockHashOfTxResponseMessage - CmdGetAcceptingBlockHashesOfTxsRequestMessage CmdGetAcceptingBlockHashesOfTxsResponseMessage CmdGetAcceptingBlockOfTxRequestMessage diff --git a/app/appmessage/rpc_get_accepting_block_of_tx.go b/app/appmessage/rpc_get_accepting_block_of_tx.go index 97bb39c100..47f404acb2 100644 --- a/app/appmessage/rpc_get_accepting_block_of_tx.go +++ b/app/appmessage/rpc_get_accepting_block_of_tx.go @@ -10,13 +10,14 @@ type GetAcceptingBlockOfTxRequestMessage struct { // Command returns the protocol command string for the message func (msg *GetAcceptingBlockOfTxRequestMessage) Command() MessageCommand { - return CmdGetAcceptingBlockHashOfTxRequestMessage + return CmdGetAcceptingBlockOfTxRequestMessage } // NewGetAcceptingBlockOfTxRequest returns a instance of the message -func NewGetAcceptingBlockOfTxRequest(txID string) *GetAcceptingBlockOfTxRequestMessage { +func NewGetAcceptingBlockOfTxRequest(txID string, includeTransactions bool) *GetAcceptingBlockOfTxRequestMessage { return &GetAcceptingBlockOfTxRequestMessage{ TxID: txID, + IncludeTransactions: includeTransactions, } } diff --git a/app/appmessage/rpc_get_accepting_blocks_of_txs.go b/app/appmessage/rpc_get_accepting_blocks_of_txs.go index 480677b03e..5fa3f05582 100644 --- a/app/appmessage/rpc_get_accepting_blocks_of_txs.go +++ b/app/appmessage/rpc_get_accepting_blocks_of_txs.go @@ -21,9 +21,10 @@ func (msg *GetAcceptingBlocksOfTxsRequestMessage) Command() MessageCommand { } // NewGetAcceptingBlocksOfTxsRequest returns a instance of the message -func NewGetAcceptingBlocksOfTxsRequest(txIDs []string) *GetAcceptingBlocksOfTxsRequestMessage { +func NewGetAcceptingBlocksOfTxsRequest(txIDs []string, includeTransactions bool) *GetAcceptingBlocksOfTxsRequestMessage { return &GetAcceptingBlocksOfTxsRequestMessage{ TxIDs: txIDs, + IncludeTransactions: includeTransactions, } } diff --git a/app/rpc/rpc.go b/app/rpc/rpc.go index 71acd8b6b8..3a0f0ce7b3 100644 --- a/app/rpc/rpc.go +++ b/app/rpc/rpc.go @@ -52,6 +52,15 @@ var handlers = map[appmessage.MessageCommand]handler{ appmessage.CmdGetCoinSupplyRequestMessage: rpchandlers.HandleGetCoinSupply, appmessage.CmdGetMempoolEntriesByAddressesRequestMessage: rpchandlers.HandleGetMempoolEntriesByAddresses, appmessage.CmdGetAcceptingBlockHashOfTxRequestMessage: rpchandlers.HandleGetAcceptingBlockHashOfTx, + appmessage.CmdGetAcceptingBlockHashesOfTxsRequestMessage: rpchandlers.HandleGetAcceptingBlockHashesOfTxs, + appmessage.CmdGetAcceptingBlockOfTxRequestMessage: rpchandlers.HandleGetAcceptingBlockOfTx, + appmessage.CmdGetAcceptingBlocksOfTxsRequestMessage: rpchandlers.HandleGetAcceptingBlocksOfTxs, + appmessage.CmdGetIncludingBlockHashOfTxRequestMessage: rpchandlers.HandleGetIncludingBlockHashOfTx, + appmessage.CmdGetTxRequestMessage: rpchandlers.HandleGetTx, + appmessage.CmdGetTxsRequestMessage: rpchandlers.HandleGetTxs, + appmessage.CmdGetTxConfirmationsRequestMessage: rpchandlers.HandleGetTxConfirmations, + appmessage.CmdGetTxsConfirmationsRequestMessage: rpchandlers.HandleGetTxsConfirmations, + } func (m *Manager) routerInitializer(router *router.Router, netConnection *netadapter.NetConnection) { diff --git a/app/rpc/rpchandlers/get_accepting_block_of_tx.go b/app/rpc/rpchandlers/get_accepting_block_of_tx.go index 69fcee3511..577c1ebb84 100644 --- a/app/rpc/rpchandlers/get_accepting_block_of_tx.go +++ b/app/rpc/rpchandlers/get_accepting_block_of_tx.go @@ -18,9 +18,9 @@ func HandleGetAcceptingBlockOfTx(context *rpccontext.Context, _ *router.Router, return errorMessage, nil } - getAcceptingBlockHashOfTxRequest := request.(*appmessage.GetAcceptingBlockOfTxRequestMessage) + getAcceptingBlockOfTxRequest := request.(*appmessage.GetAcceptingBlockOfTxRequestMessage) - domainTxID, err := externalapi.NewDomainTransactionIDFromString(getAcceptingBlockHashOfTxRequest.TxID) + domainTxID, err := externalapi.NewDomainTransactionIDFromString(getAcceptingBlockOfTxRequest.TxID) if err != nil { rpcError := &appmessage.RPCError{} if !errors.As(err, &rpcError) { @@ -48,7 +48,7 @@ func HandleGetAcceptingBlockOfTx(context *rpccontext.Context, _ *router.Router, } rpcAcceptingBlock := appmessage.DomainBlockToRPCBlock(acceptingBlock) - err = context.PopulateBlockWithVerboseData(rpcAcceptingBlock, acceptingBlock.Header, acceptingBlock, getAcceptingBlockHashOfTxRequest.IncludeTransactions) + err = context.PopulateBlockWithVerboseData(rpcAcceptingBlock, acceptingBlock.Header, acceptingBlock, getAcceptingBlockOfTxRequest.IncludeTransactions) if err != nil { if errors.Is(err, rpccontext.ErrBuildBlockVerboseDataInvalidBlock) { errorMessage := &appmessage.GetAcceptingBlockOfTxResponseMessage{} diff --git a/app/rpc/rpchandlers/get_accepting_blocks_of_txs.go b/app/rpc/rpchandlers/get_accepting_blocks_of_txs.go index 5aeba7d29b..02bd41bafe 100644 --- a/app/rpc/rpchandlers/get_accepting_blocks_of_txs.go +++ b/app/rpc/rpchandlers/get_accepting_blocks_of_txs.go @@ -10,8 +10,8 @@ import ( "github.com/pkg/errors" ) -// HandleGetAcceptingBlocksOfTx handles the respectively named RPC command -func HandleGetAcceptingBlocksOfTx(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { +// HandleGetAcceptingBlocksOfTxs handles the respectively named RPC command +func HandleGetAcceptingBlocksOfTxs(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { var err error if !context.Config.TXIndex { diff --git a/app/rpc/rpchandlers/get_txs_confirmations.go b/app/rpc/rpchandlers/get_txs_confirmations.go index 314c57eb4c..33f94922d8 100644 --- a/app/rpc/rpchandlers/get_txs_confirmations.go +++ b/app/rpc/rpchandlers/get_txs_confirmations.go @@ -2,6 +2,7 @@ package rpchandlers import ( "errors" + "fmt" "github.com/kaspanet/kaspad/app/appmessage" "github.com/kaspanet/kaspad/app/rpc/rpccontext" @@ -54,6 +55,9 @@ func HandleGetTxsConfirmations(context *rpccontext.Context, _ *router.Router, re i++ } + fmt.Println(txIDConfirmationPairs[0].Confirmations) + fmt.Println(txIDConfirmationPairs[1].Confirmations) + response := appmessage.NewGetTxsConfirmationsResponse(txIDConfirmationPairs) return response, nil diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 15f61b3948..02f887cc9d 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -34,7 +34,7 @@ func New(domain domain.Domain, database database.Database) (*TXIndex, error) { return nil, err } - if !isSynced { + if !isSynced || true { err := txIndex.Reset() if err != nil { @@ -187,7 +187,7 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai if err != nil { return err } - for i, addedChainBlock := range chainBlocksChunk { + for i := range chainBlocksChunk { chainBlockAcceptanceData := chainBlocksAcceptanceData[i] for _, blockAcceptanceData := range chainBlockAcceptanceData { for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { @@ -195,7 +195,7 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai if transactionAcceptanceData.IsAccepted { ti.store.add( *consensushashing.TransactionID(transactionAcceptanceData.Transaction), - addedChainBlock, + blockAcceptanceData.BlockHash, ) } } @@ -222,7 +222,7 @@ func (ti *TXIndex) removeTXIDs(selectedParentChainChanges *externalapi.SelectedC if err != nil { return err } - for i, removedChainBlock := range chainBlocksChunk { + for i := range chainBlocksChunk { chainBlockAcceptanceData := chainBlocksAcceptanceData[i] for _, blockAcceptanceData := range chainBlockAcceptanceData { log.Tracef("TX index Removing: %d transactions", len(blockAcceptanceData.TransactionAcceptanceData)) @@ -230,7 +230,7 @@ func (ti *TXIndex) removeTXIDs(selectedParentChainChanges *externalapi.SelectedC if transactionAcceptanceData.IsAccepted { ti.store.remove( *consensushashing.TransactionID(transactionAcceptanceData.Transaction), - removedChainBlock, + blockAcceptanceData.BlockHash, ) } } @@ -350,12 +350,9 @@ func (ti *TXIndex) GetTX(txID *externalapi.DomainTransactionID) ( return nil, false, err } - var transaction *externalapi.DomainTransaction - - for _, tx := range acceptingBlock.Transactions { - if consensushashing.TransactionID(tx).Equal(txID) { - transaction = tx - return transaction, true, nil + for i := range acceptingBlock.Transactions { + if consensushashing.TransactionID(acceptingBlock.Transactions[i]).Equal(txID) { + return acceptingBlock.Transactions[i].Clone(), true, nil } } diff --git a/infrastructure/network/rpcclient/rpc_get_accepting_block_of_tx.go b/infrastructure/network/rpcclient/rpc_get_accepting_block_of_tx.go index 4153ae0ce4..a202e34cf2 100644 --- a/infrastructure/network/rpcclient/rpc_get_accepting_block_of_tx.go +++ b/infrastructure/network/rpcclient/rpc_get_accepting_block_of_tx.go @@ -3,8 +3,8 @@ package rpcclient import "github.com/kaspanet/kaspad/app/appmessage" // GetAcceptingBlockOfTx sends an RPC request respective to the function's name and returns the RPC server's response -func (c *RPCClient) GetAcceptingBlockOfTx(txID string) (*appmessage.GetAcceptingBlockOfTxResponseMessage, error) { - err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetAcceptingBlockOfTxRequest(txID)) +func (c *RPCClient) GetAcceptingBlockOfTx(txID string, includeTransactions bool) (*appmessage.GetAcceptingBlockOfTxResponseMessage, error) { + err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetAcceptingBlockOfTxRequest(txID, includeTransactions)) if err != nil { return nil, err } diff --git a/infrastructure/network/rpcclient/rpc_get_accepting_blockhash_of_tx.go b/infrastructure/network/rpcclient/rpc_get_accepting_blockhash_of_tx.go index 70390b9e38..577764d60d 100644 --- a/infrastructure/network/rpcclient/rpc_get_accepting_blockhash_of_tx.go +++ b/infrastructure/network/rpcclient/rpc_get_accepting_blockhash_of_tx.go @@ -2,8 +2,8 @@ package rpcclient import "github.com/kaspanet/kaspad/app/appmessage" -// GetAcceptingBlockHashOfTxs sends an RPC request respective to the function's name and returns the RPC server's response -func (c *RPCClient) GetAcceptingBlockHashOfTxs(txID string) (*appmessage.GetAcceptingBlockHashOfTxResponseMessage, error) { +// GetAcceptingBlockHashOfTx sends an RPC request respective to the function's name and returns the RPC server's response +func (c *RPCClient) GetAcceptingBlockHashOfTx(txID string) (*appmessage.GetAcceptingBlockHashOfTxResponseMessage, error) { err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetAcceptingBlockHashOfTxRequest(txID)) if err != nil { return nil, err diff --git a/infrastructure/network/rpcclient/rpc_get_accepting_blocks_of_txs.go b/infrastructure/network/rpcclient/rpc_get_accepting_blocks_of_txs.go index 5d3d74734e..a7f8b1a1e0 100644 --- a/infrastructure/network/rpcclient/rpc_get_accepting_blocks_of_txs.go +++ b/infrastructure/network/rpcclient/rpc_get_accepting_blocks_of_txs.go @@ -3,8 +3,8 @@ package rpcclient import "github.com/kaspanet/kaspad/app/appmessage" // GetAcceptingBlocksTxs sends an RPC request respective to the function's name and returns the RPC server's response -func (c *RPCClient) GetAcceptingBlocksTxs(txIDs []string) (*appmessage.GetAcceptingBlocksOfTxsResponseMessage, error) { - err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetAcceptingBlocksOfTxsRequest(txIDs)) +func (c *RPCClient) GetAcceptingBlocksTxs(txIDs []string, includeTransactions bool) (*appmessage.GetAcceptingBlocksOfTxsResponseMessage, error) { + err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetAcceptingBlocksOfTxsRequest(txIDs, includeTransactions)) if err != nil { return nil, err } From 325d2fd02e360c1d628dead83e87e64db6002b4b Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Mon, 10 Oct 2022 17:46:44 +0200 Subject: [PATCH 29/47] fix batched calls --- domain/txindex/txindex.go | 2 +- .../server/grpcserver/protowire/rpc.pb.go | 329 +++++++++--------- .../server/grpcserver/protowire/rpc.proto | 12 +- .../rpc_get_accepting_blockhashes_of_txs.go | 9 +- .../rpc_get_accepting_blocks_of_txs.go | 9 +- .../grpcserver/protowire/rpc_get_txs.go | 1 + .../protowire/rpc_get_txs_confirmations.go | 9 +- 7 files changed, 188 insertions(+), 183 deletions(-) diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 02f887cc9d..44f00a5f26 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -446,7 +446,7 @@ func (ti *TXIndex) GetTXsConfirmations(txIDs []*externalapi.DomainTransactionID) if err != nil { return nil, false, err } - Confirmations[txID] = int64(acceptingBlockHeader.BlueScore() - virtualBlock.BlueScore) + Confirmations[txID] = int64(virtualBlock.BlueScore - acceptingBlockHeader.BlueScore() ) } return Confirmations, true, nil diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go index f454c03252..56069c0c85 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go @@ -6215,7 +6215,7 @@ func (x *GetCoinSupplyResponseMessage) GetError() *RPCError { return nil } -type TxIDConfirmationsPair struct { +type RpcTxIDConfirmationsPair struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -6224,8 +6224,8 @@ type TxIDConfirmationsPair struct { Confirmations int64 `protobuf:"varint,2,opt,name=confirmations,proto3" json:"confirmations,omitempty"` } -func (x *TxIDConfirmationsPair) Reset() { - *x = TxIDConfirmationsPair{} +func (x *RpcTxIDConfirmationsPair) Reset() { + *x = RpcTxIDConfirmationsPair{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6233,13 +6233,13 @@ func (x *TxIDConfirmationsPair) Reset() { } } -func (x *TxIDConfirmationsPair) String() string { +func (x *RpcTxIDConfirmationsPair) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TxIDConfirmationsPair) ProtoMessage() {} +func (*RpcTxIDConfirmationsPair) ProtoMessage() {} -func (x *TxIDConfirmationsPair) ProtoReflect() protoreflect.Message { +func (x *RpcTxIDConfirmationsPair) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[110] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6251,26 +6251,26 @@ func (x *TxIDConfirmationsPair) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TxIDConfirmationsPair.ProtoReflect.Descriptor instead. -func (*TxIDConfirmationsPair) Descriptor() ([]byte, []int) { +// Deprecated: Use RpcTxIDConfirmationsPair.ProtoReflect.Descriptor instead. +func (*RpcTxIDConfirmationsPair) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{110} } -func (x *TxIDConfirmationsPair) GetTxID() string { +func (x *RpcTxIDConfirmationsPair) GetTxID() string { if x != nil { return x.TxID } return "" } -func (x *TxIDConfirmationsPair) GetConfirmations() int64 { +func (x *RpcTxIDConfirmationsPair) GetConfirmations() int64 { if x != nil { return x.Confirmations } return 0 } -type TxIDBlockHashPair struct { +type RpcTxIDBlockHashPair struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -6279,8 +6279,8 @@ type TxIDBlockHashPair struct { Hash string `protobuf:"bytes,2,opt,name=Hash,proto3" json:"Hash,omitempty"` } -func (x *TxIDBlockHashPair) Reset() { - *x = TxIDBlockHashPair{} +func (x *RpcTxIDBlockHashPair) Reset() { + *x = RpcTxIDBlockHashPair{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6288,13 +6288,13 @@ func (x *TxIDBlockHashPair) Reset() { } } -func (x *TxIDBlockHashPair) String() string { +func (x *RpcTxIDBlockHashPair) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TxIDBlockHashPair) ProtoMessage() {} +func (*RpcTxIDBlockHashPair) ProtoMessage() {} -func (x *TxIDBlockHashPair) ProtoReflect() protoreflect.Message { +func (x *RpcTxIDBlockHashPair) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[111] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6306,26 +6306,26 @@ func (x *TxIDBlockHashPair) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TxIDBlockHashPair.ProtoReflect.Descriptor instead. -func (*TxIDBlockHashPair) Descriptor() ([]byte, []int) { +// Deprecated: Use RpcTxIDBlockHashPair.ProtoReflect.Descriptor instead. +func (*RpcTxIDBlockHashPair) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{111} } -func (x *TxIDBlockHashPair) GetTxID() string { +func (x *RpcTxIDBlockHashPair) GetTxID() string { if x != nil { return x.TxID } return "" } -func (x *TxIDBlockHashPair) GetHash() string { +func (x *RpcTxIDBlockHashPair) GetHash() string { if x != nil { return x.Hash } return "" } -type TxIDBlockPair struct { +type RpcTxIDBlockPair struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -6334,8 +6334,8 @@ type TxIDBlockPair struct { Block *RpcBlock `protobuf:"bytes,2,opt,name=block,proto3" json:"block,omitempty"` } -func (x *TxIDBlockPair) Reset() { - *x = TxIDBlockPair{} +func (x *RpcTxIDBlockPair) Reset() { + *x = RpcTxIDBlockPair{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6343,13 +6343,13 @@ func (x *TxIDBlockPair) Reset() { } } -func (x *TxIDBlockPair) String() string { +func (x *RpcTxIDBlockPair) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TxIDBlockPair) ProtoMessage() {} +func (*RpcTxIDBlockPair) ProtoMessage() {} -func (x *TxIDBlockPair) ProtoReflect() protoreflect.Message { +func (x *RpcTxIDBlockPair) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[112] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6361,19 +6361,19 @@ func (x *TxIDBlockPair) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TxIDBlockPair.ProtoReflect.Descriptor instead. -func (*TxIDBlockPair) Descriptor() ([]byte, []int) { +// Deprecated: Use RpcTxIDBlockPair.ProtoReflect.Descriptor instead. +func (*RpcTxIDBlockPair) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{112} } -func (x *TxIDBlockPair) GetTxID() string { +func (x *RpcTxIDBlockPair) GetTxID() string { if x != nil { return x.TxID } return "" } -func (x *TxIDBlockPair) GetBlock() *RpcBlock { +func (x *RpcTxIDBlockPair) GetBlock() *RpcBlock { if x != nil { return x.Block } @@ -6432,8 +6432,8 @@ type GetAcceptingBlockHashesOfTxsResponseMessage struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxIDBlockHashPairs []*TxIDBlockHashPair `protobuf:"bytes,1,rep,name=txIDBlockHashPairs,proto3" json:"txIDBlockHashPairs,omitempty"` - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` + TxIDBlockHashPairs []*RpcTxIDBlockHashPair `protobuf:"bytes,1,rep,name=txIDBlockHashPairs,proto3" json:"txIDBlockHashPairs,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } func (x *GetAcceptingBlockHashesOfTxsResponseMessage) Reset() { @@ -6468,7 +6468,7 @@ func (*GetAcceptingBlockHashesOfTxsResponseMessage) Descriptor() ([]byte, []int) return file_rpc_proto_rawDescGZIP(), []int{114} } -func (x *GetAcceptingBlockHashesOfTxsResponseMessage) GetTxIDBlockHashPairs() []*TxIDBlockHashPair { +func (x *GetAcceptingBlockHashesOfTxsResponseMessage) GetTxIDBlockHashPairs() []*RpcTxIDBlockHashPair { if x != nil { return x.TxIDBlockHashPairs } @@ -6652,8 +6652,8 @@ type GetAcceptingBlocksOfTxsResponseMessage struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxIDBlockPairs []*TxIDBlockPair `protobuf:"bytes,1,rep,name=txIDBlockPairs,proto3" json:"txIDBlockPairs,omitempty"` - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` + TxIDBlockPairs []*RpcTxIDBlockPair `protobuf:"bytes,1,rep,name=txIDBlockPairs,proto3" json:"txIDBlockPairs,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } func (x *GetAcceptingBlocksOfTxsResponseMessage) Reset() { @@ -6688,7 +6688,7 @@ func (*GetAcceptingBlocksOfTxsResponseMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{118} } -func (x *GetAcceptingBlocksOfTxsResponseMessage) GetTxIDBlockPairs() []*TxIDBlockPair { +func (x *GetAcceptingBlocksOfTxsResponseMessage) GetTxIDBlockPairs() []*RpcTxIDBlockPair { if x != nil { return x.TxIDBlockPairs } @@ -7162,8 +7162,8 @@ type GetTxsConfirmationsResponseMessage struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxIDConfirmationsPairs []*TxIDConfirmationsPair `protobuf:"bytes,1,rep,name=txIDConfirmationsPairs,proto3" json:"txIDConfirmationsPairs,omitempty"` - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` + TxIDConfirmationsPairs []*RpcTxIDConfirmationsPair `protobuf:"bytes,1,rep,name=txIDConfirmationsPairs,proto3" json:"txIDConfirmationsPairs,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } func (x *GetTxsConfirmationsResponseMessage) Reset() { @@ -7198,7 +7198,7 @@ func (*GetTxsConfirmationsResponseMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{128} } -func (x *GetTxsConfirmationsResponseMessage) GetTxIDConfirmationsPairs() []*TxIDConfirmationsPair { +func (x *GetTxsConfirmationsResponseMessage) GetTxIDConfirmationsPairs() []*RpcTxIDConfirmationsPair { if x != nil { return x.TxIDConfirmationsPairs } @@ -8026,128 +8026,129 @@ var file_rpc_proto_rawDesc = []byte{ 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x51, 0x0a, 0x15, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, - 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3b, 0x0a, 0x11, 0x54, 0x78, 0x49, 0x44, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, - 0x12, 0x12, 0x0a, 0x04, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x48, 0x61, 0x73, 0x68, 0x22, 0x4e, 0x0a, 0x0d, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x42, 0x0a, 0x2a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, - 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, - 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x2b, 0x47, 0x65, 0x74, - 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4c, 0x0a, 0x12, 0x74, 0x78, 0x49, 0x44, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, - 0x69, 0x72, 0x52, 0x12, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, - 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x6b, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, - 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, - 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x30, 0x0a, - 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x7d, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x54, 0x0a, 0x18, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x78, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3e, 0x0a, 0x14, 0x52, 0x70, + 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, + 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x48, 0x61, 0x73, 0x68, 0x22, 0x51, 0x0a, 0x10, 0x52, 0x70, + 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, + 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, + 0x49, 0x44, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, + 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x42, 0x0a, + 0x2a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, + 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, + 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x2b, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, + 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, + 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x4f, 0x0a, 0x12, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, + 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, + 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x52, 0x12, + 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, + 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x6f, - 0x0a, 0x25, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x12, 0x30, 0x0a, - 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x96, 0x01, 0x0a, 0x26, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x74, 0x78, - 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, - 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0e, 0x74, 0x78, - 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x49, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, - 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x6a, 0x0a, 0x28, 0x47, 0x65, 0x74, 0x49, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, + 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x6b, + 0x0a, 0x23, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x30, 0x0a, 0x13, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x7d, 0x0a, 0x24, 0x47, + 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x29, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, - 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x7f, - 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0x2c, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0x82, 0x01, - 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2a, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x6f, 0x0a, 0x25, 0x47, 0x65, + 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, + 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x26, + 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x43, 0x0a, 0x0e, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, + 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0e, 0x74, 0x78, 0x49, + 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x49, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, + 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x6a, 0x0a, 0x28, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, + 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x36, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x75, 0x0a, 0x21, 0x47, 0x65, - 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x6f, 0x72, 0x22, 0x29, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x7f, 0x0a, + 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2c, + 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0x82, 0x01, 0x0a, + 0x15, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x39, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0xaa, 0x01, 0x0a, - 0x22, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x58, 0x0a, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, - 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x22, 0x36, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x75, 0x0a, 0x21, 0x47, 0x65, 0x74, + 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x24, + 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x22, 0x39, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0xad, 0x01, 0x0a, 0x22, + 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x5b, 0x0a, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, + 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x26, 0x5a, 0x24, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, + 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -8276,9 +8277,9 @@ var file_rpc_proto_goTypes = []interface{}{ (*GetMempoolEntriesByAddressesResponseMessage)(nil), // 108: protowire.GetMempoolEntriesByAddressesResponseMessage (*GetCoinSupplyRequestMessage)(nil), // 109: protowire.GetCoinSupplyRequestMessage (*GetCoinSupplyResponseMessage)(nil), // 110: protowire.GetCoinSupplyResponseMessage - (*TxIDConfirmationsPair)(nil), // 111: protowire.TxIDConfirmationsPair - (*TxIDBlockHashPair)(nil), // 112: protowire.TxIDBlockHashPair - (*TxIDBlockPair)(nil), // 113: protowire.TxIDBlockPair + (*RpcTxIDConfirmationsPair)(nil), // 111: protowire.RpcTxIDConfirmationsPair + (*RpcTxIDBlockHashPair)(nil), // 112: protowire.RpcTxIDBlockHashPair + (*RpcTxIDBlockPair)(nil), // 113: protowire.RpcTxIDBlockPair (*GetAcceptingBlockHashesOfTxsRequestMessage)(nil), // 114: protowire.GetAcceptingBlockHashesOfTxsRequestMessage (*GetAcceptingBlockHashesOfTxsResponseMessage)(nil), // 115: protowire.GetAcceptingBlockHashesOfTxsResponseMessage (*GetAcceptingBlockOfTxRequestMessage)(nil), // 116: protowire.GetAcceptingBlockOfTxRequestMessage @@ -8374,12 +8375,12 @@ var file_rpc_proto_depIdxs = []int32{ 106, // 74: protowire.GetMempoolEntriesByAddressesResponseMessage.entries:type_name -> protowire.MempoolEntryByAddress 1, // 75: protowire.GetMempoolEntriesByAddressesResponseMessage.error:type_name -> protowire.RPCError 1, // 76: protowire.GetCoinSupplyResponseMessage.error:type_name -> protowire.RPCError - 2, // 77: protowire.TxIDBlockPair.block:type_name -> protowire.RpcBlock - 112, // 78: protowire.GetAcceptingBlockHashesOfTxsResponseMessage.txIDBlockHashPairs:type_name -> protowire.TxIDBlockHashPair + 2, // 77: protowire.RpcTxIDBlockPair.block:type_name -> protowire.RpcBlock + 112, // 78: protowire.GetAcceptingBlockHashesOfTxsResponseMessage.txIDBlockHashPairs:type_name -> protowire.RpcTxIDBlockHashPair 1, // 79: protowire.GetAcceptingBlockHashesOfTxsResponseMessage.error:type_name -> protowire.RPCError 2, // 80: protowire.GetAcceptingBlockOfTxResponseMessage.block:type_name -> protowire.RpcBlock 1, // 81: protowire.GetAcceptingBlockOfTxResponseMessage.error:type_name -> protowire.RPCError - 113, // 82: protowire.GetAcceptingBlocksOfTxsResponseMessage.txIDBlockPairs:type_name -> protowire.TxIDBlockPair + 113, // 82: protowire.GetAcceptingBlocksOfTxsResponseMessage.txIDBlockPairs:type_name -> protowire.RpcTxIDBlockPair 1, // 83: protowire.GetAcceptingBlocksOfTxsResponseMessage.error:type_name -> protowire.RPCError 1, // 84: protowire.GetIncludingBlockHashOfTxResponseMessage.error:type_name -> protowire.RPCError 6, // 85: protowire.GetTxResponseMessage.transaction:type_name -> protowire.RpcTransaction @@ -8387,7 +8388,7 @@ var file_rpc_proto_depIdxs = []int32{ 6, // 87: protowire.GetTxsResponseMessage.transactions:type_name -> protowire.RpcTransaction 1, // 88: protowire.GetTxsResponseMessage.error:type_name -> protowire.RPCError 1, // 89: protowire.GetTxConfirmationsResponseMessage.error:type_name -> protowire.RPCError - 111, // 90: protowire.GetTxsConfirmationsResponseMessage.txIDConfirmationsPairs:type_name -> protowire.TxIDConfirmationsPair + 111, // 90: protowire.GetTxsConfirmationsResponseMessage.txIDConfirmationsPairs:type_name -> protowire.RpcTxIDConfirmationsPair 1, // 91: protowire.GetTxsConfirmationsResponseMessage.error:type_name -> protowire.RPCError 92, // [92:92] is the sub-list for method output_type 92, // [92:92] is the sub-list for method input_type @@ -9723,7 +9724,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TxIDConfirmationsPair); i { + switch v := v.(*RpcTxIDConfirmationsPair); i { case 0: return &v.state case 1: @@ -9735,7 +9736,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TxIDBlockHashPair); i { + switch v := v.(*RpcTxIDBlockHashPair); i { case 0: return &v.state case 1: @@ -9747,7 +9748,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TxIDBlockPair); i { + switch v := v.(*RpcTxIDBlockPair); i { case 0: return &v.state case 1: diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto index 52f7427c44..292dd2b589 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto @@ -734,17 +734,17 @@ message GetCoinSupplyResponseMessage{ RPCError error = 1000; } -message TxIDConfirmationsPair { +message RpcTxIDConfirmationsPair { string txID = 1; int64 confirmations = 2; } -message TxIDBlockHashPair { +message RpcTxIDBlockHashPair { string txID = 1; string Hash = 2; } -message TxIDBlockPair { +message RpcTxIDBlockPair { string txID = 1; RpcBlock block = 2; } @@ -754,7 +754,7 @@ message GetAcceptingBlockHashesOfTxsRequestMessage{ } message GetAcceptingBlockHashesOfTxsResponseMessage{ - repeated TxIDBlockHashPair txIDBlockHashPairs = 1; + repeated RpcTxIDBlockHashPair txIDBlockHashPairs = 1; RPCError error = 1000; } @@ -776,7 +776,7 @@ message GetAcceptingBlocksOfTxsRequestMessage{ } message GetAcceptingBlocksOfTxsResponseMessage{ - repeated TxIDBlockPair txIDBlockPairs = 1; + repeated RpcTxIDBlockPair txIDBlockPairs = 1; RPCError error = 1000; } @@ -828,7 +828,7 @@ message GetTxsConfirmationsRequestMessage{ } message GetTxsConfirmationsResponseMessage{ - repeated TxIDConfirmationsPair txIDConfirmationsPairs = 1; + repeated RpcTxIDConfirmationsPair txIDConfirmationsPairs = 1; RPCError error = 1000; } \ No newline at end of file diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blockhashes_of_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blockhashes_of_txs.go index ac0125025c..20aeb8f281 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blockhashes_of_txs.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blockhashes_of_txs.go @@ -42,8 +42,9 @@ func (x *KaspadMessage_GetAcceptingBlockHashesOfTxsResponse) fromAppMessage(mess rpcErr = &RPCError{Message: message.Error.Message} } - rpcTxIDBlockHashPairs := make([]*TxIDBlockHashPair, len(message.TxIDBlockHashPairs)) + rpcTxIDBlockHashPairs := make([]*RpcTxIDBlockHashPair, len(message.TxIDBlockHashPairs)) for i := range rpcTxIDBlockHashPairs { + rpcTxIDBlockHashPairs[i] = &RpcTxIDBlockHashPair{} rpcTxIDBlockHashPairs[i].fromAppMessage(message.TxIDBlockHashPairs[i]) } @@ -83,7 +84,7 @@ func (x *GetAcceptingBlockHashesOfTxsResponseMessage) toAppMessage() (appmessage }, nil } -func (x *TxIDBlockHashPair) toAppMessage() (*appmessage.TxIDBlockHashPair, error) { +func (x *RpcTxIDBlockHashPair) toAppMessage() (*appmessage.TxIDBlockHashPair, error) { if x == nil { return nil, errors.Wrapf(errorNil, "TxIDBlockHashPair is nil") } @@ -94,9 +95,9 @@ func (x *TxIDBlockHashPair) toAppMessage() (*appmessage.TxIDBlockHashPair, error }, nil } -func (x *TxIDBlockHashPair) fromAppMessage(message *appmessage.TxIDBlockHashPair) { +func (x *RpcTxIDBlockHashPair) fromAppMessage(message *appmessage.TxIDBlockHashPair) { - *x = TxIDBlockHashPair{ + *x = RpcTxIDBlockHashPair{ TxID: message.TxID, Hash: message.Hash, } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blocks_of_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blocks_of_txs.go index 673d5c1832..6110e13ddd 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blocks_of_txs.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blocks_of_txs.go @@ -44,8 +44,9 @@ func (x *KaspadMessage_GetAcceptingBlocksOfTxsResponse) fromAppMessage(message * rpcErr = &RPCError{Message: message.Error.Message} } - rpcTxIDBlockPairs := make([]*TxIDBlockPair, len(message.TxIDBlockPairs)) + rpcTxIDBlockPairs := make([]*RpcTxIDBlockPair, len(message.TxIDBlockPairs)) for i := range rpcTxIDBlockPairs { + rpcTxIDBlockPairs[i] = &RpcTxIDBlockPair{} err := rpcTxIDBlockPairs[i].fromAppMessage(message.TxIDBlockPairs[i]) if err != nil { return err @@ -88,7 +89,7 @@ func (x *GetAcceptingBlocksOfTxsResponseMessage) toAppMessage() (appmessage.Mess }, nil } -func (x *TxIDBlockPair) toAppMessage() (*appmessage.TxIDBlockPair, error) { +func (x *RpcTxIDBlockPair) toAppMessage() (*appmessage.TxIDBlockPair, error) { if x == nil { return nil, errors.Wrapf(errorNil, "TxIDBlockPair is nil") } @@ -104,7 +105,7 @@ func (x *TxIDBlockPair) toAppMessage() (*appmessage.TxIDBlockPair, error) { }, nil } -func (x *TxIDBlockPair) fromAppMessage(message *appmessage.TxIDBlockPair) error { +func (x *RpcTxIDBlockPair) fromAppMessage(message *appmessage.TxIDBlockPair) error { rpcBlock := &RpcBlock{} @@ -112,7 +113,7 @@ func (x *TxIDBlockPair) fromAppMessage(message *appmessage.TxIDBlockPair) error if err != nil { return err } - *x = TxIDBlockPair{ + *x = RpcTxIDBlockPair{ TxID: message.TxID, Block: rpcBlock, } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs.go index 54396f6421..1ad387d461 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs.go @@ -44,6 +44,7 @@ func (x *KaspadMessage_GetTxsResponse) fromAppMessage(message *appmessage.GetTxs rpcTransactions := make([]*RpcTransaction, len(message.Transactions)) for i := range rpcTransactions { + rpcTransactions[i] = &RpcTransaction{} rpcTransactions[i].fromAppMessage(message.Transactions[i]) } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs_confirmations.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs_confirmations.go index 07e70b011c..3056e795f1 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs_confirmations.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_txs_confirmations.go @@ -42,8 +42,9 @@ func (x *KaspadMessage_GetTxsConfirmationsResponse) fromAppMessage(message *appm rpcErr = &RPCError{Message: message.Error.Message} } - rpcTxIDConfirmationsPairs := make([]*TxIDConfirmationsPair, len(message.TxIDConfirmationsPairs)) + rpcTxIDConfirmationsPairs := make([]*RpcTxIDConfirmationsPair, len(message.TxIDConfirmationsPairs)) for i := range rpcTxIDConfirmationsPairs { + rpcTxIDConfirmationsPairs[i] = &RpcTxIDConfirmationsPair{} rpcTxIDConfirmationsPairs[i].fromAppMessage(message.TxIDConfirmationsPairs[i]) } @@ -83,7 +84,7 @@ func (x *GetTxsConfirmationsResponseMessage) toAppMessage() (appmessage.Message, }, nil } -func (x *TxIDConfirmationsPair) toAppMessage() (*appmessage.TxIDConfirmationsPair, error) { +func (x *RpcTxIDConfirmationsPair) toAppMessage() (*appmessage.TxIDConfirmationsPair, error) { if x == nil { return nil, errors.Wrapf(errorNil, "TxIDConfirmationsPair is nil") } @@ -94,9 +95,9 @@ func (x *TxIDConfirmationsPair) toAppMessage() (*appmessage.TxIDConfirmationsPai }, nil } -func (x *TxIDConfirmationsPair) fromAppMessage(message *appmessage.TxIDConfirmationsPair) { +func (x *RpcTxIDConfirmationsPair) fromAppMessage(message *appmessage.TxIDConfirmationsPair) { - *x = TxIDConfirmationsPair{ + *x = RpcTxIDConfirmationsPair{ TxID: message.TxID, Confirmations: message.Confirmations, } From 7336b2d7eb65592d468ba294ad7b902ec5af2673 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Mon, 10 Oct 2022 17:47:50 +0200 Subject: [PATCH 30/47] fix fmt --- app/appmessage/rpc_get_accepting_block_of_tx.go | 2 +- app/appmessage/rpc_get_accepting_blocks_of_txs.go | 4 ++-- app/rpc/rpc.go | 9 ++++----- cmd/kaspactl/commands.go | 1 - domain/txindex/txindex.go | 2 +- 5 files changed, 8 insertions(+), 10 deletions(-) diff --git a/app/appmessage/rpc_get_accepting_block_of_tx.go b/app/appmessage/rpc_get_accepting_block_of_tx.go index 47f404acb2..85c0e4f236 100644 --- a/app/appmessage/rpc_get_accepting_block_of_tx.go +++ b/app/appmessage/rpc_get_accepting_block_of_tx.go @@ -16,7 +16,7 @@ func (msg *GetAcceptingBlockOfTxRequestMessage) Command() MessageCommand { // NewGetAcceptingBlockOfTxRequest returns a instance of the message func NewGetAcceptingBlockOfTxRequest(txID string, includeTransactions bool) *GetAcceptingBlockOfTxRequestMessage { return &GetAcceptingBlockOfTxRequestMessage{ - TxID: txID, + TxID: txID, IncludeTransactions: includeTransactions, } } diff --git a/app/appmessage/rpc_get_accepting_blocks_of_txs.go b/app/appmessage/rpc_get_accepting_blocks_of_txs.go index 5fa3f05582..09b181cb84 100644 --- a/app/appmessage/rpc_get_accepting_blocks_of_txs.go +++ b/app/appmessage/rpc_get_accepting_blocks_of_txs.go @@ -21,9 +21,9 @@ func (msg *GetAcceptingBlocksOfTxsRequestMessage) Command() MessageCommand { } // NewGetAcceptingBlocksOfTxsRequest returns a instance of the message -func NewGetAcceptingBlocksOfTxsRequest(txIDs []string, includeTransactions bool) *GetAcceptingBlocksOfTxsRequestMessage { +func NewGetAcceptingBlocksOfTxsRequest(txIDs []string, includeTransactions bool) *GetAcceptingBlocksOfTxsRequestMessage { return &GetAcceptingBlocksOfTxsRequestMessage{ - TxIDs: txIDs, + TxIDs: txIDs, IncludeTransactions: includeTransactions, } } diff --git a/app/rpc/rpc.go b/app/rpc/rpc.go index 3a0f0ce7b3..4bda019885 100644 --- a/app/rpc/rpc.go +++ b/app/rpc/rpc.go @@ -56,11 +56,10 @@ var handlers = map[appmessage.MessageCommand]handler{ appmessage.CmdGetAcceptingBlockOfTxRequestMessage: rpchandlers.HandleGetAcceptingBlockOfTx, appmessage.CmdGetAcceptingBlocksOfTxsRequestMessage: rpchandlers.HandleGetAcceptingBlocksOfTxs, appmessage.CmdGetIncludingBlockHashOfTxRequestMessage: rpchandlers.HandleGetIncludingBlockHashOfTx, - appmessage.CmdGetTxRequestMessage: rpchandlers.HandleGetTx, - appmessage.CmdGetTxsRequestMessage: rpchandlers.HandleGetTxs, - appmessage.CmdGetTxConfirmationsRequestMessage: rpchandlers.HandleGetTxConfirmations, - appmessage.CmdGetTxsConfirmationsRequestMessage: rpchandlers.HandleGetTxsConfirmations, - + appmessage.CmdGetTxRequestMessage: rpchandlers.HandleGetTx, + appmessage.CmdGetTxsRequestMessage: rpchandlers.HandleGetTxs, + appmessage.CmdGetTxConfirmationsRequestMessage: rpchandlers.HandleGetTxConfirmations, + appmessage.CmdGetTxsConfirmationsRequestMessage: rpchandlers.HandleGetTxsConfirmations, } func (m *Manager) routerInitializer(router *router.Router, netConnection *netadapter.NetConnection) { diff --git a/cmd/kaspactl/commands.go b/cmd/kaspactl/commands.go index af9ca15a7c..b480d8bab5 100644 --- a/cmd/kaspactl/commands.go +++ b/cmd/kaspactl/commands.go @@ -25,7 +25,6 @@ var commandTypes = []reflect.Type{ reflect.TypeOf(protowire.KaspadMessage_GetTxConfirmationsRequest{}), reflect.TypeOf(protowire.KaspadMessage_GetTxsConfirmationsRequest{}), - reflect.TypeOf(protowire.KaspadMessage_GetBlockRequest{}), reflect.TypeOf(protowire.KaspadMessage_GetBlocksRequest{}), reflect.TypeOf(protowire.KaspadMessage_GetHeadersRequest{}), diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 44f00a5f26..4c6d3f1542 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -446,7 +446,7 @@ func (ti *TXIndex) GetTXsConfirmations(txIDs []*externalapi.DomainTransactionID) if err != nil { return nil, false, err } - Confirmations[txID] = int64(virtualBlock.BlueScore - acceptingBlockHeader.BlueScore() ) + Confirmations[txID] = int64(virtualBlock.BlueScore - acceptingBlockHeader.BlueScore()) } return Confirmations, true, nil From d401caced5dbd4a9347a8eb8e8fba81f2dd2576e Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Fri, 14 Oct 2022 00:47:14 +0200 Subject: [PATCH 31/47] store accepting + including block + index --- domain/txindex/model.go | 43 ++--- domain/txindex/serialization.go | 33 +++- domain/txindex/serialization_test.go | 57 ++++--- domain/txindex/store.go | 90 +++++----- domain/txindex/txindex.go | 237 ++++++++++++++++++--------- 5 files changed, 287 insertions(+), 173 deletions(-) diff --git a/domain/txindex/model.go b/domain/txindex/model.go index c7b268a1c0..e5d1fa1fae 100644 --- a/domain/txindex/model.go +++ b/domain/txindex/model.go @@ -1,43 +1,34 @@ package txindex import ( - "encoding/hex" - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" ) // TXAcceptanceChange is the set of changes made to the TX index after // a successful update type TXAcceptanceChange struct { - Added map[externalapi.DomainTransactionID]*externalapi.DomainHash - Removed map[externalapi.DomainTransactionID]*externalapi.DomainHash + Added map[externalapi.DomainTransactionID]*TxData + Removed map[externalapi.DomainTransactionID]*TxData +} + +//TxData holds tx data stored in the TXIndex database +type TxData struct { + IncludingBlockHash *externalapi.DomainHash + AcceptingBlockHash *externalapi.DomainHash + IncludingIndex uint32 } +//TxIDsToTxIndexData is a map of TxIDs to corrospnding TxIndexData +type TxIDsToTxIndexData map[externalapi.DomainTransactionID]*TxData + //TxIDsToBlockHashes is a map of TxIDs to corrospnding blockHashes -type TxIDsToBlockHashes map[*externalapi.DomainTransactionID]*externalapi.DomainHash +type TxIDsToBlockHashes map[externalapi.DomainTransactionID]*externalapi.DomainHash //TxIDsToBlocks is a map of TxIDs to corrospnding blocks -type TxIDsToBlocks map[*externalapi.DomainTransactionID]*externalapi.DomainBlock +type TxIDsToBlocks map[externalapi.DomainTransactionID]*externalapi.DomainBlock //TxIDsToConfirmations is a map of TxIDs to corrospnding Confirmations -type TxIDsToConfirmations map[*externalapi.DomainTransactionID]int64 - -// ConvertDomainHashToString converts the given DomainHash to a string -func ConvertDomainHashToString(blockHash *externalapi.DomainHash) string { - return hex.EncodeToString(blockHash.ByteSlice()) -} +type TxIDsToConfirmations map[externalapi.DomainTransactionID]int64 -// ConvertStringToDomainHash converts the given string to a domainHash -func ConvertStringToDomainHash(stringDomainHash string) (*externalapi.DomainHash, error) { - return externalapi.NewDomainHashFromString(stringDomainHash) -} - -// ConvertTXIDToString converts the given DomainHash to a string -func ConvertTXIDToString(txID *externalapi.DomainTransactionID) string { - return hex.EncodeToString(txID.ByteSlice()) -} - -// ConvertStringTXID converts the given string to a domainHash -func ConvertStringTXID(stringDomainTransactionID string) (*externalapi.DomainTransactionID, error) { - return externalapi.NewDomainTransactionIDFromString(stringDomainTransactionID) -} +//TxIDsToBlueScores is a map of TxIDs to corrospnding Confirmations +type TxIDsToBlueScores map[externalapi.DomainTransactionID]uint64 diff --git a/domain/txindex/serialization.go b/domain/txindex/serialization.go index 14a95c76fa..f5e0897b12 100644 --- a/domain/txindex/serialization.go +++ b/domain/txindex/serialization.go @@ -2,9 +2,10 @@ package txindex import ( "encoding/binary" + "io" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/pkg/errors" - "io" ) func serializeHashes(hashes []*externalapi.DomainHash) []byte { @@ -40,3 +41,33 @@ func deserializeHashes(serializedHashes []byte) ([]*externalapi.DomainHash, erro return hashes, nil } + +func deserializeTxIndexData(serializedTxIndexData []byte) (*TxData, error) { + var err error + + deserializedTxIndexData := &TxData{} + deserializedTxIndexData.IncludingBlockHash, err = externalapi.NewDomainHashFromByteSlice(serializedTxIndexData[:32]) + if err != nil { + return nil, err + } + deserializedTxIndexData.AcceptingBlockHash, err = externalapi.NewDomainHashFromByteSlice(serializedTxIndexData[32:64]) + if err != nil { + return nil, err + } + deserializedTxIndexData.IncludingIndex = binary.BigEndian.Uint32(serializedTxIndexData[64:68]) + + return deserializedTxIndexData, nil +} + +func serializeTxIndexData(blockTxIndexData *TxData) []byte { + indexBytes := make([]byte, 4) + binary.BigEndian.PutUint32(indexBytes, blockTxIndexData.IncludingIndex) + serializedTxIndexData := append( + append( + blockTxIndexData.IncludingBlockHash.ByteSlice(), + blockTxIndexData.AcceptingBlockHash.ByteSlice()..., + ), + indexBytes..., + ) + return serializedTxIndexData +} diff --git a/domain/txindex/serialization_test.go b/domain/txindex/serialization_test.go index 34ff59dc34..665fc0debd 100644 --- a/domain/txindex/serialization_test.go +++ b/domain/txindex/serialization_test.go @@ -2,43 +2,42 @@ package txindex import ( "encoding/binary" - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" - "github.com/pkg/errors" - "io" "math/rand" "testing" + + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" ) -func Test_serializeHashes(t *testing.T) { +func Test_serializeTxIndexData(t *testing.T) { r := rand.New(rand.NewSource(0)) - for length := 0; length < 32; length++ { - hashes := make([]*externalapi.DomainHash, length) - for i := range hashes { - var hashBytes [32]byte - r.Read(hashBytes[:]) - hashes[i] = externalapi.NewDomainHashFromByteArray(&hashBytes) - } - result, err := deserializeHashes(serializeHashes(hashes)) - if err != nil { - t.Fatalf("Failed deserializing hashes: %v", err) - } - if !externalapi.HashesEqual(hashes, result) { - t.Fatalf("Expected \n %s \n==\n %s\n", hashes, result) - } + serializedtxIndex := make([]byte, 68) // 32 bytes including block hash 32 bytes accepting blockhash and 4 bytes uint32 + r.Read(serializedtxIndex[:]) + includingBlockHash, err := externalapi.NewDomainHashFromByteSlice(serializedtxIndex[:32]) + if err != nil { + t.Fatalf(err.Error()) + } + acceptingBlockHash, err := externalapi.NewDomainHashFromByteSlice(serializedtxIndex[32:64]) + if err != nil { + t.Fatalf(err.Error()) + } + includingIndex := binary.BigEndian.Uint32(serializedtxIndex[64:68]) + + testdeserializedtxIndex := &TxData{ + IncludingBlockHash: includingBlockHash, + AcceptingBlockHash: acceptingBlockHash, + IncludingIndex: includingIndex, } -} -func Test_deserializeHashesFailure(t *testing.T) { - hashes := []*externalapi.DomainHash{ - externalapi.NewDomainHashFromByteArray(&[externalapi.DomainHashSize]byte{1}), - externalapi.NewDomainHashFromByteArray(&[externalapi.DomainHashSize]byte{2}), - externalapi.NewDomainHashFromByteArray(&[externalapi.DomainHashSize]byte{3}), + result, err := deserializeTxIndexData(serializeTxIndexData(testdeserializedtxIndex)) + if err != nil { + t.Fatalf("Failed deserializing txIndexData: %v", err) } - serialized := serializeHashes(hashes) - binary.LittleEndian.PutUint64(serialized[:8], uint64(len(hashes)+1)) - _, err := deserializeHashes(serialized) - if !errors.Is(err, io.ErrUnexpectedEOF) { - t.Fatalf("Expected error to be EOF, instead got: %v", err) + if !testdeserializedtxIndex.IncludingBlockHash.Equal(result.IncludingBlockHash) { + t.Fatalf("Expected including block hash: \n %s \n Got: \n %s\n", testdeserializedtxIndex.IncludingBlockHash.String(), result.IncludingBlockHash.String()) + } else if !testdeserializedtxIndex.AcceptingBlockHash.Equal(result.AcceptingBlockHash) { + t.Fatalf("Expected accepting block hash \n %s \n Got: \n %s\n", testdeserializedtxIndex.AcceptingBlockHash.String(), result.AcceptingBlockHash.String()) + } else if testdeserializedtxIndex.IncludingIndex != result.IncludingIndex { + t.Fatalf("Expected including index \n %d \n Got: \n %d\n", testdeserializedtxIndex.IncludingIndex, result.IncludingIndex) } } diff --git a/domain/txindex/store.go b/domain/txindex/store.go index 38be9d19db..4bcb01f497 100644 --- a/domain/txindex/store.go +++ b/domain/txindex/store.go @@ -13,8 +13,8 @@ var pruningPointKey = database.MakeBucket([]byte("")).Key([]byte("tx-index-prunn type txIndexStore struct { database database.Database - toAdd map[externalapi.DomainTransactionID]*externalapi.DomainHash - toRemove map[externalapi.DomainTransactionID]*externalapi.DomainHash + toAdd map[externalapi.DomainTransactionID]*TxData + toRemove map[externalapi.DomainTransactionID]*TxData virtualParents []*externalapi.DomainHash pruningPoint *externalapi.DomainHash } @@ -22,8 +22,8 @@ type txIndexStore struct { func newTXIndexStore(database database.Database) *txIndexStore { return &txIndexStore{ database: database, - toAdd: make(map[externalapi.DomainTransactionID]*externalapi.DomainHash), - toRemove: make(map[externalapi.DomainTransactionID]*externalapi.DomainHash), + toAdd: make(map[externalapi.DomainTransactionID]*TxData), + toRemove: make(map[externalapi.DomainTransactionID]*TxData), virtualParents: nil, pruningPoint: nil, } @@ -60,22 +60,32 @@ func (tis *txIndexStore) deleteAll() error { return nil } -func (tis *txIndexStore) add(txID externalapi.DomainTransactionID, blockHash *externalapi.DomainHash) { - log.Tracef("Adding %s Txs from blockHash %s", txID.String(), ConvertDomainHashToString(blockHash)) +func (tis *txIndexStore) add(txID externalapi.DomainTransactionID, includingIndex uint32, + includingBlockHash *externalapi.DomainHash, acceptingBlockHash *externalapi.DomainHash) { + log.Tracef("Adding %s Txs from blockHash %s", txID.String(), includingBlockHash.String()) delete(tis.toRemove, txID) //adding takes precedence - tis.toAdd[txID] = blockHash + tis.toAdd[txID] = &TxData{ + IncludingBlockHash: includingBlockHash, + IncludingIndex: includingIndex, + AcceptingBlockHash: acceptingBlockHash, + } } -func (tis *txIndexStore) remove(txID externalapi.DomainTransactionID, blockHash *externalapi.DomainHash) { - log.Tracef("Removing %s Txs from blockHash %s", txID.String(), ConvertDomainHashToString(blockHash)) +func (tis *txIndexStore) remove(txID externalapi.DomainTransactionID, includingIndex uint32, + includingBlockHash *externalapi.DomainHash, acceptingBlockHash *externalapi.DomainHash) { + log.Tracef("Removing %s Txs from blockHash %s", txID.String(), includingBlockHash.String()) if _, found := tis.toAdd[txID]; !found { //adding takes precedence - tis.toRemove[txID] = blockHash + tis.toRemove[txID] = &TxData{ + IncludingBlockHash: includingBlockHash, + IncludingIndex: includingIndex, + AcceptingBlockHash: acceptingBlockHash, + } } } func (tis *txIndexStore) discardAllButPruningPoint() { - tis.toAdd = make(map[externalapi.DomainTransactionID]*externalapi.DomainHash) - tis.toRemove = make(map[externalapi.DomainTransactionID]*externalapi.DomainHash) + tis.toAdd = make(map[externalapi.DomainTransactionID]*TxData) + tis.toRemove = make(map[externalapi.DomainTransactionID]*TxData) tis.virtualParents = nil } @@ -90,10 +100,10 @@ func (tis *txIndexStore) commit() error { defer dbTransaction.RollbackUnlessClosed() - for toAddTxID, blockHash := range tis.toAdd { + for toAddTxID, txData := range tis.toAdd { delete(tis.toRemove, toAddTxID) //safeguard key := tis.convertTxIDToKey(txAcceptedIndexBucket, toAddTxID) - dbTransaction.Put(key, blockHash.ByteSlice()) + dbTransaction.Put(key, serializeTxIndexData(txData)) if err != nil { return err } @@ -138,10 +148,10 @@ func (tis *txIndexStore) updateAndCommitPruningPointWithoutTransaction(pruningPo } func (tis *txIndexStore) commitTxIDsWithoutTransaction() error { - for txID, blockHash := range tis.toAdd { + for txID, txData := range tis.toAdd { delete(tis.toRemove, txID) //adding takes precedence key := tis.convertTxIDToKey(txAcceptedIndexBucket, txID) - err := tis.database.Put(key, blockHash.ByteSlice()) + err := tis.database.Put(key, serializeTxIndexData(txData)) if err != nil { return err } @@ -189,18 +199,18 @@ func (tis *txIndexStore) convertTxIDToKey(bucket *database.Bucket, txID external } func (tis *txIndexStore) stagedData() ( - toAdd map[externalapi.DomainTransactionID]*externalapi.DomainHash, - toRemove map[externalapi.DomainTransactionID]*externalapi.DomainHash, + toAdd map[externalapi.DomainTransactionID]*TxData, + toRemove map[externalapi.DomainTransactionID]*TxData, virtualParents []*externalapi.DomainHash, pruningPoint *externalapi.DomainHash) { - toAddClone := make(map[externalapi.DomainTransactionID]*externalapi.DomainHash) - toRemoveClone := make(map[externalapi.DomainTransactionID]*externalapi.DomainHash) - for txID, blockHash := range tis.toAdd { - toAddClone[txID] = blockHash + toAddClone := make(map[externalapi.DomainTransactionID]*TxData) + toRemoveClone := make(map[externalapi.DomainTransactionID]*TxData) + for txID, txData := range tis.toAdd { + toAddClone[txID] = txData } - for txID, blockHash := range tis.toRemove { - toRemoveClone[txID] = blockHash + for txID, txData := range tis.toRemove { + toRemoveClone[txID] = txData } return toAddClone, toRemoveClone, tis.virtualParents, tis.pruningPoint } @@ -209,14 +219,14 @@ func (tis *txIndexStore) isAnythingStaged() bool { return len(tis.toAdd) > 0 || len(tis.toRemove) > 0 } -func (tis *txIndexStore) getTxAcceptingBlockHash(txID *externalapi.DomainTransactionID) (blockHash *externalapi.DomainHash, found bool, err error) { +func (tis *txIndexStore) getTxData(txID *externalapi.DomainTransactionID) (txData *TxData, found bool, err error) { if tis.isAnythingStaged() { return nil, false, errors.Errorf("cannot get TX accepting Block hash while staging isn't empty") } key := tis.convertTxIDToKey(txAcceptedIndexBucket, *txID) - serializedAcceptingBlockHash, err := tis.database.Get(key) + serializedTxData, err := tis.database.Get(key) if err != nil { if database.IsNotFoundError(err) { return nil, false, nil @@ -224,39 +234,43 @@ func (tis *txIndexStore) getTxAcceptingBlockHash(txID *externalapi.DomainTransac return nil, false, err } - acceptingBlockHash, err := externalapi.NewDomainHashFromByteSlice(serializedAcceptingBlockHash) + deserializedTxData, err := deserializeTxIndexData(serializedTxData) if err != nil { return nil, false, err } - return acceptingBlockHash, true, nil + return deserializedTxData, true, nil } -func (tis *txIndexStore) getTxAcceptingBlockHashes(txIDs []*externalapi.DomainTransactionID) (acceptingBlockHashes TxIDsToBlockHashes, found bool, err error) { +func (tis *txIndexStore) getTxsData(txIDs []*externalapi.DomainTransactionID) ( + txsData TxIDsToTxIndexData, notFoundTxIDs []*externalapi.DomainTransactionID, err error) { if tis.isAnythingStaged() { - return nil, false, errors.Errorf("cannot get TX accepting Block hash while staging isn't empty") + return nil, nil, errors.Errorf("cannot get TX accepting Block hash while staging isn't empty") } keys := make([]*database.Key, len(txIDs)) - acceptingBlockHashes = make(TxIDsToBlockHashes) + txsData = make(TxIDsToTxIndexData) + notFoundTxIDs = make([]*externalapi.DomainTransactionID, 0) for i, key := range keys { key = tis.convertTxIDToKey(txAcceptedIndexBucket, *txIDs[i]) - serializedAcceptingBlockHash, err := tis.database.Get(key) + serializedTxData, err := tis.database.Get(key) if err != nil { if database.IsNotFoundError(err) { - continue //ignore not found errors we expect this to happen frequently with queries + notFoundTxIDs = append(notFoundTxIDs, txIDs[i]) + } else { + return nil, nil, err } - return nil, false, err } - acceptingBlockHash, err := externalapi.NewDomainHashFromByteSlice(serializedAcceptingBlockHash) + deserializedTxData, err := deserializeTxIndexData(serializedTxData) if err != nil { - return nil, false, err + return nil, nil, err } - acceptingBlockHashes[txIDs[i]] = acceptingBlockHash + + txsData[*txIDs[i]] = deserializedTxData } - return acceptingBlockHashes, true, nil + return txsData, notFoundTxIDs, nil } diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 4c6d3f1542..182fc939b3 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -187,15 +187,21 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai if err != nil { return err } - for i := range chainBlocksChunk { + for i, acceptingBlock := range chainBlocksChunk { chainBlockAcceptanceData := chainBlocksAcceptanceData[i] for _, blockAcceptanceData := range chainBlockAcceptanceData { - for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { - log.Tracef("TX index Adding: %d transactions", len(blockAcceptanceData.TransactionAcceptanceData)) + for j, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { + log.Warnf("TX index Adding: %d transactions", len(blockAcceptanceData.TransactionAcceptanceData)) if transactionAcceptanceData.IsAccepted { + if err != nil { + return err + } + transactionID := consensushashing.TransactionID(transactionAcceptanceData.Transaction) ti.store.add( - *consensushashing.TransactionID(transactionAcceptanceData.Transaction), - blockAcceptanceData.BlockHash, + *transactionID, + uint32(j), //index of including block where transaction is found + blockAcceptanceData.BlockHash, //this is the including block + acceptingBlock, //this is the accepting block ) } } @@ -222,15 +228,17 @@ func (ti *TXIndex) removeTXIDs(selectedParentChainChanges *externalapi.SelectedC if err != nil { return err } - for i := range chainBlocksChunk { + for i, acceptingBlockHash := range chainBlocksChunk { chainBlockAcceptanceData := chainBlocksAcceptanceData[i] for _, blockAcceptanceData := range chainBlockAcceptanceData { log.Tracef("TX index Removing: %d transactions", len(blockAcceptanceData.TransactionAcceptanceData)) - for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { + for j, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { if transactionAcceptanceData.IsAccepted { ti.store.remove( *consensushashing.TransactionID(transactionAcceptanceData.Transaction), + uint32(j), blockAcceptanceData.BlockHash, + acceptingBlockHash, ) } } @@ -242,14 +250,15 @@ func (ti *TXIndex) removeTXIDs(selectedParentChainChanges *externalapi.SelectedC } // TXAcceptingBlockHash returns the accepting block hash for for the given txID -func (ti *TXIndex) TXAcceptingBlockHash(txID *externalapi.DomainTransactionID) (acceptingBlockHash *externalapi.DomainHash, found bool, err error) { +func (ti *TXIndex) TXAcceptingBlockHash(txID *externalapi.DomainTransactionID) ( + acceptingBlockHash *externalapi.DomainHash, found bool, err error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlockHash") defer onEnd() ti.mutex.Lock() defer ti.mutex.Unlock() - acceptingBlockHash, found, err = ti.store.getTxAcceptingBlockHash(txID) + txData, found, err := ti.store.getTxData(txID) if err != nil { return nil, false, err } @@ -257,26 +266,29 @@ func (ti *TXIndex) TXAcceptingBlockHash(txID *externalapi.DomainTransactionID) ( return nil, false, nil } - return acceptingBlockHash, found, nil + return txData.AcceptingBlockHash, found, nil } // TXAcceptingBlockHashes returns the accepting block hashes for for the given txIDs -func (ti *TXIndex) TXAcceptingBlockHashes(txIDs []*externalapi.DomainTransactionID) (acceptingBlockHashes TxIDsToBlockHashes, found bool, err error) { - onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlockHash") +func (ti *TXIndex) TXAcceptingBlockHashes(txIDs []*externalapi.DomainTransactionID) ( + txIDsToAcceptingBlockHashes TxIDsToBlockHashes, missingTxIds []*externalapi.DomainTransactionID, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlockHashes") defer onEnd() ti.mutex.Lock() defer ti.mutex.Unlock() - acceptingBlockHashes, found, err = ti.store.getTxAcceptingBlockHashes(txIDs) + txIDsToTxIndexData, missingTxIds, err := ti.store.getTxsData(txIDs) if err != nil { - return nil, false, err + return nil, nil, err } - if !found { - return nil, false, nil + + txIDsToAcceptingBlockHashes = make(TxIDsToBlockHashes) + for txID, txIndexData := range txIDsToTxIndexData { + txIDsToAcceptingBlockHashes[txID] = txIndexData.AcceptingBlockHash } - return acceptingBlockHashes, found, nil + return txIDsToAcceptingBlockHashes, missingTxIds, nil } // TXAcceptingBlock returns the accepting block for for the given txID @@ -288,13 +300,16 @@ func (ti *TXIndex) TXAcceptingBlock(txID *externalapi.DomainTransactionID) ( ti.mutex.Lock() defer ti.mutex.Unlock() - acceptingBlockHash, found, err := ti.store.getTxAcceptingBlockHash(txID) + txIndexData, found, err := ti.store.getTxData(txID) if err != nil { return nil, false, err } - acceptingBlock, err := ti.domain.Consensus().GetBlock(acceptingBlockHash) + acceptingBlock, err := ti.domain.Consensus().GetBlockEvenIfHeaderOnly(txIndexData.AcceptingBlockHash) if err != nil { + if database.IsNotFoundError(err) { + return nil, false, fmt.Errorf("accepting block %s missing for txID %s ", txIndexData.AcceptingBlockHash.String(), txID.String()) + } return nil, false, err } return acceptingBlock, true, nil @@ -302,113 +317,104 @@ func (ti *TXIndex) TXAcceptingBlock(txID *externalapi.DomainTransactionID) ( // TXAcceptingBlocks returns the accepting blocks for for the given txIDs func (ti *TXIndex) TXAcceptingBlocks(txIDs []*externalapi.DomainTransactionID) ( - acceptingBlocks TxIDsToBlocks, found bool, err error) { - onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlock") + txIDsToAcceptingBlocks TxIDsToBlocks, notFound []*externalapi.DomainTransactionID, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlocks") defer onEnd() ti.mutex.Lock() defer ti.mutex.Unlock() - acceptingBlockHashTxIDPairs, found, err := ti.store.getTxAcceptingBlockHashes(txIDs) + txIDsToTxIndexData, notFound, err := ti.store.getTxsData(txIDs) if err != nil { - return nil, false, err + return nil, nil, err } - acceptingBlocks = make(TxIDsToBlocks) - i := 0 - for txID, blockHash := range acceptingBlockHashTxIDPairs { - acceptingBlocks[txID], err = ti.domain.Consensus().GetBlock(blockHash) + txIDsToAcceptingBlocks = make(TxIDsToBlocks) + + for txID, txIndexData := range txIDsToTxIndexData { + txIDsToAcceptingBlocks[txID], err = ti.domain.Consensus().GetBlockEvenIfHeaderOnly(txIndexData.AcceptingBlockHash) if err != nil { if database.IsNotFoundError(err) { - continue // ignore - } else { - return nil, false, err + return nil, nil, fmt.Errorf("accepting block %s missing for txID %s ", txIndexData.IncludingBlockHash.String(), txID.String()) } + return nil, notFound, err } - i++ } - return acceptingBlocks, true, nil + return txIDsToAcceptingBlocks, notFound, nil } // GetTX returns the domain transaction for for the given txID func (ti *TXIndex) GetTX(txID *externalapi.DomainTransactionID) ( - block *externalapi.DomainTransaction, found bool, err error) { + tx *externalapi.DomainTransaction, found bool, err error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTX") defer onEnd() ti.mutex.Lock() defer ti.mutex.Unlock() - acceptingBlockHash, found, err := ti.store.getTxAcceptingBlockHash(txID) + txIndexData, found, err := ti.store.getTxData(txID) if err != nil { return nil, false, err } - acceptingBlock, err := ti.domain.Consensus().GetBlock(acceptingBlockHash) + acceptingBlock, err := ti.domain.Consensus().GetBlock(txIndexData.AcceptingBlockHash) if err != nil { return nil, false, err } - for i := range acceptingBlock.Transactions { - if consensushashing.TransactionID(acceptingBlock.Transactions[i]).Equal(txID) { - return acceptingBlock.Transactions[i].Clone(), true, nil - } - } - - return nil, false, fmt.Errorf("Could not find transaction with ID %s in Txindex database", txID.String()) + return acceptingBlock.Transactions[txIndexData.IncludingIndex], true, nil } // GetTXs returns the domain transaction for for the given txIDs func (ti *TXIndex) GetTXs(txIDs []*externalapi.DomainTransactionID) ( - txs []*externalapi.DomainTransaction, found bool, err error) { + txs []*externalapi.DomainTransaction, notFound []*externalapi.DomainTransactionID, err error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTXs") defer onEnd() ti.mutex.Lock() defer ti.mutex.Unlock() - acceptingBlockHashes, found, err := ti.store.getTxAcceptingBlockHashes(txIDs) + txIDsToTxIndexData, notFound, err := ti.store.getTxsData(txIDs) if err != nil { - return nil, false, err + return nil, nil, err } - txs = make([]*externalapi.DomainTransaction, 0) - for txID, acceptingBlockHash := range acceptingBlockHashes { - acceptingBlock, err := ti.domain.Consensus().GetBlock(acceptingBlockHash) + txs = make([]*externalapi.DomainTransaction, len(txIDsToTxIndexData)) + i := 0 + + for txID, txIndexData := range txIDsToTxIndexData { + includingBlock, err := ti.domain.Consensus().GetBlockEvenIfHeaderOnly(txIndexData.IncludingBlockHash) + if err != nil { if database.IsNotFoundError(err) { - continue // ignore - } else { - return nil, false, err - } - } - for _, tx := range acceptingBlock.Transactions { - if consensushashing.TransactionID(tx).Equal(txID) { - txs = append(txs, tx) + return nil, nil, fmt.Errorf("including block %s missing for txID %s ", txIndexData.IncludingBlockHash.String(), txID.String()) } + return nil, nil, err } + txs[i] = includingBlock.Transactions[txIndexData.IncludingIndex] + i++ } - return txs, true, nil + return txs, notFound, nil } // GetTXConfirmations returns the tx confirmations for for the given txID func (ti *TXIndex) GetTXConfirmations(txID *externalapi.DomainTransactionID) ( - Confirmations int64, found bool, err error) { + confirmations int64, found bool, err error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTXConfirmations") defer onEnd() ti.mutex.Lock() defer ti.mutex.Unlock() - acceptingBlockHash, found, err := ti.store.getTxAcceptingBlockHash(txID) + txdata, found, err := ti.store.getTxData(txID) if err != nil { return 0, false, err } - acceptingBlockHeader, err := ti.domain.Consensus().GetBlockHeader(acceptingBlockHash) + acceptingBlockHeader, err := ti.domain.Consensus().GetBlockHeader(txdata.AcceptingBlockHash) if err != nil { return -1, false, err } @@ -423,7 +429,7 @@ func (ti *TXIndex) GetTXConfirmations(txID *externalapi.DomainTransactionID) ( // GetTXsConfirmations returns the tx confirmations for for the given txIDs func (ti *TXIndex) GetTXsConfirmations(txIDs []*externalapi.DomainTransactionID) ( - Confirmations TxIDsToConfirmations, found bool, err error) { + txIDsToConfirmations TxIDsToConfirmations, notFound []*externalapi.DomainTransactionID, err error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTXsConfirmations") defer onEnd() @@ -432,51 +438,124 @@ func (ti *TXIndex) GetTXsConfirmations(txIDs []*externalapi.DomainTransactionID) virtualBlock, err := ti.domain.Consensus().GetVirtualInfo() if err != nil { - return nil, false, err + return nil, nil, err } - acceptingBlockHashes, _, err := ti.store.getTxAcceptingBlockHashes(txIDs) + txIDsToTxIndexData, _, err := ti.store.getTxsData(txIDs) if err != nil { - return nil, false, err + return nil, nil, err } - Confirmations = make(TxIDsToConfirmations) - for txID, acceptingBlockHash := range acceptingBlockHashes { - acceptingBlockHeader, err := ti.domain.Consensus().GetBlockHeader(acceptingBlockHash) + txIDsToConfirmations = make(TxIDsToConfirmations) + for txID, txIndexData := range txIDsToTxIndexData { + acceptingBlockHeader, err := ti.domain.Consensus().GetBlockHeader(txIndexData.AcceptingBlockHash) if err != nil { - return nil, false, err + if database.IsNotFoundError(err) { + return nil, nil, fmt.Errorf("including block %s missing for txID %s ", txIndexData.IncludingBlockHash.String(), txID.String()) + } + return nil, nil, err } - Confirmations[txID] = int64(virtualBlock.BlueScore - acceptingBlockHeader.BlueScore()) + txIDsToConfirmations[txID] = int64(virtualBlock.BlueScore - acceptingBlockHeader.BlueScore()) } - return Confirmations, true, nil + return txIDsToConfirmations, notFound, nil } // TXIncludingBlockHash returns the including block hash for the given txID func (ti *TXIndex) TXIncludingBlockHash(txID *externalapi.DomainTransactionID) (includingBlockHash *externalapi.DomainHash, found bool, err error) { - onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlock") + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXIncludingBlockHash") defer onEnd() ti.mutex.Lock() defer ti.mutex.Unlock() - acceptingBlockHash, found, err := ti.store.getTxAcceptingBlockHash(txID) + txIndexData, found, err := ti.store.getTxData(txID) if err != nil { return nil, false, err } - acceptanceData, err := ti.domain.Consensus().GetBlockAcceptanceData(acceptingBlockHash) + return txIndexData.IncludingBlockHash, true, nil +} + +// TXIncludingBlockHashes returns the including block hashes for for the given txI +func (ti *TXIndex) TXIncludingBlockHashes(txIDs []*externalapi.DomainTransactionID) ( + txIDsToIncludinglockHashes TxIDsToBlockHashes, missingTxIds []*externalapi.DomainTransactionID, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXIncludingBlockHashes") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + txIDsToTxIndexData, notFound, err := ti.store.getTxsData(txIDs) if err != nil { - return nil, false, err + return nil, nil, err + } + + txIDsToIncludinglockHashes = make(TxIDsToBlockHashes) + + for txID, txIndexData := range txIDsToTxIndexData { + txIDsToIncludinglockHashes[txID] = txIndexData.IncludingBlockHash + } + + return txIDsToIncludinglockHashes, notFound, nil +} + +// TXIncludingBlocks returns the including block hashes for for the given txIDs +func (ti *TXIndex) TXIncludingBlocks(txIDs []*externalapi.DomainTransactionID) ( + txIDsToIncludingBlocks TxIDsToBlocks, notFound []*externalapi.DomainTransactionID, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXIncludingBlocks") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + txIDsToTxIndexData, notFound, err := ti.store.getTxsData(txIDs) + if err != nil { + return nil, nil, err + } + + txIDsToIncludingBlocks = make(TxIDsToBlocks) + + for txID, txIndexData := range txIDsToTxIndexData { + txIDsToIncludingBlocks[txID], err = ti.domain.Consensus().GetBlockEvenIfHeaderOnly(txIndexData.IncludingBlockHash) + if err != nil { + if database.IsNotFoundError(err) { + return nil, nil, fmt.Errorf("including block %s missing for txID %s ", txIndexData.IncludingBlockHash.String(), txID.String()) + } + return nil, nil, err + } } - for _, blockAcceptanceData := range acceptanceData { - for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { - if consensushashing.TransactionID(transactionAcceptanceData.Transaction).Equal(txID) { - return blockAcceptanceData.BlockHash, true, nil + return txIDsToIncludingBlocks, notFound, nil +} + +// GetTXsBlueScores returns the tx's accepting bluescore for for the given txID +// Note: this is a optimization function to store and dynamically calc. tx confirmations with access to to virtual bluescore +// such as in the case of rpc confirmation notification listeners +func (ti *TXIndex) GetTXsBlueScores(txIDs []*externalapi.DomainTransactionID) ( + txIDsToBlueScores TxIDsToBlueScores, notFound []*externalapi.DomainTransactionID, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTXsBlueScores") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + txIDsToTxIndexData, notFound, err := ti.store.getTxsData(txIDs) + if err != nil { + return nil, nil, err + } + + txIDsToBlueScores = make(TxIDsToBlueScores) + for txID, txIndexData := range txIDsToTxIndexData { + acceptingBlockHeader, err := ti.domain.Consensus().GetBlockHeader(txIndexData.AcceptingBlockHash) + if err != nil { + if database.IsNotFoundError(err) { + return nil, nil, fmt.Errorf("Accepting block %s missing for txID %s ", txIndexData.AcceptingBlockHash.String(), txID.String()) } + return nil, nil, err } + txIDsToBlueScores[txID] = acceptingBlockHeader.BlueScore() } - return nil, false, fmt.Errorf("Could not find including blockHash for transaction with ID %s in Txindex database", txID.String()) + return txIDsToBlueScores, notFound, nil } From 6f1456c44bd67d6110631d7af2c9c27141c62926 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Fri, 14 Oct 2022 16:17:15 +0200 Subject: [PATCH 32/47] expose including & accepting blocks --- app/appmessage/message.go | 12 + .../rpc_get_including_block_of_tx.go | 43 + .../rpc_get_including_blockhashes_of_txs.go | 41 + .../rpc_get_including_blocks_of_txs.go | 43 + app/rpc/rpc.go | 3 + .../get_accepting_blockhashes_of_txs copy.go | 58 + .../rpchandlers/get_including_block_of_tx.go | 64 + .../get_including_blockhash_of_tx.go | 2 +- .../get_including_blocks_of_txs.go | 69 + cmd/kaspactl/commands.go | 5 + domain/txindex/txindex.go | 26 + .../grpcserver/protowire/messages.pb.go | 2126 +++++++++-------- .../grpcserver/protowire/messages.proto | 22 +- .../server/grpcserver/protowire/rpc.md | 125 +- .../server/grpcserver/protowire/rpc.pb.go | 657 ++++- .../server/grpcserver/protowire/rpc.proto | 32 + .../rpc_get_including_block_of_tx.go | 83 + .../rpc_get_including_blockhashes_of_txs.go | 85 + .../rpc_get_including_blocks_of_txs.go | 90 + .../server/grpcserver/protowire/wire.go | 42 + .../rpc_get_including_block_of_tx.go | 20 + .../rpc_get_including_blockhashes_of_txs.go | 20 + .../rpc_get_including_blocks_of_txs.go | 20 + 23 files changed, 2577 insertions(+), 1111 deletions(-) create mode 100644 app/appmessage/rpc_get_including_block_of_tx.go create mode 100644 app/appmessage/rpc_get_including_blockhashes_of_txs.go create mode 100644 app/appmessage/rpc_get_including_blocks_of_txs.go create mode 100644 app/rpc/rpchandlers/get_accepting_blockhashes_of_txs copy.go create mode 100644 app/rpc/rpchandlers/get_including_block_of_tx.go create mode 100644 app/rpc/rpchandlers/get_including_blocks_of_txs.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_block_of_tx.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blockhashes_of_txs.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blocks_of_txs.go create mode 100644 infrastructure/network/rpcclient/rpc_get_including_block_of_tx.go create mode 100644 infrastructure/network/rpcclient/rpc_get_including_blockhashes_of_txs.go create mode 100644 infrastructure/network/rpcclient/rpc_get_including_blocks_of_txs.go diff --git a/app/appmessage/message.go b/app/appmessage/message.go index 27a27d2fc2..c227ff7c03 100644 --- a/app/appmessage/message.go +++ b/app/appmessage/message.go @@ -173,6 +173,12 @@ const ( CmdGetAcceptingBlocksOfTxsResponseMessage CmdGetIncludingBlockHashOfTxRequestMessage CmdGetIncludingBlockHashOfTxResponseMessage + CmdGetIncludingBlockHashesOfTxsRequestMessage + CmdGetIncludingBlockHashesOfTxsResponseMessage + CmdGetIncludingBlockOfTxRequestMessage + CmdGetIncludingBlockOfTxResponseMessage + CmdGetIncludingBlocksOfTxsRequestMessage + CmdGetIncludingBlocksOfTxsResponseMessage CmdGetTxRequestMessage CmdGetTxResponseMessage CmdGetTxsRequestMessage @@ -328,6 +334,12 @@ var RPCMessageCommandToString = map[MessageCommand]string{ CmdGetAcceptingBlocksOfTxsResponseMessage: "GetAcceptingBlocksOfTxsResponse", CmdGetIncludingBlockHashOfTxRequestMessage: "GetIncludingBlockHashOfTxRequest", CmdGetIncludingBlockHashOfTxResponseMessage: "GetIncludingBlockHashOfTxResponse", + CmdGetIncludingBlockHashesOfTxsRequestMessage: "GetIncludingBlockHashesOfTxsRequest", + CmdGetIncludingBlockHashesOfTxsResponseMessage: "GetIncludingBlockHashesOfTxsResponse", + CmdGetIncludingBlockOfTxRequestMessage: "GetIncludingBlockOfTxRequest", + CmdGetIncludingBlockOfTxResponseMessage: "GetIncludingBlockOfTxResponse", + CmdGetIncludingBlocksOfTxsRequestMessage: "GetIncludingBlocksOfTxsRequest", + CmdGetIncludingBlocksOfTxsResponseMessage: "GetIncludingBlocksOfTxsResponse", CmdGetTxRequestMessage: "GetTxRequest", CmdGetTxResponseMessage: "GetTxResponse", CmdGetTxsRequestMessage: "GetTxsRequest", diff --git a/app/appmessage/rpc_get_including_block_of_tx.go b/app/appmessage/rpc_get_including_block_of_tx.go new file mode 100644 index 0000000000..69399a00b5 --- /dev/null +++ b/app/appmessage/rpc_get_including_block_of_tx.go @@ -0,0 +1,43 @@ +package appmessage + +// GetIncludingBlockOfTxRequestMessage is an appmessage corresponding to +// its respective RPC message +type GetIncludingBlockOfTxRequestMessage struct { + baseMessage + TxID string + IncludeTransactions bool +} + +// Command returns the protocol command string for the message +func (msg *GetIncludingBlockOfTxRequestMessage) Command() MessageCommand { + return CmdGetIncludingBlockOfTxRequestMessage +} + +// NewGetIncludingBlockOfTxRequest returns a instance of the message +func NewGetIncludingBlockOfTxRequest(txID string, includeTransactions bool) *GetIncludingBlockOfTxRequestMessage { + return &GetIncludingBlockOfTxRequestMessage{ + TxID: txID, + IncludeTransactions: includeTransactions, + } +} + +// GetIncludingBlockOfTxResponseMessage is an appmessage corresponding to +// its respective RPC message +type GetIncludingBlockOfTxResponseMessage struct { + baseMessage + Block *RPCBlock + + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *GetIncludingBlockOfTxResponseMessage) Command() MessageCommand { + return CmdGetIncludingBlockOfTxResponseMessage +} + +// NewGetIncludingBlockOfTxResponse returns an instance of the message +func NewGetIncludingBlockOfTxResponse(block *RPCBlock) *GetIncludingBlockOfTxResponseMessage { + return &GetIncludingBlockOfTxResponseMessage{ + Block: block, + } +} diff --git a/app/appmessage/rpc_get_including_blockhashes_of_txs.go b/app/appmessage/rpc_get_including_blockhashes_of_txs.go new file mode 100644 index 0000000000..0315458d0c --- /dev/null +++ b/app/appmessage/rpc_get_including_blockhashes_of_txs.go @@ -0,0 +1,41 @@ +package appmessage + +// GetIncludingBlockHashesOfTxsRequestMessage is an appmessage corresponding to +// its respective RPC message +type GetIncludingBlockHashesOfTxsRequestMessage struct { + baseMessage + TxIDs []string +} + +// Command returns the protocol command string for the message +func (msg *GetIncludingBlockHashesOfTxsRequestMessage) Command() MessageCommand { + return CmdGetIncludingBlockHashesOfTxsRequestMessage +} + +// NewGetIncludingBlockHashesOfTxsRequest returns a instance of the message +func NewGetIncludingBlockHashesOfTxsRequest(txIDs []string) *GetIncludingBlockHashesOfTxsRequestMessage { + return &GetIncludingBlockHashesOfTxsRequestMessage{ + TxIDs: txIDs, + } +} + +// GetIncludingBlockHashesOfTxsResponseMessage is an appmessage corresponding to +// its respective RPC message +type GetIncludingBlockHashesOfTxsResponseMessage struct { + baseMessage + TxIDBlockHashPairs []*TxIDBlockHashPair + + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *GetIncludingBlockHashesOfTxsResponseMessage) Command() MessageCommand { + return CmdGetIncludingBlockHashesOfTxsResponseMessage +} + +// NewGetIncludingBlockHashesOfTxsResponse returns an instance of the message +func NewGetIncludingBlockHashesOfTxsResponse(txIDBlockHashPairs []*TxIDBlockHashPair) *GetIncludingBlockHashesOfTxsResponseMessage { + return &GetIncludingBlockHashesOfTxsResponseMessage{ + TxIDBlockHashPairs: txIDBlockHashPairs, + } +} diff --git a/app/appmessage/rpc_get_including_blocks_of_txs.go b/app/appmessage/rpc_get_including_blocks_of_txs.go new file mode 100644 index 0000000000..8e285edeea --- /dev/null +++ b/app/appmessage/rpc_get_including_blocks_of_txs.go @@ -0,0 +1,43 @@ +package appmessage + +// GetIncludingBlocksOfTxsRequestMessage is an appmessage corresponding to +// its respective RPC message +type GetIncludingBlocksOfTxsRequestMessage struct { + baseMessage + TxIDs []string + IncludeTransactions bool +} + +// Command returns the protocol command string for the message +func (msg *GetIncludingBlocksOfTxsRequestMessage) Command() MessageCommand { + return CmdGetIncludingBlocksOfTxsRequestMessage +} + +// NewGetIncludingBlocksOfTxsRequest returns a instance of the message +func NewGetIncludingBlocksOfTxsRequest(txIDs []string, includeTransactions bool) *GetIncludingBlocksOfTxsRequestMessage { + return &GetIncludingBlocksOfTxsRequestMessage{ + TxIDs: txIDs, + IncludeTransactions: includeTransactions, + } +} + +// GetIncludingBlocksOfTxsResponseMessage is an appmessage corresponding to +// its respective RPC message +type GetIncludingBlocksOfTxsResponseMessage struct { + baseMessage + TxIDBlockPairs []*TxIDBlockPair + + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *GetIncludingBlocksOfTxsResponseMessage) Command() MessageCommand { + return CmdGetIncludingBlocksOfTxsResponseMessage +} + +// NewGetIncludingBlocksOfTxsResponse returns an instance of the message +func NewGetIncludingBlocksOfTxsResponse(txIDBlockPairs []*TxIDBlockPair) *GetIncludingBlocksOfTxsResponseMessage { + return &GetIncludingBlocksOfTxsResponseMessage{ + TxIDBlockPairs: txIDBlockPairs, + } +} diff --git a/app/rpc/rpc.go b/app/rpc/rpc.go index 4bda019885..3e65877beb 100644 --- a/app/rpc/rpc.go +++ b/app/rpc/rpc.go @@ -56,6 +56,9 @@ var handlers = map[appmessage.MessageCommand]handler{ appmessage.CmdGetAcceptingBlockOfTxRequestMessage: rpchandlers.HandleGetAcceptingBlockOfTx, appmessage.CmdGetAcceptingBlocksOfTxsRequestMessage: rpchandlers.HandleGetAcceptingBlocksOfTxs, appmessage.CmdGetIncludingBlockHashOfTxRequestMessage: rpchandlers.HandleGetIncludingBlockHashOfTx, + appmessage.CmdGetIncludingBlockHashesOfTxsRequestMessage: rpchandlers.HandleGetIncludingBlockHashesOfTxs, + appmessage.CmdGetIncludingBlockOfTxRequestMessage: rpchandlers.HandleGetIncludingBlockOfTx, + appmessage.CmdGetIncludingBlocksOfTxsRequestMessage: rpchandlers.HandleGetIncludingBlocksOfTxs, appmessage.CmdGetTxRequestMessage: rpchandlers.HandleGetTx, appmessage.CmdGetTxsRequestMessage: rpchandlers.HandleGetTxs, appmessage.CmdGetTxConfirmationsRequestMessage: rpchandlers.HandleGetTxConfirmations, diff --git a/app/rpc/rpchandlers/get_accepting_blockhashes_of_txs copy.go b/app/rpc/rpchandlers/get_accepting_blockhashes_of_txs copy.go new file mode 100644 index 0000000000..1523e5659a --- /dev/null +++ b/app/rpc/rpchandlers/get_accepting_blockhashes_of_txs copy.go @@ -0,0 +1,58 @@ +package rpchandlers + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/kaspanet/kaspad/app/rpc/rpccontext" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" + + "github.com/pkg/errors" +) + +// HandleGetIncludingBlockHashesOfTxs handles the respectively named RPC command +func HandleGetIncludingBlockHashesOfTxs(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { + var err error + + if !context.Config.TXIndex { + errorMessage := &appmessage.GetIncludingBlockHashesOfTxsResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") + return errorMessage, nil + } + + getIncludingBlockHashesOfTxsRequest := request.(*appmessage.GetIncludingBlockHashesOfTxsRequestMessage) + + domainTxIDs := make([]*externalapi.DomainTransactionID, len(getIncludingBlockHashesOfTxsRequest.TxIDs)) + for i := range domainTxIDs { + domainTxIDs[i], err = externalapi.NewDomainTransactionIDFromString(getIncludingBlockHashesOfTxsRequest.TxIDs[i]) + if err != nil { + errorMessage := &appmessage.GetIncludingBlockHashesOfTxsResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("error parsing txID: %s", getIncludingBlockHashesOfTxsRequest.TxIDs[i]) + return errorMessage, nil + } + } + + includingBlockHashes, _, err := context.TXIndex.TXIncludingBlockHashes(domainTxIDs) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetIncludingBlockHashesOfTxsResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + + txIDBlockHashpairs := make([]*appmessage.TxIDBlockHashPair, len(includingBlockHashes)) + i := 0 + for txID, blockHash := range includingBlockHashes { + txIDBlockHashpairs[i] = &appmessage.TxIDBlockHashPair{ + TxID: txID.String(), + Hash: blockHash.String(), + } + i++ + } + + response := appmessage.NewGetIncludingBlockHashesOfTxsResponse(txIDBlockHashpairs) + + return response, nil +} diff --git a/app/rpc/rpchandlers/get_including_block_of_tx.go b/app/rpc/rpchandlers/get_including_block_of_tx.go new file mode 100644 index 0000000000..c43d7e00c8 --- /dev/null +++ b/app/rpc/rpchandlers/get_including_block_of_tx.go @@ -0,0 +1,64 @@ +package rpchandlers + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/kaspanet/kaspad/app/rpc/rpccontext" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing" + "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" + + "github.com/pkg/errors" +) + +// HandleGetIncludingBlockOfTx handles the respectively named RPC command +func HandleGetIncludingBlockOfTx(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { + if !context.Config.TXIndex { + errorMessage := &appmessage.GetIncludingBlockHashOfTxResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") + return errorMessage, nil + } + + getIncludingBlockOfTxRequest := request.(*appmessage.GetIncludingBlockOfTxRequestMessage) + + domainTxID, err := externalapi.NewDomainTransactionIDFromString(getIncludingBlockOfTxRequest.TxID) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetIncludingBlockOfTxResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + + includingBlock, found, err := context.TXIndex.TXIncludingBlock(domainTxID) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetIncludingBlockOfTxResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + if !found { + errorMessage := &appmessage.GetIncludingBlockOfTxResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Could not find including block in the txindex database for txID: %s", domainTxID.String()) + return errorMessage, nil + } + + rpcIncludingBlock := appmessage.DomainBlockToRPCBlock(includingBlock) + err = context.PopulateBlockWithVerboseData(rpcIncludingBlock, includingBlock.Header, includingBlock, getIncludingBlockOfTxRequest.IncludeTransactions) + if err != nil { + if errors.Is(err, rpccontext.ErrBuildBlockVerboseDataInvalidBlock) { + errorMessage := &appmessage.GetIncludingBlockOfTxResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Block %s is invalid", consensushashing.BlockHash(includingBlock).String()) + return errorMessage, nil + } + return nil, err + } + + response := appmessage.NewGetIncludingBlockOfTxResponse(rpcIncludingBlock) + + return response, nil +} diff --git a/app/rpc/rpchandlers/get_including_blockhash_of_tx.go b/app/rpc/rpchandlers/get_including_blockhash_of_tx.go index 22dfc48c6e..c6a6fdd5ab 100644 --- a/app/rpc/rpchandlers/get_including_blockhash_of_tx.go +++ b/app/rpc/rpchandlers/get_including_blockhash_of_tx.go @@ -41,7 +41,7 @@ func HandleGetIncludingBlockHashOfTx(context *rpccontext.Context, _ *router.Rout return errorMessage, nil } if !found { - errorMessage := &appmessage.GetAcceptingBlockHashOfTxResponseMessage{} + errorMessage := &appmessage.GetIncludingBlockHashOfTxResponseMessage{} errorMessage.Error = appmessage.RPCErrorf("Could not find including block hash in the txindex database for txID: %s", domainTxID.String()) return errorMessage, nil } diff --git a/app/rpc/rpchandlers/get_including_blocks_of_txs.go b/app/rpc/rpchandlers/get_including_blocks_of_txs.go new file mode 100644 index 0000000000..6d867925b6 --- /dev/null +++ b/app/rpc/rpchandlers/get_including_blocks_of_txs.go @@ -0,0 +1,69 @@ +package rpchandlers + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/kaspanet/kaspad/app/rpc/rpccontext" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing" + "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" + + "github.com/pkg/errors" +) + +// HandleGetIncludingBlocksOfTxs handles the respectively named RPC command +func HandleGetIncludingBlocksOfTxs(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { + var err error + + if !context.Config.TXIndex { + errorMessage := &appmessage.GetIncludingBlocksOfTxsResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") + return errorMessage, nil + } + + getIncludingBlocksOfTxsRequest := request.(*appmessage.GetIncludingBlocksOfTxsRequestMessage) + + domainTxIDs := make([]*externalapi.DomainTransactionID, len(getIncludingBlocksOfTxsRequest.TxIDs)) + for i := range domainTxIDs { + domainTxIDs[i], err = externalapi.NewDomainTransactionIDFromString(getIncludingBlocksOfTxsRequest.TxIDs[i]) + if err != nil { + errorMessage := &appmessage.GetIncludingBlocksOfTxsResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("error parsing txID: %s, %s", getIncludingBlocksOfTxsRequest.TxIDs[i], err.Error()) + return errorMessage, nil + } + } + + includingBlockHashes, _, err := context.TXIndex.TXIncludingBlocks(domainTxIDs) + if err != nil { + rpcError := &appmessage.RPCError{} + if !errors.As(err, &rpcError) { + return nil, err + } + errorMessage := &appmessage.GetIncludingBlocksOfTxsResponseMessage{} + errorMessage.Error = rpcError + return errorMessage, nil + } + + txIDBlockPairs := make([]*appmessage.TxIDBlockPair, len(includingBlockHashes)) + i := 0 + for txID, includingBlock := range includingBlockHashes { + rpcIncludingBlock := appmessage.DomainBlockToRPCBlock(includingBlock) + err = context.PopulateBlockWithVerboseData(rpcIncludingBlock, includingBlock.Header, includingBlock, getIncludingBlocksOfTxsRequest.IncludeTransactions) + if err != nil { + if errors.Is(err, rpccontext.ErrBuildBlockVerboseDataInvalidBlock) { + errorMessage := &appmessage.GetIncludingBlockOfTxResponseMessage{} + errorMessage.Error = appmessage.RPCErrorf("Block %s is invalid", consensushashing.BlockHash(includingBlock).String()) + return errorMessage, nil + } + return nil, err + } + txIDBlockPairs[i] = &appmessage.TxIDBlockPair{ + TxID: txID.String(), + Block: rpcIncludingBlock, + } + i++ + } + + response := appmessage.NewGetIncludingBlocksOfTxsResponse(txIDBlockPairs) + + return response, nil +} diff --git a/cmd/kaspactl/commands.go b/cmd/kaspactl/commands.go index b480d8bab5..c18810f87b 100644 --- a/cmd/kaspactl/commands.go +++ b/cmd/kaspactl/commands.go @@ -19,7 +19,12 @@ var commandTypes = []reflect.Type{ reflect.TypeOf(protowire.KaspadMessage_GetAcceptingBlockHashesOfTxsRequest{}), reflect.TypeOf(protowire.KaspadMessage_GetAcceptingBlockOfTxRequest{}), reflect.TypeOf(protowire.KaspadMessage_GetAcceptingBlocksOfTxsRequest{}), + reflect.TypeOf(protowire.KaspadMessage_GetIncludingBlockHashOfTxRequest{}), + reflect.TypeOf(protowire.KaspadMessage_GetIncludingBlockHashesOfTxsRequest{}), + reflect.TypeOf(protowire.KaspadMessage_GetIncludingBlockOfTxRequest{}), + reflect.TypeOf(protowire.KaspadMessage_GetIncludingBlocksOfTxsRequest{}), + reflect.TypeOf(protowire.KaspadMessage_GetTxRequest{}), reflect.TypeOf(protowire.KaspadMessage_GetTxsRequest{}), reflect.TypeOf(protowire.KaspadMessage_GetTxConfirmationsRequest{}), diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 182fc939b3..9df8cd45ac 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -306,6 +306,7 @@ func (ti *TXIndex) TXAcceptingBlock(txID *externalapi.DomainTransactionID) ( } acceptingBlock, err := ti.domain.Consensus().GetBlockEvenIfHeaderOnly(txIndexData.AcceptingBlockHash) + if err != nil { if database.IsNotFoundError(err) { return nil, false, fmt.Errorf("accepting block %s missing for txID %s ", txIndexData.AcceptingBlockHash.String(), txID.String()) @@ -477,6 +478,31 @@ func (ti *TXIndex) TXIncludingBlockHash(txID *externalapi.DomainTransactionID) ( return txIndexData.IncludingBlockHash, true, nil } +// TXIncludingBlock returns the including block hashes for for the given txIDs +func (ti *TXIndex) TXIncludingBlock(txID *externalapi.DomainTransactionID) ( + block *externalapi.DomainBlock, found bool, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXIncludingBlock") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + txIndexData, found, err := ti.store.getTxData(txID) + if err != nil { + return nil, false, err + } + + includingBlock, err := ti.domain.Consensus().GetBlockEvenIfHeaderOnly(txIndexData.IncludingBlockHash) + + if err != nil { + if database.IsNotFoundError(err) { + return nil, false, fmt.Errorf("including block %s missing for txID %s ", txIndexData.IncludingBlockHash.String(), txID.String()) + } + return nil, false, err + } + return includingBlock, true, nil +} + // TXIncludingBlockHashes returns the including block hashes for for the given txI func (ti *TXIndex) TXIncludingBlockHashes(txIDs []*externalapi.DomainTransactionID) ( txIDsToIncludinglockHashes TxIDsToBlockHashes, missingTxIds []*externalapi.DomainTransactionID, err error) { diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go index a01a864b65..9ac9e21c01 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go @@ -166,6 +166,12 @@ type KaspadMessage struct { // *KaspadMessage_GetAcceptingBlocksOfTxsResponse // *KaspadMessage_GetIncludingBlockHashOfTxRequest // *KaspadMessage_GetIncludingBlockHashOfTxResponse + // *KaspadMessage_GetIncludingBlockHashesOfTxsRequest + // *KaspadMessage_GetIncludingBlockHashesOfTxsResponse + // *KaspadMessage_GetIncludingBlockOfTxRequest + // *KaspadMessage_GetIncludingBlockOfTxResponse + // *KaspadMessage_GetIncludingBlocksOfTxsRequest + // *KaspadMessage_GetIncludingBlocksOfTxsResponse // *KaspadMessage_GetTxRequest // *KaspadMessage_GetTxResponse // *KaspadMessage_GetTxsRequest @@ -1196,6 +1202,48 @@ func (x *KaspadMessage) GetGetIncludingBlockHashOfTxResponse() *GetIncludingBloc return nil } +func (x *KaspadMessage) GetGetIncludingBlockHashesOfTxsRequest() *GetIncludingBlockHashesOfTxsRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetIncludingBlockHashesOfTxsRequest); ok { + return x.GetIncludingBlockHashesOfTxsRequest + } + return nil +} + +func (x *KaspadMessage) GetGetIncludingBlockHashesOfTxsResponse() *GetIncludingBlockHashesOfTxsResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetIncludingBlockHashesOfTxsResponse); ok { + return x.GetIncludingBlockHashesOfTxsResponse + } + return nil +} + +func (x *KaspadMessage) GetGetIncludingBlockOfTxRequest() *GetIncludingBlockOfTxRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetIncludingBlockOfTxRequest); ok { + return x.GetIncludingBlockOfTxRequest + } + return nil +} + +func (x *KaspadMessage) GetGetIncludingBlockOfTxResponse() *GetIncludingBlockOfTxResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetIncludingBlockOfTxResponse); ok { + return x.GetIncludingBlockOfTxResponse + } + return nil +} + +func (x *KaspadMessage) GetGetIncludingBlocksOfTxsRequest() *GetIncludingBlocksOfTxsRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetIncludingBlocksOfTxsRequest); ok { + return x.GetIncludingBlocksOfTxsRequest + } + return nil +} + +func (x *KaspadMessage) GetGetIncludingBlocksOfTxsResponse() *GetIncludingBlocksOfTxsResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_GetIncludingBlocksOfTxsResponse); ok { + return x.GetIncludingBlocksOfTxsResponse + } + return nil +} + func (x *KaspadMessage) GetGetTxRequest() *GetTxRequestMessage { if x, ok := x.GetPayload().(*KaspadMessage_GetTxRequest); ok { return x.GetTxRequest @@ -1816,36 +1864,60 @@ type KaspadMessage_GetIncludingBlockHashOfTxResponse struct { GetIncludingBlockHashOfTxResponse *GetIncludingBlockHashOfTxResponseMessage `protobuf:"bytes,1097,opt,name=getIncludingBlockHashOfTxResponse,proto3,oneof"` } +type KaspadMessage_GetIncludingBlockHashesOfTxsRequest struct { + GetIncludingBlockHashesOfTxsRequest *GetIncludingBlockHashesOfTxsRequestMessage `protobuf:"bytes,1098,opt,name=getIncludingBlockHashesOfTxsRequest,proto3,oneof"` +} + +type KaspadMessage_GetIncludingBlockHashesOfTxsResponse struct { + GetIncludingBlockHashesOfTxsResponse *GetIncludingBlockHashesOfTxsResponseMessage `protobuf:"bytes,1099,opt,name=getIncludingBlockHashesOfTxsResponse,proto3,oneof"` +} + +type KaspadMessage_GetIncludingBlockOfTxRequest struct { + GetIncludingBlockOfTxRequest *GetIncludingBlockOfTxRequestMessage `protobuf:"bytes,1100,opt,name=getIncludingBlockOfTxRequest,proto3,oneof"` +} + +type KaspadMessage_GetIncludingBlockOfTxResponse struct { + GetIncludingBlockOfTxResponse *GetIncludingBlockOfTxResponseMessage `protobuf:"bytes,1101,opt,name=getIncludingBlockOfTxResponse,proto3,oneof"` +} + +type KaspadMessage_GetIncludingBlocksOfTxsRequest struct { + GetIncludingBlocksOfTxsRequest *GetIncludingBlocksOfTxsRequestMessage `protobuf:"bytes,1102,opt,name=getIncludingBlocksOfTxsRequest,proto3,oneof"` +} + +type KaspadMessage_GetIncludingBlocksOfTxsResponse struct { + GetIncludingBlocksOfTxsResponse *GetIncludingBlocksOfTxsResponseMessage `protobuf:"bytes,1103,opt,name=getIncludingBlocksOfTxsResponse,proto3,oneof"` +} + type KaspadMessage_GetTxRequest struct { - GetTxRequest *GetTxRequestMessage `protobuf:"bytes,1098,opt,name=getTxRequest,proto3,oneof"` + GetTxRequest *GetTxRequestMessage `protobuf:"bytes,1104,opt,name=getTxRequest,proto3,oneof"` } type KaspadMessage_GetTxResponse struct { - GetTxResponse *GetTxResponseMessage `protobuf:"bytes,1099,opt,name=getTxResponse,proto3,oneof"` + GetTxResponse *GetTxResponseMessage `protobuf:"bytes,1105,opt,name=getTxResponse,proto3,oneof"` } type KaspadMessage_GetTxsRequest struct { - GetTxsRequest *GetTxsRequestMessage `protobuf:"bytes,1100,opt,name=getTxsRequest,proto3,oneof"` + GetTxsRequest *GetTxsRequestMessage `protobuf:"bytes,1106,opt,name=getTxsRequest,proto3,oneof"` } type KaspadMessage_GetTxsResponse struct { - GetTxsResponse *GetTxsResponseMessage `protobuf:"bytes,1101,opt,name=getTxsResponse,proto3,oneof"` + GetTxsResponse *GetTxsResponseMessage `protobuf:"bytes,1107,opt,name=getTxsResponse,proto3,oneof"` } type KaspadMessage_GetTxConfirmationsRequest struct { - GetTxConfirmationsRequest *GetTxConfirmationsRequestMessage `protobuf:"bytes,1102,opt,name=getTxConfirmationsRequest,proto3,oneof"` + GetTxConfirmationsRequest *GetTxConfirmationsRequestMessage `protobuf:"bytes,1108,opt,name=getTxConfirmationsRequest,proto3,oneof"` } type KaspadMessage_GetTxConfirmationsResponse struct { - GetTxConfirmationsResponse *GetTxConfirmationsResponseMessage `protobuf:"bytes,1103,opt,name=getTxConfirmationsResponse,proto3,oneof"` + GetTxConfirmationsResponse *GetTxConfirmationsResponseMessage `protobuf:"bytes,1109,opt,name=getTxConfirmationsResponse,proto3,oneof"` } type KaspadMessage_GetTxsConfirmationsRequest struct { - GetTxsConfirmationsRequest *GetTxsConfirmationsRequestMessage `protobuf:"bytes,1104,opt,name=getTxsConfirmationsRequest,proto3,oneof"` + GetTxsConfirmationsRequest *GetTxsConfirmationsRequestMessage `protobuf:"bytes,1110,opt,name=getTxsConfirmationsRequest,proto3,oneof"` } type KaspadMessage_GetTxsConfirmationsResponse struct { - GetTxsConfirmationsResponse *GetTxsConfirmationsResponseMessage `protobuf:"bytes,1105,opt,name=getTxsConfirmationsResponse,proto3,oneof"` + GetTxsConfirmationsResponse *GetTxsConfirmationsResponseMessage `protobuf:"bytes,1111,opt,name=getTxsConfirmationsResponse,proto3,oneof"` } func (*KaspadMessage_Addresses) isKaspadMessage_Payload() {} @@ -2128,6 +2200,18 @@ func (*KaspadMessage_GetIncludingBlockHashOfTxRequest) isKaspadMessage_Payload() func (*KaspadMessage_GetIncludingBlockHashOfTxResponse) isKaspadMessage_Payload() {} +func (*KaspadMessage_GetIncludingBlockHashesOfTxsRequest) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetIncludingBlockHashesOfTxsResponse) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetIncludingBlockOfTxRequest) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetIncludingBlockOfTxResponse) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetIncludingBlocksOfTxsRequest) isKaspadMessage_Payload() {} + +func (*KaspadMessage_GetIncludingBlocksOfTxsResponse) isKaspadMessage_Payload() {} + func (*KaspadMessage_GetTxRequest) isKaspadMessage_Payload() {} func (*KaspadMessage_GetTxResponse) isKaspadMessage_Payload() {} @@ -2150,1025 +2234,1073 @@ var file_messages_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x1a, 0x09, 0x70, 0x32, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x09, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xcc, 0x7d, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x12, 0x2f, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x12, 0x41, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x50, 0x0a, 0x10, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x10, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x12, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, - 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x12, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x59, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x35, 0x0a, 0x08, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x08, 0x69, 0x62, - 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x47, 0x0a, 0x0d, 0x69, 0x6e, 0x76, 0x52, 0x65, 0x6c, - 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x6e, 0x76, 0x52, 0x65, 0x6c, - 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x0d, 0x69, 0x6e, 0x76, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, - 0x4d, 0x0a, 0x0f, 0x69, 0x6e, 0x76, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x6e, 0x76, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x69, - 0x6e, 0x76, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, - 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x04, - 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, 0x6f, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x12, 0x32, 0x0a, 0x06, 0x76, 0x65, - 0x72, 0x61, 0x63, 0x6b, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x56, 0x65, 0x72, 0x61, 0x63, 0x6b, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x06, 0x76, 0x65, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x35, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x15, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, - 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, - 0x12, 0x32, 0x0a, 0x06, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x6a, - 0x65, 0x63, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x68, 0x0a, 0x18, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, - 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, - 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x12, 0x50, - 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x10, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, - 0x12, 0x62, 0x0a, 0x16, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, - 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x55, 0x6e, 0x65, - 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x16, 0x75, 0x6e, - 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x0f, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x62, 0x64, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x0f, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x6f, 0x72, 0x12, 0x6e, 0x0a, 0x1a, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, - 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, - 0x68, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x49, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x6f, 0x72, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x48, - 0x61, 0x73, 0x68, 0x12, 0x89, 0x01, 0x0a, 0x23, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, - 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, - 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x21, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, + 0x6f, 0x22, 0xd7, 0x83, 0x01, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x12, 0x2f, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x12, 0x41, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, + 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x50, 0x0a, 0x10, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x10, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x56, 0x0a, + 0x12, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, + 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x12, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x59, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x35, 0x0a, 0x08, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x08, 0x69, + 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x47, 0x0a, 0x0d, 0x69, 0x6e, 0x76, 0x52, 0x65, + 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x6e, 0x76, 0x52, 0x65, + 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x0d, 0x69, 0x6e, 0x76, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x12, 0x4d, 0x0a, 0x0f, 0x69, 0x6e, 0x76, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x6e, 0x76, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, + 0x69, 0x6e, 0x76, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x2c, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, + 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, 0x6f, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x12, 0x32, 0x0a, 0x06, 0x76, + 0x65, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x56, 0x65, 0x72, 0x61, 0x63, 0x6b, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x06, 0x76, 0x65, 0x72, 0x61, 0x63, 0x6b, 0x12, + 0x35, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x15, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, + 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, + 0x64, 0x12, 0x32, 0x0a, 0x06, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, + 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x06, 0x72, + 0x65, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x68, 0x0a, 0x18, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, - 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x23, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, + 0x6b, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x12, - 0x77, 0x0a, 0x1d, 0x64, 0x6f, 0x6e, 0x65, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, - 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x44, 0x6f, 0x6e, 0x65, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x64, 0x6f, 0x6e, 0x65, 0x50, - 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, - 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x12, 0x86, 0x01, 0x0a, 0x22, 0x69, 0x62, 0x64, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x69, 0x67, 0x68, - 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x18, - 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x49, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, - 0x72, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4e, 0x6f, 0x74, 0x46, - 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, 0x69, - 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x69, - 0x67, 0x68, 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, - 0x64, 0x12, 0x5c, 0x0a, 0x14, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, - 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, + 0x50, 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x73, 0x12, 0x62, 0x0a, 0x16, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, + 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x55, 0x6e, + 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x16, 0x75, + 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x0f, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x62, 0x64, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x6f, 0x72, 0x12, 0x6e, 0x0a, 0x1a, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x48, 0x61, + 0x73, 0x68, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x6f, 0x72, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, + 0x48, 0x61, 0x73, 0x68, 0x12, 0x89, 0x01, 0x0a, 0x23, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x21, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, + 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, + 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x23, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, + 0x12, 0x77, 0x0a, 0x1d, 0x64, 0x6f, 0x6e, 0x65, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, + 0x73, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x44, 0x6f, 0x6e, 0x65, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, + 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x64, 0x6f, 0x6e, 0x65, + 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, + 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x12, 0x86, 0x01, 0x0a, 0x22, 0x69, 0x62, + 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x69, 0x67, + 0x68, 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, + 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x49, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, + 0x6f, 0x72, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4e, 0x6f, 0x74, + 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, + 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x48, + 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, + 0x6e, 0x64, 0x12, 0x5c, 0x0a, 0x14, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x54, + 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, + 0x61, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x14, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x14, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x6b, 0x0a, 0x19, 0x64, 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x57, 0x69, 0x74, - 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x18, 0x25, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x44, - 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, 0x75, - 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x19, 0x64, 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x57, 0x69, 0x74, - 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x83, 0x01, 0x0a, - 0x21, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, - 0x6e, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x6b, 0x0a, 0x19, 0x64, 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x57, 0x69, + 0x74, 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x18, 0x25, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x44, 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, + 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x19, 0x64, 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x57, 0x69, + 0x74, 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x83, 0x01, + 0x0a, 0x21, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, 0x6e, 0x74, 0x69, 0x63, + 0x6f, 0x6e, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, + 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, + 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x21, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, 0x6e, 0x74, 0x69, 0x63, + 0x6f, 0x6e, 0x65, 0x12, 0x44, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x56, 0x0a, 0x12, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, + 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x73, 0x12, 0x41, 0x0a, 0x0b, 0x44, 0x6f, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, + 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x44, 0x6f, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x44, 0x6f, 0x6e, 0x65, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x12, 0x6e, 0x0a, 0x1a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, + 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, + 0x65, 0x74, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, 0x6e, - 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, 0x6e, - 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x21, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, - 0x6e, 0x65, 0x12, 0x44, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x56, 0x0a, 0x12, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x2a, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x12, 0x41, 0x0a, 0x0b, 0x44, 0x6f, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, - 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x44, 0x6f, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x44, 0x6f, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x73, 0x12, 0x6e, 0x0a, 0x1a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, - 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, - 0x74, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, - 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, - 0x53, 0x65, 0x74, 0x12, 0x4a, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, - 0x59, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, - 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, + 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, + 0x4f, 0x53, 0x65, 0x74, 0x12, 0x4a, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x47, 0x0a, 0x0d, 0x70, 0x72, - 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x2f, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, 0x72, - 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x73, 0x12, 0x68, 0x0a, 0x18, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, - 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, - 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x18, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, 0x6e, - 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x53, 0x0a, - 0x11, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, 0x6f, - 0x6f, 0x66, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x11, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, 0x6f, - 0x6f, 0x66, 0x12, 0x2f, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x32, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, - 0x61, 0x64, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x72, 0x65, - 0x61, 0x64, 0x79, 0x12, 0x62, 0x0a, 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, - 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x56, 0x34, 0x18, 0x33, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, - 0x44, 0x61, 0x74, 0x61, 0x56, 0x34, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, - 0x64, 0x44, 0x61, 0x74, 0x61, 0x56, 0x34, 0x12, 0x41, 0x0a, 0x0b, 0x74, 0x72, 0x75, 0x73, 0x74, - 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, - 0x44, 0x61, 0x74, 0x61, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x74, - 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x71, 0x0a, 0x1b, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x1b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x5c, 0x0a, - 0x14, 0x69, 0x62, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x62, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x14, 0x69, 0x62, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x4d, 0x0a, 0x0f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x65, 0x18, 0x37, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x65, 0x12, 0xa1, 0x01, 0x0a, 0x2b, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, - 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, 0x6e, 0x74, 0x69, - 0x63, 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x38, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, - 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x2b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, - 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, - 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x69, - 0x0a, 0x18, 0x67, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x18, 0x67, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, - 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, + 0x12, 0x59, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x47, 0x0a, 0x0d, 0x70, + 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x2f, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, + 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x73, 0x12, 0x68, 0x0a, 0x18, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, + 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x18, 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, + 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, + 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x53, + 0x0a, 0x11, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, + 0x6f, 0x6f, 0x66, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x11, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, + 0x6f, 0x6f, 0x66, 0x12, 0x2f, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x32, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x65, 0x61, 0x64, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x72, + 0x65, 0x61, 0x64, 0x79, 0x12, 0x62, 0x0a, 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, + 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x56, 0x34, 0x18, 0x33, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, + 0x64, 0x44, 0x61, 0x74, 0x61, 0x56, 0x34, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, + 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x56, 0x34, 0x12, 0x41, 0x0a, 0x0b, 0x74, 0x72, 0x75, 0x73, + 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, + 0x64, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, + 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x71, 0x0a, 0x1b, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x1b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x5c, + 0x0a, 0x14, 0x69, 0x62, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x62, 0x64, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x14, 0x69, 0x62, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x4d, 0x0a, 0x0f, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x65, 0x18, + 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x65, 0x12, 0xa1, 0x01, 0x0a, 0x2b, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, + 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, 0x6e, 0x74, + 0x69, 0x63, 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x38, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, 0x6e, 0x74, 0x69, 0x63, + 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x2b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, + 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, + 0x73, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, + 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xe9, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x18, 0x67, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x12, 0x73, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xeb, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, 0x73, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x5a, 0x0a, 0x13, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x17, - 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, + 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x12, 0x73, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xeb, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, 0x73, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x5a, 0x0a, 0x13, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, + 0x17, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, + 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0xee, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0xee, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x66, 0x0a, 0x17, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, - 0x64, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xef, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, - 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x69, 0x0a, 0x18, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x12, 0x66, 0x0a, 0x17, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, + 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xef, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x17, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x69, 0x0a, 0x18, 0x6e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf0, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x18, 0xf0, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x63, 0x0a, 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xf1, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x17, 0x67, 0x65, 0x74, 0x50, 0x65, - 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0xf2, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf3, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x18, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, - 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xf4, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, + 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, + 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xf1, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x17, 0x67, 0x65, 0x74, 0x50, + 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0xf2, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf3, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x18, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6f, 0x0a, 0x1a, 0x67, 0x65, 0x74, 0x53, + 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xf4, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf5, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x67, - 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x16, 0x67, 0x65, 0x74, - 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0xf6, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, - 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x16, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, - 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x66, - 0x0a, 0x17, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf7, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, - 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x1b, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, + 0x67, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, + 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6f, 0x0a, 0x1a, 0x67, 0x65, 0x74, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf5, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, + 0x67, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, + 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x16, 0x67, 0x65, + 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x18, 0xf6, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, + 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x16, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, + 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x66, 0x0a, 0x17, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf7, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, + 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, + 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x1b, 0x67, 0x65, 0x74, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xf8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xf8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, + 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x75, 0x0a, 0x1c, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x75, 0x0a, 0x1c, 0x67, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf9, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x1c, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4b, 0x0a, 0x0e, 0x61, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0xfa, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0e, - 0x61, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, - 0x0a, 0x0f, 0x61, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0xfb, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x61, - 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, - 0x0a, 0x18, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xfc, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf9, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x1c, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x0e, 0x61, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x18, 0xfa, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x18, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x73, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xfd, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x73, 0x75, + 0x0e, 0x61, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x4e, 0x0a, 0x0f, 0x61, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0xfb, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, + 0x61, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x69, 0x0a, 0x18, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xfc, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x18, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xab, 0x01, 0x0a, 0x2e, 0x6e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xfe, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, - 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xae, 0x01, 0x0a, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xff, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x41, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xfd, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x73, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xab, 0x01, 0x0a, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, - 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa8, 0x01, 0x0a, 0x2d, 0x76, 0x69, 0x72, 0x74, 0x75, - 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x80, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x56, 0x69, 0x72, 0x74, + 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xfe, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, + 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xae, 0x01, 0x0a, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xff, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, + 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa8, 0x01, 0x0a, 0x2d, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x2d, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x4e, 0x0a, 0x0f, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x18, 0x81, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x0f, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x51, 0x0a, 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x82, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x83, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x14, 0x67, - 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x84, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x15, - 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa8, 0x01, 0x0a, 0x2d, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x80, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x85, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x69, - 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, + 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x2d, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x0f, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x81, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x2d, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0xab, 0x01, 0x0a, 0x2e, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x18, 0x86, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, - 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2e, - 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, - 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, - 0x0a, 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0x87, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x54, 0x0a, 0x11, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x88, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x00, 0x52, 0x0f, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x82, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, - 0x89, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x83, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x14, + 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x84, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x15, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa8, 0x01, 0x0a, 0x2d, 0x67, 0x65, 0x74, 0x56, 0x69, + 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x85, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x56, + 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x2d, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0xab, 0x01, 0x0a, 0x2e, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x86, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, + 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x2e, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, + 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x51, 0x0a, 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0x87, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x14, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, - 0x8a, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x15, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x16, 0x67, 0x65, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0x8b, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, - 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x16, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, - 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x66, 0x0a, - 0x17, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x8c, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, - 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x8d, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, - 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x1e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x7e, 0x0a, 0x1f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x8e, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x1f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, - 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, - 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x18, 0x8f, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, - 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, - 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x7e, 0x0a, 0x1f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, - 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0x90, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, - 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1f, - 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, - 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x75, 0x0a, 0x1c, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, - 0x69, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x91, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, - 0x69, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1c, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, - 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x66, 0x69, 0x6e, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x92, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, + 0x52, 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x54, 0x0a, 0x11, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x88, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x18, 0x89, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x14, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0x8a, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x15, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x16, 0x67, 0x65, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0x8b, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, + 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x16, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x66, + 0x0a, 0x17, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x8c, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, + 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, + 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x8d, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, + 0x69, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x1e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, + 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x7e, 0x0a, 0x1f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, + 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x8e, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, + 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x1f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, + 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, + 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x8f, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, + 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, + 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x7e, 0x0a, 0x1f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, + 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0x90, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, + 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x1f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, + 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x75, 0x0a, 0x1c, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, + 0x6c, 0x69, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x91, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, + 0x6c, 0x69, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1c, 0x66, 0x69, 0x6e, 0x61, 0x6c, + 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x66, 0x69, 0x6e, 0x61, + 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x92, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, + 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x24, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x24, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, - 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x4d, 0x65, + 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0x93, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, + 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0x93, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, - 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, - 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, - 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x94, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, - 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x4e, 0x0a, 0x0f, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0x95, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, - 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x51, 0x0a, 0x10, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x18, 0x96, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, + 0x73, 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, + 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, + 0x94, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, + 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, + 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x4e, 0x0a, 0x0f, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0x95, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x10, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x54, 0x0a, 0x11, 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x97, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x12, 0x67, 0x65, 0x74, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x98, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, 0x67, - 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x6c, 0x0a, 0x19, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, 0x73, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x99, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x0f, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x51, 0x0a, 0x10, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x96, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x10, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x11, 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x97, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x12, 0x67, 0x65, 0x74, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, + 0x98, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, + 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x19, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, + 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0x99, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, + 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x6f, 0x0a, 0x1a, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x9a, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, - 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x6f, 0x0a, 0x1a, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x9a, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, - 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x69, 0x0a, 0x18, 0x75, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x9b, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x18, 0x75, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6f, 0x0a, 0x1a, 0x67, - 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x9c, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x1a, 0x67, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x72, 0x0a, 0x1b, + 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, + 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x69, 0x0a, 0x18, 0x75, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x9b, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x18, 0x75, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6f, 0x0a, 0x1a, 0x67, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x9d, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, - 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x99, 0x01, 0x0a, 0x28, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, + 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x9c, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, + 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x1a, 0x67, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x72, 0x0a, + 0x1b, 0x67, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x9d, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x47, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x99, 0x01, 0x0a, 0x28, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, + 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x9e, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x28, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, - 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x9e, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x28, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x9c, 0x01, 0x0a, - 0x29, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x9f, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, - 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x29, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, + 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x9c, 0x01, + 0x0a, 0x29, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xb7, 0x01, 0x0a, 0x32, - 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, + 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x9f, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, + 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x29, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0xa0, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, - 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x32, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, - 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xba, 0x01, 0x0a, 0x33, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xa1, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, + 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xb7, 0x01, 0x0a, + 0x32, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x33, 0x6e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0xb4, 0x01, 0x0a, 0x31, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xa2, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x43, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x56, 0x69, 0x72, 0x74, - 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x31, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0xa0, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, + 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x32, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, + 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, + 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xba, 0x01, 0x0a, 0x33, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xa1, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, + 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x33, + 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0xb4, 0x01, 0x0a, 0x31, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x0a, 0x62, 0x61, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xa3, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x61, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0a, - 0x62, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x62, 0x61, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xa4, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x61, 0x6e, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xa2, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x43, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x56, 0x69, 0x72, + 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x31, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, + 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x0a, 0x62, 0x61, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xa3, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x61, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x0a, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x62, + 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xa4, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x61, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x0b, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x45, 0x0a, 0x0c, 0x75, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0xa5, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x6e, 0x62, 0x61, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0d, 0x75, 0x6e, 0x62, 0x61, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xa6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x0b, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, - 0x0a, 0x0c, 0x75, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xa5, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0d, 0x75, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xa6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x0d, 0x75, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x4b, 0x0a, 0x0e, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x18, 0xa7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x67, 0x65, - 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x0f, - 0x67, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, - 0xa8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x67, 0x65, 0x74, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, + 0x00, 0x52, 0x0d, 0x75, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x4b, 0x0a, 0x0e, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0xa7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x67, + 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, + 0x0f, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0xa8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x67, 0x65, + 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, + 0x0a, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, + 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0xa9, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x69, 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x18, 0xa9, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, - 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x20, - 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, 0x74, 0x78, - 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x84, 0x01, 0x0a, 0x21, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, - 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xaa, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x21, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x74, 0x12, 0x84, 0x01, 0x0a, 0x21, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x99, 0x01, 0x0a, 0x28, 0x6e, 0x6f, 0x74, 0x69, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xaa, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x21, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x69, 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x99, 0x01, 0x0a, 0x28, 0x6e, 0x6f, 0x74, + 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, + 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xab, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, + 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, + 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x28, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x18, 0xab, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x9c, 0x01, 0x0a, 0x29, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, + 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, + 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0xac, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, + 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, + 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x29, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, + 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x96, 0x01, 0x0a, 0x27, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, + 0x69, 0x64, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0xad, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, + 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x27, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xae, 0x01, 0x0a, + 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x28, 0x6e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, + 0x18, 0xae, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, + 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x9c, 0x01, 0x0a, 0x29, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, - 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, - 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0xac, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2f, 0x73, 0x74, + 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, - 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x29, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, + 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xb1, 0x01, + 0x0a, 0x30, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x96, 0x01, 0x0a, 0x27, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, - 0x64, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xad, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, - 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x27, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xae, 0x01, 0x0a, 0x2f, - 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, - 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, - 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, - 0xae, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, - 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, - 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2f, 0x73, 0x74, 0x6f, - 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, - 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, - 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xb1, 0x01, 0x0a, + 0x73, 0x65, 0x18, 0xaf, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, + 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x30, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0xaf, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, - 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, - 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x30, - 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, - 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, - 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x90, 0x01, 0x0a, 0x25, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xb0, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x45, 0x73, - 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, - 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x25, 0x65, 0x73, - 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, - 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x93, 0x01, 0x0a, 0x26, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, - 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, - 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xb1, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x26, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x65, 0x12, 0x90, 0x01, 0x0a, 0x25, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xb0, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x45, + 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, + 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x25, 0x65, + 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, + 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x93, 0x01, 0x0a, 0x26, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, + 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, + 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, + 0xb1, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x23, 0x6e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x18, 0xb2, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, - 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x23, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, - 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x6e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, - 0xb3, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x26, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x23, 0x6e, + 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0xb2, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, + 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x23, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, + 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x6e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0xb3, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, + 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x24, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x24, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, - 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x22, 0x76, 0x69, 0x72, 0x74, 0x75, - 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xb4, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, 0x76, 0x69, - 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x6f, 0x0a, 0x1a, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xb5, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x79, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x72, 0x0a, 0x1b, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x22, 0x76, 0x69, 0x72, 0x74, + 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xb4, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, 0x76, + 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x6f, 0x0a, 0x1a, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, + 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0xb5, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x79, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x72, 0x0a, 0x1b, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0xb6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0xb6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x1d, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xb7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, 0x42, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x1d, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x1d, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x7b, 0x0a, 0x1e, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0xb8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x67, 0x65, - 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x1d, - 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xb9, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, - 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7b, 0x0a, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xb7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x1d, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x7b, 0x0a, 0x1e, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, + 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0xb8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x67, + 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, + 0x1d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xb9, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xba, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x1c, 0x6e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0xbb, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1c, 0x6e, 0x65, - 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x8a, 0x01, 0x0a, 0x23, 0x67, - 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0xbc, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, - 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x23, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, - 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x67, 0x65, 0x74, 0x4d, - 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0xbd, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7b, 0x0a, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xba, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x1c, 0x6e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xbb, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1c, 0x6e, + 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x8a, 0x01, 0x0a, 0x23, + 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, + 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0xbc, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, + 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x23, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x67, 0x65, 0x74, + 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0xbd, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x24, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x24, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x43, 0x6f, - 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, - 0xbe, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x14, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x69, - 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, - 0xbf, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x15, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x20, 0x67, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x43, + 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x18, 0xbe, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x14, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x43, 0x6f, + 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0xbf, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x15, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x20, 0x67, 0x65, + 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, + 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xc0, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x20, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xc0, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x20, 0x67, 0x65, 0x74, 0x41, - 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, - 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x84, 0x01, 0x0a, - 0x21, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0xc1, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, - 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x21, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, + 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x84, 0x01, + 0x0a, 0x21, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x23, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, - 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, - 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xc2, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, - 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x23, 0x67, 0x65, 0x74, - 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, - 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc3, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, + 0x6e, 0x73, 0x65, 0x18, 0xc1, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, + 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x21, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x23, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, + 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, + 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xc2, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x23, 0x67, 0x65, + 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, + 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, + 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, + 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc3, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, + 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, + 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x24, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x24, 0x67, 0x65, 0x74, 0x41, - 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, - 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x75, 0x0a, 0x1c, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x18, 0xc4, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1c, 0x67, 0x65, 0x74, 0x41, 0x63, - 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x78, 0x0a, 0x1d, 0x67, 0x65, 0x74, 0x41, 0x63, - 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc5, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, + 0x65, 0x12, 0x75, 0x0a, 0x1c, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, + 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x18, 0xc4, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, + 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1c, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, - 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x1d, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, - 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0xc6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, - 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, + 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x78, 0x0a, 0x1d, 0x67, 0x65, 0x74, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, + 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc5, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, + 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, + 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x1d, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, + 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, + 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x18, 0xc6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, + 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x1e, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x7e, 0x0a, 0x1f, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0xc7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, + 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1f, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7e, - 0x0a, 0x1f, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0xc7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, - 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1f, 0x67, - 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, - 0x01, 0x0a, 0x20, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, + 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x81, 0x01, 0x0a, 0x20, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x18, 0xc8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, + 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x20, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0xc8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x20, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x84, 0x01, 0x0a, 0x21, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc9, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x33, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, - 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x21, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x84, 0x01, 0x0a, 0x21, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, - 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x67, 0x65, 0x74, - 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xca, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x0c, 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x48, 0x0a, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0xcb, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x67, 0x65, 0x74, - 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0d, 0x67, 0x65, - 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xcc, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, - 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x0e, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xcd, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, + 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc9, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x33, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, + 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, + 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x21, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, + 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x23, 0x67, + 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0xca, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, + 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, + 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x23, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x67, 0x65, 0x74, 0x49, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, + 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0xcb, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x0e, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xce, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x6f, 0x0a, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xcf, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x00, 0x52, 0x24, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x1c, 0x67, 0x65, 0x74, 0x49, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xcc, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x1c, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x78, + 0x0a, 0x1d, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, + 0xcd, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x67, 0x65, 0x74, 0x49, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x67, 0x65, 0x74, 0x49, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, + 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xce, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, + 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, + 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7e, 0x0a, 0x1f, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xcf, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, + 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x1f, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, + 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xd0, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0c, + 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0d, + 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xd1, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xd2, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x4b, 0x0a, 0x0e, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0xd3, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x67, + 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, + 0x19, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xd4, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, + 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x19, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6f, 0x0a, 0x1a, 0x67, + 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xd5, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, + 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x1a, + 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xd6, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, + 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x72, 0x0a, + 0x1b, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xd7, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x6f, 0x0a, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xd0, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x72, 0x0a, 0x1b, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0xd1, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x32, 0x50, 0x0a, 0x03, 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, - 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, - 0x30, 0x01, 0x32, 0x50, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, - 0x28, 0x01, 0x30, 0x01, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, - 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x32, 0x50, 0x0a, 0x03, + 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0x50, + 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, + 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, + 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, + 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3325,14 +3457,20 @@ var file_messages_proto_goTypes = []interface{}{ (*GetAcceptingBlocksOfTxsResponseMessage)(nil), // 137: protowire.GetAcceptingBlocksOfTxsResponseMessage (*GetIncludingBlockHashOfTxRequestMessage)(nil), // 138: protowire.GetIncludingBlockHashOfTxRequestMessage (*GetIncludingBlockHashOfTxResponseMessage)(nil), // 139: protowire.GetIncludingBlockHashOfTxResponseMessage - (*GetTxRequestMessage)(nil), // 140: protowire.GetTxRequestMessage - (*GetTxResponseMessage)(nil), // 141: protowire.GetTxResponseMessage - (*GetTxsRequestMessage)(nil), // 142: protowire.GetTxsRequestMessage - (*GetTxsResponseMessage)(nil), // 143: protowire.GetTxsResponseMessage - (*GetTxConfirmationsRequestMessage)(nil), // 144: protowire.GetTxConfirmationsRequestMessage - (*GetTxConfirmationsResponseMessage)(nil), // 145: protowire.GetTxConfirmationsResponseMessage - (*GetTxsConfirmationsRequestMessage)(nil), // 146: protowire.GetTxsConfirmationsRequestMessage - (*GetTxsConfirmationsResponseMessage)(nil), // 147: protowire.GetTxsConfirmationsResponseMessage + (*GetIncludingBlockHashesOfTxsRequestMessage)(nil), // 140: protowire.GetIncludingBlockHashesOfTxsRequestMessage + (*GetIncludingBlockHashesOfTxsResponseMessage)(nil), // 141: protowire.GetIncludingBlockHashesOfTxsResponseMessage + (*GetIncludingBlockOfTxRequestMessage)(nil), // 142: protowire.GetIncludingBlockOfTxRequestMessage + (*GetIncludingBlockOfTxResponseMessage)(nil), // 143: protowire.GetIncludingBlockOfTxResponseMessage + (*GetIncludingBlocksOfTxsRequestMessage)(nil), // 144: protowire.GetIncludingBlocksOfTxsRequestMessage + (*GetIncludingBlocksOfTxsResponseMessage)(nil), // 145: protowire.GetIncludingBlocksOfTxsResponseMessage + (*GetTxRequestMessage)(nil), // 146: protowire.GetTxRequestMessage + (*GetTxResponseMessage)(nil), // 147: protowire.GetTxResponseMessage + (*GetTxsRequestMessage)(nil), // 148: protowire.GetTxsRequestMessage + (*GetTxsResponseMessage)(nil), // 149: protowire.GetTxsResponseMessage + (*GetTxConfirmationsRequestMessage)(nil), // 150: protowire.GetTxConfirmationsRequestMessage + (*GetTxConfirmationsResponseMessage)(nil), // 151: protowire.GetTxConfirmationsResponseMessage + (*GetTxsConfirmationsRequestMessage)(nil), // 152: protowire.GetTxsConfirmationsRequestMessage + (*GetTxsConfirmationsResponseMessage)(nil), // 153: protowire.GetTxsConfirmationsResponseMessage } var file_messages_proto_depIdxs = []int32{ 1, // 0: protowire.KaspadMessage.addresses:type_name -> protowire.AddressesMessage @@ -3475,23 +3613,29 @@ var file_messages_proto_depIdxs = []int32{ 137, // 137: protowire.KaspadMessage.getAcceptingBlocksOfTxsResponse:type_name -> protowire.GetAcceptingBlocksOfTxsResponseMessage 138, // 138: protowire.KaspadMessage.getIncludingBlockHashOfTxRequest:type_name -> protowire.GetIncludingBlockHashOfTxRequestMessage 139, // 139: protowire.KaspadMessage.getIncludingBlockHashOfTxResponse:type_name -> protowire.GetIncludingBlockHashOfTxResponseMessage - 140, // 140: protowire.KaspadMessage.getTxRequest:type_name -> protowire.GetTxRequestMessage - 141, // 141: protowire.KaspadMessage.getTxResponse:type_name -> protowire.GetTxResponseMessage - 142, // 142: protowire.KaspadMessage.getTxsRequest:type_name -> protowire.GetTxsRequestMessage - 143, // 143: protowire.KaspadMessage.getTxsResponse:type_name -> protowire.GetTxsResponseMessage - 144, // 144: protowire.KaspadMessage.getTxConfirmationsRequest:type_name -> protowire.GetTxConfirmationsRequestMessage - 145, // 145: protowire.KaspadMessage.getTxConfirmationsResponse:type_name -> protowire.GetTxConfirmationsResponseMessage - 146, // 146: protowire.KaspadMessage.getTxsConfirmationsRequest:type_name -> protowire.GetTxsConfirmationsRequestMessage - 147, // 147: protowire.KaspadMessage.getTxsConfirmationsResponse:type_name -> protowire.GetTxsConfirmationsResponseMessage - 0, // 148: protowire.P2P.MessageStream:input_type -> protowire.KaspadMessage - 0, // 149: protowire.RPC.MessageStream:input_type -> protowire.KaspadMessage - 0, // 150: protowire.P2P.MessageStream:output_type -> protowire.KaspadMessage - 0, // 151: protowire.RPC.MessageStream:output_type -> protowire.KaspadMessage - 150, // [150:152] is the sub-list for method output_type - 148, // [148:150] is the sub-list for method input_type - 148, // [148:148] is the sub-list for extension type_name - 148, // [148:148] is the sub-list for extension extendee - 0, // [0:148] is the sub-list for field type_name + 140, // 140: protowire.KaspadMessage.getIncludingBlockHashesOfTxsRequest:type_name -> protowire.GetIncludingBlockHashesOfTxsRequestMessage + 141, // 141: protowire.KaspadMessage.getIncludingBlockHashesOfTxsResponse:type_name -> protowire.GetIncludingBlockHashesOfTxsResponseMessage + 142, // 142: protowire.KaspadMessage.getIncludingBlockOfTxRequest:type_name -> protowire.GetIncludingBlockOfTxRequestMessage + 143, // 143: protowire.KaspadMessage.getIncludingBlockOfTxResponse:type_name -> protowire.GetIncludingBlockOfTxResponseMessage + 144, // 144: protowire.KaspadMessage.getIncludingBlocksOfTxsRequest:type_name -> protowire.GetIncludingBlocksOfTxsRequestMessage + 145, // 145: protowire.KaspadMessage.getIncludingBlocksOfTxsResponse:type_name -> protowire.GetIncludingBlocksOfTxsResponseMessage + 146, // 146: protowire.KaspadMessage.getTxRequest:type_name -> protowire.GetTxRequestMessage + 147, // 147: protowire.KaspadMessage.getTxResponse:type_name -> protowire.GetTxResponseMessage + 148, // 148: protowire.KaspadMessage.getTxsRequest:type_name -> protowire.GetTxsRequestMessage + 149, // 149: protowire.KaspadMessage.getTxsResponse:type_name -> protowire.GetTxsResponseMessage + 150, // 150: protowire.KaspadMessage.getTxConfirmationsRequest:type_name -> protowire.GetTxConfirmationsRequestMessage + 151, // 151: protowire.KaspadMessage.getTxConfirmationsResponse:type_name -> protowire.GetTxConfirmationsResponseMessage + 152, // 152: protowire.KaspadMessage.getTxsConfirmationsRequest:type_name -> protowire.GetTxsConfirmationsRequestMessage + 153, // 153: protowire.KaspadMessage.getTxsConfirmationsResponse:type_name -> protowire.GetTxsConfirmationsResponseMessage + 0, // 154: protowire.P2P.MessageStream:input_type -> protowire.KaspadMessage + 0, // 155: protowire.RPC.MessageStream:input_type -> protowire.KaspadMessage + 0, // 156: protowire.P2P.MessageStream:output_type -> protowire.KaspadMessage + 0, // 157: protowire.RPC.MessageStream:output_type -> protowire.KaspadMessage + 156, // [156:158] is the sub-list for method output_type + 154, // [154:156] is the sub-list for method input_type + 154, // [154:154] is the sub-list for extension type_name + 154, // [154:154] is the sub-list for extension extendee + 0, // [0:154] is the sub-list for field type_name } func init() { file_messages_proto_init() } @@ -3656,6 +3800,12 @@ func file_messages_proto_init() { (*KaspadMessage_GetAcceptingBlocksOfTxsResponse)(nil), (*KaspadMessage_GetIncludingBlockHashOfTxRequest)(nil), (*KaspadMessage_GetIncludingBlockHashOfTxResponse)(nil), + (*KaspadMessage_GetIncludingBlockHashesOfTxsRequest)(nil), + (*KaspadMessage_GetIncludingBlockHashesOfTxsResponse)(nil), + (*KaspadMessage_GetIncludingBlockOfTxRequest)(nil), + (*KaspadMessage_GetIncludingBlockOfTxResponse)(nil), + (*KaspadMessage_GetIncludingBlocksOfTxsRequest)(nil), + (*KaspadMessage_GetIncludingBlocksOfTxsResponse)(nil), (*KaspadMessage_GetTxRequest)(nil), (*KaspadMessage_GetTxResponse)(nil), (*KaspadMessage_GetTxsRequest)(nil), diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto index 5e01760dfd..3882909697 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto @@ -150,14 +150,20 @@ message KaspadMessage { GetAcceptingBlocksOfTxsResponseMessage getAcceptingBlocksOfTxsResponse = 1095; GetIncludingBlockHashOfTxRequestMessage getIncludingBlockHashOfTxRequest = 1096; GetIncludingBlockHashOfTxResponseMessage getIncludingBlockHashOfTxResponse = 1097; - GetTxRequestMessage getTxRequest = 1098; - GetTxResponseMessage getTxResponse = 1099; - GetTxsRequestMessage getTxsRequest = 1100; - GetTxsResponseMessage getTxsResponse = 1101; - GetTxConfirmationsRequestMessage getTxConfirmationsRequest = 1102; - GetTxConfirmationsResponseMessage getTxConfirmationsResponse = 1103; - GetTxsConfirmationsRequestMessage getTxsConfirmationsRequest = 1104; - GetTxsConfirmationsResponseMessage getTxsConfirmationsResponse = 1105; + GetIncludingBlockHashesOfTxsRequestMessage getIncludingBlockHashesOfTxsRequest = 1098; + GetIncludingBlockHashesOfTxsResponseMessage getIncludingBlockHashesOfTxsResponse = 1099; + GetIncludingBlockOfTxRequestMessage getIncludingBlockOfTxRequest = 1100; + GetIncludingBlockOfTxResponseMessage getIncludingBlockOfTxResponse = 1101; + GetIncludingBlocksOfTxsRequestMessage getIncludingBlocksOfTxsRequest = 1102; + GetIncludingBlocksOfTxsResponseMessage getIncludingBlocksOfTxsResponse = 1103; + GetTxRequestMessage getTxRequest = 1104; + GetTxResponseMessage getTxResponse = 1105; + GetTxsRequestMessage getTxsRequest = 1106; + GetTxsResponseMessage getTxsResponse = 1107; + GetTxConfirmationsRequestMessage getTxConfirmationsRequest = 1108; + GetTxConfirmationsResponseMessage getTxConfirmationsResponse = 1109; + GetTxsConfirmationsRequestMessage getTxsConfirmationsRequest = 1110; + GetTxsConfirmationsResponseMessage getTxsConfirmationsResponse = 1111; } } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md index 46025b1aac..62f0965cf2 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md @@ -114,9 +114,9 @@ - [GetMempoolEntriesByAddressesResponseMessage](#protowire.GetMempoolEntriesByAddressesResponseMessage) - [GetCoinSupplyRequestMessage](#protowire.GetCoinSupplyRequestMessage) - [GetCoinSupplyResponseMessage](#protowire.GetCoinSupplyResponseMessage) - - [TxIDConfirmationsPair](#protowire.TxIDConfirmationsPair) - - [TxIDBlockHashPair](#protowire.TxIDBlockHashPair) - - [TxIDBlockPair](#protowire.TxIDBlockPair) + - [RpcTxIDConfirmationsPair](#protowire.RpcTxIDConfirmationsPair) + - [RpcTxIDBlockHashPair](#protowire.RpcTxIDBlockHashPair) + - [RpcTxIDBlockPair](#protowire.RpcTxIDBlockPair) - [GetAcceptingBlockHashesOfTxsRequestMessage](#protowire.GetAcceptingBlockHashesOfTxsRequestMessage) - [GetAcceptingBlockHashesOfTxsResponseMessage](#protowire.GetAcceptingBlockHashesOfTxsResponseMessage) - [GetAcceptingBlockOfTxRequestMessage](#protowire.GetAcceptingBlockOfTxRequestMessage) @@ -125,6 +125,12 @@ - [GetAcceptingBlocksOfTxsResponseMessage](#protowire.GetAcceptingBlocksOfTxsResponseMessage) - [GetIncludingBlockHashOfTxRequestMessage](#protowire.GetIncludingBlockHashOfTxRequestMessage) - [GetIncludingBlockHashOfTxResponseMessage](#protowire.GetIncludingBlockHashOfTxResponseMessage) + - [GetIncludingBlockHashesOfTxsRequestMessage](#protowire.GetIncludingBlockHashesOfTxsRequestMessage) + - [GetIncludingBlockHashesOfTxsResponseMessage](#protowire.GetIncludingBlockHashesOfTxsResponseMessage) + - [GetIncludingBlockOfTxRequestMessage](#protowire.GetIncludingBlockOfTxRequestMessage) + - [GetIncludingBlockOfTxResponseMessage](#protowire.GetIncludingBlockOfTxResponseMessage) + - [GetIncludingBlocksOfTxsRequestMessage](#protowire.GetIncludingBlocksOfTxsRequestMessage) + - [GetIncludingBlocksOfTxsResponseMessage](#protowire.GetIncludingBlocksOfTxsResponseMessage) - [GetTxRequestMessage](#protowire.GetTxRequestMessage) - [GetTxResponseMessage](#protowire.GetTxResponseMessage) - [GetTxsRequestMessage](#protowire.GetTxsRequestMessage) @@ -1910,9 +1916,9 @@ See NotifyNewBlockTemplateRequestMessage - + -### TxIDConfirmationsPair +### RpcTxIDConfirmationsPair @@ -1926,9 +1932,9 @@ See NotifyNewBlockTemplateRequestMessage - + -### TxIDBlockHashPair +### RpcTxIDBlockHashPair @@ -1942,9 +1948,9 @@ See NotifyNewBlockTemplateRequestMessage - + -### TxIDBlockPair +### RpcTxIDBlockPair @@ -1981,7 +1987,7 @@ See NotifyNewBlockTemplateRequestMessage | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| txIDBlockHashPairs | [TxIDBlockHashPair](#protowire.TxIDBlockHashPair) | repeated | | +| txIDBlockHashPairs | [RpcTxIDBlockHashPair](#protowire.RpcTxIDBlockHashPair) | repeated | | | error | [RPCError](#protowire.RPCError) | | | @@ -2045,7 +2051,7 @@ See NotifyNewBlockTemplateRequestMessage | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| txIDBlockPairs | [TxIDBlockPair](#protowire.TxIDBlockPair) | repeated | | +| txIDBlockPairs | [RpcTxIDBlockPair](#protowire.RpcTxIDBlockPair) | repeated | | | error | [RPCError](#protowire.RPCError) | | | @@ -2084,6 +2090,101 @@ See NotifyNewBlockTemplateRequestMessage + + +### GetIncludingBlockHashesOfTxsRequestMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txIDs | [string](#string) | repeated | | + + + + + + + + +### GetIncludingBlockHashesOfTxsResponseMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txIDBlockHashPairs | [RpcTxIDBlockHashPair](#protowire.RpcTxIDBlockHashPair) | repeated | | +| error | [RPCError](#protowire.RPCError) | | | + + + + + + + + +### GetIncludingBlockOfTxRequestMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txID | [string](#string) | | | +| includeTransactions | [bool](#bool) | | | + + + + + + + + +### GetIncludingBlockOfTxResponseMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| block | [RpcBlock](#protowire.RpcBlock) | | | +| error | [RPCError](#protowire.RPCError) | | | + + + + + + + + +### GetIncludingBlocksOfTxsRequestMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txIDs | [string](#string) | repeated | | +| includeTransactions | [bool](#bool) | | | + + + + + + + + +### GetIncludingBlocksOfTxsResponseMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txIDBlockPairs | [RpcTxIDBlockPair](#protowire.RpcTxIDBlockPair) | repeated | | +| error | [RPCError](#protowire.RPCError) | | | + + + + + + ### GetTxRequestMessage @@ -2200,7 +2301,7 @@ See NotifyNewBlockTemplateRequestMessage | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| txIDConfirmationsPairs | [TxIDConfirmationsPair](#protowire.TxIDConfirmationsPair) | repeated | | +| txIDConfirmationsPairs | [RpcTxIDConfirmationsPair](#protowire.RpcTxIDConfirmationsPair) | repeated | | | error | [RPCError](#protowire.RPCError) | | | diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go index 56069c0c85..3a713a2759 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go @@ -6804,6 +6804,328 @@ func (x *GetIncludingBlockHashOfTxResponseMessage) GetError() *RPCError { return nil } +type GetIncludingBlockHashesOfTxsRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxIDs []string `protobuf:"bytes,1,rep,name=txIDs,proto3" json:"txIDs,omitempty"` +} + +func (x *GetIncludingBlockHashesOfTxsRequestMessage) Reset() { + *x = GetIncludingBlockHashesOfTxsRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[121] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetIncludingBlockHashesOfTxsRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetIncludingBlockHashesOfTxsRequestMessage) ProtoMessage() {} + +func (x *GetIncludingBlockHashesOfTxsRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[121] + 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 GetIncludingBlockHashesOfTxsRequestMessage.ProtoReflect.Descriptor instead. +func (*GetIncludingBlockHashesOfTxsRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{121} +} + +func (x *GetIncludingBlockHashesOfTxsRequestMessage) GetTxIDs() []string { + if x != nil { + return x.TxIDs + } + return nil +} + +type GetIncludingBlockHashesOfTxsResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxIDBlockHashPairs []*RpcTxIDBlockHashPair `protobuf:"bytes,1,rep,name=txIDBlockHashPairs,proto3" json:"txIDBlockHashPairs,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *GetIncludingBlockHashesOfTxsResponseMessage) Reset() { + *x = GetIncludingBlockHashesOfTxsResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[122] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetIncludingBlockHashesOfTxsResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetIncludingBlockHashesOfTxsResponseMessage) ProtoMessage() {} + +func (x *GetIncludingBlockHashesOfTxsResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[122] + 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 GetIncludingBlockHashesOfTxsResponseMessage.ProtoReflect.Descriptor instead. +func (*GetIncludingBlockHashesOfTxsResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{122} +} + +func (x *GetIncludingBlockHashesOfTxsResponseMessage) GetTxIDBlockHashPairs() []*RpcTxIDBlockHashPair { + if x != nil { + return x.TxIDBlockHashPairs + } + return nil +} + +func (x *GetIncludingBlockHashesOfTxsResponseMessage) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + +type GetIncludingBlockOfTxRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` + IncludeTransactions bool `protobuf:"varint,2,opt,name=includeTransactions,proto3" json:"includeTransactions,omitempty"` +} + +func (x *GetIncludingBlockOfTxRequestMessage) Reset() { + *x = GetIncludingBlockOfTxRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[123] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetIncludingBlockOfTxRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetIncludingBlockOfTxRequestMessage) ProtoMessage() {} + +func (x *GetIncludingBlockOfTxRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[123] + 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 GetIncludingBlockOfTxRequestMessage.ProtoReflect.Descriptor instead. +func (*GetIncludingBlockOfTxRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{123} +} + +func (x *GetIncludingBlockOfTxRequestMessage) GetTxID() string { + if x != nil { + return x.TxID + } + return "" +} + +func (x *GetIncludingBlockOfTxRequestMessage) GetIncludeTransactions() bool { + if x != nil { + return x.IncludeTransactions + } + return false +} + +type GetIncludingBlockOfTxResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Block *RpcBlock `protobuf:"bytes,1,opt,name=block,proto3" json:"block,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *GetIncludingBlockOfTxResponseMessage) Reset() { + *x = GetIncludingBlockOfTxResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[124] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetIncludingBlockOfTxResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetIncludingBlockOfTxResponseMessage) ProtoMessage() {} + +func (x *GetIncludingBlockOfTxResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[124] + 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 GetIncludingBlockOfTxResponseMessage.ProtoReflect.Descriptor instead. +func (*GetIncludingBlockOfTxResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{124} +} + +func (x *GetIncludingBlockOfTxResponseMessage) GetBlock() *RpcBlock { + if x != nil { + return x.Block + } + return nil +} + +func (x *GetIncludingBlockOfTxResponseMessage) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + +type GetIncludingBlocksOfTxsRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxIDs []string `protobuf:"bytes,1,rep,name=txIDs,proto3" json:"txIDs,omitempty"` + IncludeTransactions bool `protobuf:"varint,2,opt,name=includeTransactions,proto3" json:"includeTransactions,omitempty"` +} + +func (x *GetIncludingBlocksOfTxsRequestMessage) Reset() { + *x = GetIncludingBlocksOfTxsRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[125] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetIncludingBlocksOfTxsRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetIncludingBlocksOfTxsRequestMessage) ProtoMessage() {} + +func (x *GetIncludingBlocksOfTxsRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[125] + 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 GetIncludingBlocksOfTxsRequestMessage.ProtoReflect.Descriptor instead. +func (*GetIncludingBlocksOfTxsRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{125} +} + +func (x *GetIncludingBlocksOfTxsRequestMessage) GetTxIDs() []string { + if x != nil { + return x.TxIDs + } + return nil +} + +func (x *GetIncludingBlocksOfTxsRequestMessage) GetIncludeTransactions() bool { + if x != nil { + return x.IncludeTransactions + } + return false +} + +type GetIncludingBlocksOfTxsResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxIDBlockPairs []*RpcTxIDBlockPair `protobuf:"bytes,1,rep,name=txIDBlockPairs,proto3" json:"txIDBlockPairs,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *GetIncludingBlocksOfTxsResponseMessage) Reset() { + *x = GetIncludingBlocksOfTxsResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[126] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetIncludingBlocksOfTxsResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetIncludingBlocksOfTxsResponseMessage) ProtoMessage() {} + +func (x *GetIncludingBlocksOfTxsResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[126] + 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 GetIncludingBlocksOfTxsResponseMessage.ProtoReflect.Descriptor instead. +func (*GetIncludingBlocksOfTxsResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{126} +} + +func (x *GetIncludingBlocksOfTxsResponseMessage) GetTxIDBlockPairs() []*RpcTxIDBlockPair { + if x != nil { + return x.TxIDBlockPairs + } + return nil +} + +func (x *GetIncludingBlocksOfTxsResponseMessage) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + type GetTxRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6815,7 +7137,7 @@ type GetTxRequestMessage struct { func (x *GetTxRequestMessage) Reset() { *x = GetTxRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[121] + mi := &file_rpc_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6828,7 +7150,7 @@ func (x *GetTxRequestMessage) String() string { func (*GetTxRequestMessage) ProtoMessage() {} func (x *GetTxRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[121] + mi := &file_rpc_proto_msgTypes[127] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6841,7 +7163,7 @@ func (x *GetTxRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTxRequestMessage.ProtoReflect.Descriptor instead. func (*GetTxRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{121} + return file_rpc_proto_rawDescGZIP(), []int{127} } func (x *GetTxRequestMessage) GetTxID() string { @@ -6863,7 +7185,7 @@ type GetTxResponseMessage struct { func (x *GetTxResponseMessage) Reset() { *x = GetTxResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[122] + mi := &file_rpc_proto_msgTypes[128] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6876,7 +7198,7 @@ func (x *GetTxResponseMessage) String() string { func (*GetTxResponseMessage) ProtoMessage() {} func (x *GetTxResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[122] + mi := &file_rpc_proto_msgTypes[128] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6889,7 +7211,7 @@ func (x *GetTxResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTxResponseMessage.ProtoReflect.Descriptor instead. func (*GetTxResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{122} + return file_rpc_proto_rawDescGZIP(), []int{128} } func (x *GetTxResponseMessage) GetTransaction() *RpcTransaction { @@ -6917,7 +7239,7 @@ type GetTxsRequestMessage struct { func (x *GetTxsRequestMessage) Reset() { *x = GetTxsRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[123] + mi := &file_rpc_proto_msgTypes[129] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6930,7 +7252,7 @@ func (x *GetTxsRequestMessage) String() string { func (*GetTxsRequestMessage) ProtoMessage() {} func (x *GetTxsRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[123] + mi := &file_rpc_proto_msgTypes[129] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6943,7 +7265,7 @@ func (x *GetTxsRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTxsRequestMessage.ProtoReflect.Descriptor instead. func (*GetTxsRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{123} + return file_rpc_proto_rawDescGZIP(), []int{129} } func (x *GetTxsRequestMessage) GetTxIDs() []string { @@ -6965,7 +7287,7 @@ type GetTxsResponseMessage struct { func (x *GetTxsResponseMessage) Reset() { *x = GetTxsResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[124] + mi := &file_rpc_proto_msgTypes[130] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6978,7 +7300,7 @@ func (x *GetTxsResponseMessage) String() string { func (*GetTxsResponseMessage) ProtoMessage() {} func (x *GetTxsResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[124] + mi := &file_rpc_proto_msgTypes[130] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6991,7 +7313,7 @@ func (x *GetTxsResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTxsResponseMessage.ProtoReflect.Descriptor instead. func (*GetTxsResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{124} + return file_rpc_proto_rawDescGZIP(), []int{130} } func (x *GetTxsResponseMessage) GetTransactions() []*RpcTransaction { @@ -7019,7 +7341,7 @@ type GetTxConfirmationsRequestMessage struct { func (x *GetTxConfirmationsRequestMessage) Reset() { *x = GetTxConfirmationsRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[125] + mi := &file_rpc_proto_msgTypes[131] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7032,7 +7354,7 @@ func (x *GetTxConfirmationsRequestMessage) String() string { func (*GetTxConfirmationsRequestMessage) ProtoMessage() {} func (x *GetTxConfirmationsRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[125] + mi := &file_rpc_proto_msgTypes[131] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7045,7 +7367,7 @@ func (x *GetTxConfirmationsRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTxConfirmationsRequestMessage.ProtoReflect.Descriptor instead. func (*GetTxConfirmationsRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{125} + return file_rpc_proto_rawDescGZIP(), []int{131} } func (x *GetTxConfirmationsRequestMessage) GetTxID() string { @@ -7067,7 +7389,7 @@ type GetTxConfirmationsResponseMessage struct { func (x *GetTxConfirmationsResponseMessage) Reset() { *x = GetTxConfirmationsResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[126] + mi := &file_rpc_proto_msgTypes[132] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7080,7 +7402,7 @@ func (x *GetTxConfirmationsResponseMessage) String() string { func (*GetTxConfirmationsResponseMessage) ProtoMessage() {} func (x *GetTxConfirmationsResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[126] + mi := &file_rpc_proto_msgTypes[132] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7093,7 +7415,7 @@ func (x *GetTxConfirmationsResponseMessage) ProtoReflect() protoreflect.Message // Deprecated: Use GetTxConfirmationsResponseMessage.ProtoReflect.Descriptor instead. func (*GetTxConfirmationsResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{126} + return file_rpc_proto_rawDescGZIP(), []int{132} } func (x *GetTxConfirmationsResponseMessage) GetConfirmations() int64 { @@ -7121,7 +7443,7 @@ type GetTxsConfirmationsRequestMessage struct { func (x *GetTxsConfirmationsRequestMessage) Reset() { *x = GetTxsConfirmationsRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[127] + mi := &file_rpc_proto_msgTypes[133] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7134,7 +7456,7 @@ func (x *GetTxsConfirmationsRequestMessage) String() string { func (*GetTxsConfirmationsRequestMessage) ProtoMessage() {} func (x *GetTxsConfirmationsRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[127] + mi := &file_rpc_proto_msgTypes[133] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7147,7 +7469,7 @@ func (x *GetTxsConfirmationsRequestMessage) ProtoReflect() protoreflect.Message // Deprecated: Use GetTxsConfirmationsRequestMessage.ProtoReflect.Descriptor instead. func (*GetTxsConfirmationsRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{127} + return file_rpc_proto_rawDescGZIP(), []int{133} } func (x *GetTxsConfirmationsRequestMessage) GetTxIDs() []string { @@ -7169,7 +7491,7 @@ type GetTxsConfirmationsResponseMessage struct { func (x *GetTxsConfirmationsResponseMessage) Reset() { *x = GetTxsConfirmationsResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[128] + mi := &file_rpc_proto_msgTypes[134] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7182,7 +7504,7 @@ func (x *GetTxsConfirmationsResponseMessage) String() string { func (*GetTxsConfirmationsResponseMessage) ProtoMessage() {} func (x *GetTxsConfirmationsResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[128] + mi := &file_rpc_proto_msgTypes[134] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7195,7 +7517,7 @@ func (x *GetTxsConfirmationsResponseMessage) ProtoReflect() protoreflect.Message // Deprecated: Use GetTxsConfirmationsResponseMessage.ProtoReflect.Descriptor instead. func (*GetTxsConfirmationsResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{128} + return file_rpc_proto_rawDescGZIP(), []int{134} } func (x *GetTxsConfirmationsResponseMessage) GetTxIDConfirmationsPairs() []*RpcTxIDConfirmationsPair { @@ -8098,57 +8420,104 @@ var file_rpc_proto_rawDesc = []byte{ 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x29, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, - 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x7f, 0x0a, - 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2c, - 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0x82, 0x01, 0x0a, - 0x15, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x36, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x75, 0x0a, 0x21, 0x47, 0x65, 0x74, - 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x24, - 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0x39, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0xad, 0x01, 0x0a, 0x22, - 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x5b, 0x0a, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, + 0x6f, 0x72, 0x22, 0x42, 0x0a, 0x2a, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, + 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, + 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x2b, 0x47, 0x65, 0x74, 0x49, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, + 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4f, 0x0a, 0x12, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, + 0x61, 0x69, 0x72, 0x52, 0x12, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, + 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0x6b, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x30, + 0x0a, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x22, 0x7d, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, + 0x6f, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x12, 0x30, + 0x0a, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x22, 0x99, 0x01, 0x0a, 0x26, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, + 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x43, 0x0a, 0x0e, 0x74, + 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, + 0x52, 0x0e, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x73, + 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x29, 0x0a, 0x13, + 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x7f, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x3b, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2c, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, + 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x78, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x3d, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x26, 0x5a, 0x24, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, - 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x36, 0x0a, 0x20, 0x47, + 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x78, 0x49, 0x44, 0x22, 0x75, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x39, 0x0a, 0x21, 0x47, 0x65, + 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, + 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0xad, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5b, 0x0a, 0x16, + 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, + 0x72, 0x52, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, + 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -8164,7 +8533,7 @@ func file_rpc_proto_rawDescGZIP() []byte { } var file_rpc_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 129) +var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 135) var file_rpc_proto_goTypes = []interface{}{ (SubmitBlockResponseMessage_RejectReason)(0), // 0: protowire.SubmitBlockResponseMessage.RejectReason (*RPCError)(nil), // 1: protowire.RPCError @@ -8288,14 +8657,20 @@ var file_rpc_proto_goTypes = []interface{}{ (*GetAcceptingBlocksOfTxsResponseMessage)(nil), // 119: protowire.GetAcceptingBlocksOfTxsResponseMessage (*GetIncludingBlockHashOfTxRequestMessage)(nil), // 120: protowire.GetIncludingBlockHashOfTxRequestMessage (*GetIncludingBlockHashOfTxResponseMessage)(nil), // 121: protowire.GetIncludingBlockHashOfTxResponseMessage - (*GetTxRequestMessage)(nil), // 122: protowire.GetTxRequestMessage - (*GetTxResponseMessage)(nil), // 123: protowire.GetTxResponseMessage - (*GetTxsRequestMessage)(nil), // 124: protowire.GetTxsRequestMessage - (*GetTxsResponseMessage)(nil), // 125: protowire.GetTxsResponseMessage - (*GetTxConfirmationsRequestMessage)(nil), // 126: protowire.GetTxConfirmationsRequestMessage - (*GetTxConfirmationsResponseMessage)(nil), // 127: protowire.GetTxConfirmationsResponseMessage - (*GetTxsConfirmationsRequestMessage)(nil), // 128: protowire.GetTxsConfirmationsRequestMessage - (*GetTxsConfirmationsResponseMessage)(nil), // 129: protowire.GetTxsConfirmationsResponseMessage + (*GetIncludingBlockHashesOfTxsRequestMessage)(nil), // 122: protowire.GetIncludingBlockHashesOfTxsRequestMessage + (*GetIncludingBlockHashesOfTxsResponseMessage)(nil), // 123: protowire.GetIncludingBlockHashesOfTxsResponseMessage + (*GetIncludingBlockOfTxRequestMessage)(nil), // 124: protowire.GetIncludingBlockOfTxRequestMessage + (*GetIncludingBlockOfTxResponseMessage)(nil), // 125: protowire.GetIncludingBlockOfTxResponseMessage + (*GetIncludingBlocksOfTxsRequestMessage)(nil), // 126: protowire.GetIncludingBlocksOfTxsRequestMessage + (*GetIncludingBlocksOfTxsResponseMessage)(nil), // 127: protowire.GetIncludingBlocksOfTxsResponseMessage + (*GetTxRequestMessage)(nil), // 128: protowire.GetTxRequestMessage + (*GetTxResponseMessage)(nil), // 129: protowire.GetTxResponseMessage + (*GetTxsRequestMessage)(nil), // 130: protowire.GetTxsRequestMessage + (*GetTxsResponseMessage)(nil), // 131: protowire.GetTxsResponseMessage + (*GetTxConfirmationsRequestMessage)(nil), // 132: protowire.GetTxConfirmationsRequestMessage + (*GetTxConfirmationsResponseMessage)(nil), // 133: protowire.GetTxConfirmationsResponseMessage + (*GetTxsConfirmationsRequestMessage)(nil), // 134: protowire.GetTxsConfirmationsRequestMessage + (*GetTxsConfirmationsResponseMessage)(nil), // 135: protowire.GetTxsConfirmationsResponseMessage } var file_rpc_proto_depIdxs = []int32{ 3, // 0: protowire.RpcBlock.header:type_name -> protowire.RpcBlockHeader @@ -8383,18 +8758,24 @@ var file_rpc_proto_depIdxs = []int32{ 113, // 82: protowire.GetAcceptingBlocksOfTxsResponseMessage.txIDBlockPairs:type_name -> protowire.RpcTxIDBlockPair 1, // 83: protowire.GetAcceptingBlocksOfTxsResponseMessage.error:type_name -> protowire.RPCError 1, // 84: protowire.GetIncludingBlockHashOfTxResponseMessage.error:type_name -> protowire.RPCError - 6, // 85: protowire.GetTxResponseMessage.transaction:type_name -> protowire.RpcTransaction - 1, // 86: protowire.GetTxResponseMessage.error:type_name -> protowire.RPCError - 6, // 87: protowire.GetTxsResponseMessage.transactions:type_name -> protowire.RpcTransaction - 1, // 88: protowire.GetTxsResponseMessage.error:type_name -> protowire.RPCError - 1, // 89: protowire.GetTxConfirmationsResponseMessage.error:type_name -> protowire.RPCError - 111, // 90: protowire.GetTxsConfirmationsResponseMessage.txIDConfirmationsPairs:type_name -> protowire.RpcTxIDConfirmationsPair - 1, // 91: protowire.GetTxsConfirmationsResponseMessage.error:type_name -> protowire.RPCError - 92, // [92:92] is the sub-list for method output_type - 92, // [92:92] is the sub-list for method input_type - 92, // [92:92] is the sub-list for extension type_name - 92, // [92:92] is the sub-list for extension extendee - 0, // [0:92] is the sub-list for field type_name + 112, // 85: protowire.GetIncludingBlockHashesOfTxsResponseMessage.txIDBlockHashPairs:type_name -> protowire.RpcTxIDBlockHashPair + 1, // 86: protowire.GetIncludingBlockHashesOfTxsResponseMessage.error:type_name -> protowire.RPCError + 2, // 87: protowire.GetIncludingBlockOfTxResponseMessage.block:type_name -> protowire.RpcBlock + 1, // 88: protowire.GetIncludingBlockOfTxResponseMessage.error:type_name -> protowire.RPCError + 113, // 89: protowire.GetIncludingBlocksOfTxsResponseMessage.txIDBlockPairs:type_name -> protowire.RpcTxIDBlockPair + 1, // 90: protowire.GetIncludingBlocksOfTxsResponseMessage.error:type_name -> protowire.RPCError + 6, // 91: protowire.GetTxResponseMessage.transaction:type_name -> protowire.RpcTransaction + 1, // 92: protowire.GetTxResponseMessage.error:type_name -> protowire.RPCError + 6, // 93: protowire.GetTxsResponseMessage.transactions:type_name -> protowire.RpcTransaction + 1, // 94: protowire.GetTxsResponseMessage.error:type_name -> protowire.RPCError + 1, // 95: protowire.GetTxConfirmationsResponseMessage.error:type_name -> protowire.RPCError + 111, // 96: protowire.GetTxsConfirmationsResponseMessage.txIDConfirmationsPairs:type_name -> protowire.RpcTxIDConfirmationsPair + 1, // 97: protowire.GetTxsConfirmationsResponseMessage.error:type_name -> protowire.RPCError + 98, // [98:98] is the sub-list for method output_type + 98, // [98:98] is the sub-list for method input_type + 98, // [98:98] is the sub-list for extension type_name + 98, // [98:98] is the sub-list for extension extendee + 0, // [0:98] is the sub-list for field type_name } func init() { file_rpc_proto_init() } @@ -9856,7 +10237,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[121].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxRequestMessage); i { + switch v := v.(*GetIncludingBlockHashesOfTxsRequestMessage); i { case 0: return &v.state case 1: @@ -9868,7 +10249,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[122].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxResponseMessage); i { + switch v := v.(*GetIncludingBlockHashesOfTxsResponseMessage); i { case 0: return &v.state case 1: @@ -9880,7 +10261,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[123].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxsRequestMessage); i { + switch v := v.(*GetIncludingBlockOfTxRequestMessage); i { case 0: return &v.state case 1: @@ -9892,7 +10273,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[124].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxsResponseMessage); i { + switch v := v.(*GetIncludingBlockOfTxResponseMessage); i { case 0: return &v.state case 1: @@ -9904,7 +10285,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[125].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxConfirmationsRequestMessage); i { + switch v := v.(*GetIncludingBlocksOfTxsRequestMessage); i { case 0: return &v.state case 1: @@ -9916,7 +10297,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[126].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxConfirmationsResponseMessage); i { + switch v := v.(*GetIncludingBlocksOfTxsResponseMessage); i { case 0: return &v.state case 1: @@ -9928,7 +10309,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[127].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxsConfirmationsRequestMessage); i { + switch v := v.(*GetTxRequestMessage); i { case 0: return &v.state case 1: @@ -9940,6 +10321,78 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[128].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[129].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxsRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[130].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxsResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[131].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxConfirmationsRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[132].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxConfirmationsResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[133].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxsConfirmationsRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[134].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetTxsConfirmationsResponseMessage); i { case 0: return &v.state @@ -9958,7 +10411,7 @@ func file_rpc_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_rpc_proto_rawDesc, NumEnums: 1, - NumMessages: 129, + NumMessages: 135, NumExtensions: 0, NumServices: 0, }, diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto index 292dd2b589..6812a99314 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto @@ -791,6 +791,38 @@ message GetIncludingBlockHashOfTxResponseMessage{ RPCError error = 1000; } +message GetIncludingBlockHashesOfTxsRequestMessage{ + repeated string txIDs = 1; +} + +message GetIncludingBlockHashesOfTxsResponseMessage{ + repeated RpcTxIDBlockHashPair txIDBlockHashPairs = 1; + + RPCError error = 1000; +} + +message GetIncludingBlockOfTxRequestMessage{ + string txID = 1; + bool includeTransactions = 2; +} + +message GetIncludingBlockOfTxResponseMessage{ + RpcBlock block = 1; + + RPCError error = 1000; +} + +message GetIncludingBlocksOfTxsRequestMessage{ + repeated string txIDs = 1; + bool includeTransactions = 2; +} + +message GetIncludingBlocksOfTxsResponseMessage{ + repeated RpcTxIDBlockPair txIDBlockPairs = 1; + + RPCError error = 1000; +} + message GetTxRequestMessage{ string txID = 1; } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_block_of_tx.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_block_of_tx.go new file mode 100644 index 0000000000..bd71ae2efc --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_block_of_tx.go @@ -0,0 +1,83 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_GetIncludingBlockOfTxRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetIncludingBlockOfTxRequest") + } + return x.GetIncludingBlockOfTxRequest.toAppMessage() +} + +func (x *KaspadMessage_GetIncludingBlockOfTxRequest) fromAppMessage(message *appmessage.GetIncludingBlockOfTxRequestMessage) error { + x.GetIncludingBlockOfTxRequest = &GetIncludingBlockOfTxRequestMessage{ + TxID: message.TxID, + IncludeTransactions: message.IncludeTransactions, + } + return nil +} + +func (x *GetIncludingBlockOfTxRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetIncludingBlockOfTxRequestMessage is nil") + } + return &appmessage.GetIncludingBlockOfTxRequestMessage{ + TxID: x.TxID, + IncludeTransactions: x.IncludeTransactions, + }, nil +} + +func (x *KaspadMessage_GetIncludingBlockOfTxResponse) toAppMessage() (appmessage.Message, error) { + + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetIncludingBlockOfTxResponse is nil") + } + return x.GetIncludingBlockOfTxResponse.toAppMessage() +} + +func (x *KaspadMessage_GetIncludingBlockOfTxResponse) fromAppMessage(message *appmessage.GetIncludingBlockOfTxResponseMessage) error { + var rpcErr *RPCError + if message.Error != nil { + rpcErr = &RPCError{Message: message.Error.Message} + } + rpcBlock := &RpcBlock{} + + err := rpcBlock.fromAppMessage(message.Block) + if err != nil { + return err + } + x.GetIncludingBlockOfTxResponse = &GetIncludingBlockOfTxResponseMessage{ + Block: rpcBlock, + + Error: rpcErr, + } + return nil +} + +func (x *GetIncludingBlockOfTxResponseMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetIncludingBlockOfTxResponseMessage is nil") + } + rpcErr, err := x.Error.toAppMessage() + // Error is an optional field + if err != nil && !errors.Is(err, errorNil) { + return nil, err + } + + if rpcErr != nil && x.Block != nil { + return nil, errors.New("GetIncludingBlockOfTxResponseMessage contains both an error and a response") + } + + appBlock, err := x.Block.toAppMessage() + if err != nil { + return nil, err + } + + return &appmessage.GetIncludingBlockOfTxResponseMessage{ + Block: appBlock, + Error: rpcErr, + }, nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blockhashes_of_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blockhashes_of_txs.go new file mode 100644 index 0000000000..fafb0c46db --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blockhashes_of_txs.go @@ -0,0 +1,85 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_GetIncludingBlockHashesOfTxsRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetIncludingBlockHashesOfTxsRequest") + } + return x.GetIncludingBlockHashesOfTxsRequest.toAppMessage() +} + +func (x *KaspadMessage_GetIncludingBlockHashesOfTxsRequest) fromAppMessage(message *appmessage.GetIncludingBlockHashesOfTxsRequestMessage) error { + x.GetIncludingBlockHashesOfTxsRequest = &GetIncludingBlockHashesOfTxsRequestMessage{ + TxIDs: message.TxIDs, + } + return nil +} + +func (x *GetIncludingBlockHashesOfTxsRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetIncludingBlockHashesOfTxsRequestMessage is nil") + } + return &appmessage.GetIncludingBlockHashesOfTxsRequestMessage{ + TxIDs: x.TxIDs, + }, nil +} + +func (x *KaspadMessage_GetIncludingBlockHashesOfTxsResponse) toAppMessage() (appmessage.Message, error) { + + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetIncludinglockHashesOfTxsResponse is nil") + } + return x.GetIncludingBlockHashesOfTxsResponse.toAppMessage() +} + +func (x *KaspadMessage_GetIncludingBlockHashesOfTxsResponse) fromAppMessage(message *appmessage.GetIncludingBlockHashesOfTxsResponseMessage) error { + var rpcErr *RPCError + if message.Error != nil { + rpcErr = &RPCError{Message: message.Error.Message} + } + + rpcTxIDBlockHashPairs := make([]*RpcTxIDBlockHashPair, len(message.TxIDBlockHashPairs)) + for i := range rpcTxIDBlockHashPairs { + rpcTxIDBlockHashPairs[i] = &RpcTxIDBlockHashPair{} + rpcTxIDBlockHashPairs[i].fromAppMessage(message.TxIDBlockHashPairs[i]) + } + + x.GetIncludingBlockHashesOfTxsResponse = &GetIncludingBlockHashesOfTxsResponseMessage{ + TxIDBlockHashPairs: rpcTxIDBlockHashPairs, + + Error: rpcErr, + } + return nil +} + +func (x *GetIncludingBlockHashesOfTxsResponseMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetIncludingBlockHashesOfTxsResponseMessage is nil") + } + rpcErr, err := x.Error.toAppMessage() + // Error is an optional field + if err != nil && !errors.Is(err, errorNil) { + return nil, err + } + + if rpcErr != nil && x.TxIDBlockHashPairs != nil { + return nil, errors.New("GetIncludingBlockHashesfTxsResponseMessage contains both an error and a response") + } + + appTxIDBlockHashPairs := make([]*appmessage.TxIDBlockHashPair, len(x.TxIDBlockHashPairs)) + for i := range appTxIDBlockHashPairs { + appTxIDBlockHashPairs[i], err = x.TxIDBlockHashPairs[i].toAppMessage() + if err != nil { + return nil, err + } + } + + return &appmessage.GetIncludingBlockHashesOfTxsResponseMessage{ + TxIDBlockHashPairs: appTxIDBlockHashPairs, + Error: rpcErr, + }, nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blocks_of_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blocks_of_txs.go new file mode 100644 index 0000000000..928768cfdb --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blocks_of_txs.go @@ -0,0 +1,90 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_GetIncludingBlocksOfTxsRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetIncludingBlocksOfTxsRequest") + } + return x.GetIncludingBlocksOfTxsRequest.toAppMessage() +} + +func (x *KaspadMessage_GetIncludingBlocksOfTxsRequest) fromAppMessage(message *appmessage.GetIncludingBlocksOfTxsRequestMessage) error { + x.GetIncludingBlocksOfTxsRequest = &GetIncludingBlocksOfTxsRequestMessage{ + TxIDs: message.TxIDs, + IncludeTransactions: message.IncludeTransactions, + } + return nil +} + +func (x *GetIncludingBlocksOfTxsRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetIncludingBlocksOfTxsRequestMessage is nil") + } + return &appmessage.GetIncludingBlocksOfTxsRequestMessage{ + TxIDs: x.TxIDs, + IncludeTransactions: x.IncludeTransactions, + }, nil +} + +func (x *KaspadMessage_GetIncludingBlocksOfTxsResponse) toAppMessage() (appmessage.Message, error) { + + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_GetIncludingBlocksOfTxsResponse is nil") + } + return x.GetIncludingBlocksOfTxsResponse.toAppMessage() +} + +func (x *KaspadMessage_GetIncludingBlocksOfTxsResponse) fromAppMessage(message *appmessage.GetIncludingBlocksOfTxsResponseMessage) error { + var rpcErr *RPCError + if message.Error != nil { + rpcErr = &RPCError{Message: message.Error.Message} + } + + rpcTxIDBlockPairs := make([]*RpcTxIDBlockPair, len(message.TxIDBlockPairs)) + for i := range rpcTxIDBlockPairs { + rpcTxIDBlockPairs[i] = &RpcTxIDBlockPair{} + err := rpcTxIDBlockPairs[i].fromAppMessage(message.TxIDBlockPairs[i]) + if err != nil { + return err + } + } + + x.GetIncludingBlocksOfTxsResponse = &GetIncludingBlocksOfTxsResponseMessage{ + TxIDBlockPairs: rpcTxIDBlockPairs, + + Error: rpcErr, + } + return nil +} + +func (x *GetIncludingBlocksOfTxsResponseMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "GetIncludingBlocksOfTxsResponseMessage is nil") + } + rpcErr, err := x.Error.toAppMessage() + // Error is an optional field + if err != nil && !errors.Is(err, errorNil) { + return nil, err + } + + if rpcErr != nil && x.TxIDBlockPairs != nil { + return nil, errors.New("GetIncludingBlocksOfTxsResponseMessage contains both an error and a response") + } + + appTxIDBlockPairs := make([]*appmessage.TxIDBlockPair, len(x.TxIDBlockPairs)) + for i := range appTxIDBlockPairs { + appTxIDBlockPairs[i], err = x.TxIDBlockPairs[i].toAppMessage() + if err != nil { + return nil, err + } + } + + return &appmessage.GetIncludingBlocksOfTxsResponseMessage{ + TxIDBlockPairs: appTxIDBlockPairs, + Error: rpcErr, + }, nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go b/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go index 0e6fd5bd6f..532cbcb9cb 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go @@ -1024,6 +1024,48 @@ func toRPCPayload(message appmessage.Message) (isKaspadMessage_Payload, error) { return nil, err } return payload, nil + case *appmessage.GetIncludingBlockHashesOfTxsRequestMessage: + payload := new(KaspadMessage_GetIncludingBlockHashesOfTxsRequest) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetIncludingBlockHashesOfTxsResponseMessage: + payload := new(KaspadMessage_GetIncludingBlockHashesOfTxsResponse) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetIncludingBlockOfTxRequestMessage: + payload := new(KaspadMessage_GetIncludingBlockOfTxRequest) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetIncludingBlockOfTxResponseMessage: + payload := new(KaspadMessage_GetIncludingBlockOfTxResponse) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetIncludingBlocksOfTxsRequestMessage: + payload := new(KaspadMessage_GetIncludingBlocksOfTxsRequest) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + case *appmessage.GetIncludingBlocksOfTxsResponseMessage: + payload := new(KaspadMessage_GetIncludingBlocksOfTxsResponse) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil case *appmessage.GetIncludingBlockHashOfTxRequestMessage: payload := new(KaspadMessage_GetIncludingBlockHashOfTxRequest) err := payload.fromAppMessage(message) diff --git a/infrastructure/network/rpcclient/rpc_get_including_block_of_tx.go b/infrastructure/network/rpcclient/rpc_get_including_block_of_tx.go new file mode 100644 index 0000000000..c048db6881 --- /dev/null +++ b/infrastructure/network/rpcclient/rpc_get_including_block_of_tx.go @@ -0,0 +1,20 @@ +package rpcclient + +import "github.com/kaspanet/kaspad/app/appmessage" + +// GetIncludingBlockOfTx sends an RPC request respective to the function's name and returns the RPC server's response +func (c *RPCClient) GetIncludingBlockOfTx(txID string, includeTransactions bool) (*appmessage.GetIncludingBlockOfTxResponseMessage, error) { + err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetIncludingBlockOfTxRequest(txID, includeTransactions)) + if err != nil { + return nil, err + } + response, err := c.route(appmessage.CmdGetIncludingBlockOfTxResponseMessage).DequeueWithTimeout(c.timeout) + if err != nil { + return nil, err + } + getIncludingBlockOfTxResponse := response.(*appmessage.GetIncludingBlockOfTxResponseMessage) + if getIncludingBlockOfTxResponse.Error != nil { + return nil, c.convertRPCError(getIncludingBlockOfTxResponse.Error) + } + return getIncludingBlockOfTxResponse, nil +} diff --git a/infrastructure/network/rpcclient/rpc_get_including_blockhashes_of_txs.go b/infrastructure/network/rpcclient/rpc_get_including_blockhashes_of_txs.go new file mode 100644 index 0000000000..ecdf5c7861 --- /dev/null +++ b/infrastructure/network/rpcclient/rpc_get_including_blockhashes_of_txs.go @@ -0,0 +1,20 @@ +package rpcclient + +import "github.com/kaspanet/kaspad/app/appmessage" + +// GetIncludingBlockHashesOfTxs sends an RPC request respective to the function's name and returns the RPC server's response +func (c *RPCClient) GetIncludingBlockHashesOfTxs(txIDs []string) (*appmessage.GetIncludingBlockHashesOfTxsResponseMessage, error) { + err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetIncludingBlockHashesOfTxsRequest(txIDs)) + if err != nil { + return nil, err + } + response, err := c.route(appmessage.CmdGetIncludingBlockHashesOfTxsResponseMessage).DequeueWithTimeout(c.timeout) + if err != nil { + return nil, err + } + getIncludingBlockHashesOfTxsResponse := response.(*appmessage.GetIncludingBlockHashesOfTxsResponseMessage) + if getIncludingBlockHashesOfTxsResponse.Error != nil { + return nil, c.convertRPCError(getIncludingBlockHashesOfTxsResponse.Error) + } + return getIncludingBlockHashesOfTxsResponse, nil +} diff --git a/infrastructure/network/rpcclient/rpc_get_including_blocks_of_txs.go b/infrastructure/network/rpcclient/rpc_get_including_blocks_of_txs.go new file mode 100644 index 0000000000..459db71751 --- /dev/null +++ b/infrastructure/network/rpcclient/rpc_get_including_blocks_of_txs.go @@ -0,0 +1,20 @@ +package rpcclient + +import "github.com/kaspanet/kaspad/app/appmessage" + +// GetIncludingBlocksTxs sends an RPC request respective to the function's name and returns the RPC server's response +func (c *RPCClient) GetIncludingBlocksTxs(txIDs []string, includeTransactions bool) (*appmessage.GetIncludingBlocksOfTxsResponseMessage, error) { + err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetIncludingBlocksOfTxsRequest(txIDs, includeTransactions)) + if err != nil { + return nil, err + } + response, err := c.route(appmessage.CmdGetIncludingBlocksOfTxsResponseMessage).DequeueWithTimeout(c.timeout) + if err != nil { + return nil, err + } + getIncludingBlocksOfTxsResponse := response.(*appmessage.GetIncludingBlocksOfTxsResponseMessage) + if getIncludingBlocksOfTxsResponse.Error != nil { + return nil, c.convertRPCError(getIncludingBlocksOfTxsResponse.Error) + } + return getIncludingBlocksOfTxsResponse, nil +} From 32205a2f63f054abf2828c4d5f6d77af6965436e Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Fri, 14 Oct 2022 18:55:23 +0200 Subject: [PATCH 33/47] implement protobuf txindex notifications --- .../grpcserver/protowire/messages.pb.go | 789 +++++-- .../grpcserver/protowire/messages.proto | 17 + .../server/grpcserver/protowire/rpc.md | 340 +++ .../server/grpcserver/protowire/rpc.pb.go | 1851 +++++++++++++++-- .../server/grpcserver/protowire/rpc.proto | 102 + 5 files changed, 2776 insertions(+), 323 deletions(-) diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go index 9ac9e21c01..c3528485f9 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go @@ -180,6 +180,22 @@ type KaspadMessage struct { // *KaspadMessage_GetTxConfirmationsResponse // *KaspadMessage_GetTxsConfirmationsRequest // *KaspadMessage_GetTxsConfirmationsResponse + // *KaspadMessage_NotifyTxsConfirmationChangedRequstMessage + // *KaspadMessage_NotifyTxsConfirmationChangedResponseMessage + // *KaspadMessage_StopNotifyTxsConfirmationChangedRequestMessage + // *KaspadMessage_StopNotifyTxsConfirmationChangedResponseMessage + // *KaspadMessage_StartNotifyTxsConfirmationChangedRequestMessage + // *KaspadMessage_StartNotifyTxsConfirmationChangedResponseMessage + // *KaspadMessage_ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage + // *KaspadMessage_TxsConfirmationChangedNotficationMessage + // *KaspadMessage_NotifyTxListenerRequestMessage + // *KaspadMessage_StopNotifyTxListenerRequestMessage + // *KaspadMessage_StopNotifyTxListenerResponseMessage + // *KaspadMessage_StartNotifyTxListenerRequestMessage + // *KaspadMessage_StartNotifyTxListenerResponseMessage + // *KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsRequestMessage + // *KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsResponseMessage + // *KaspadMessage_TxListenerNotificationMessage Payload isKaspadMessage_Payload `protobuf_oneof:"payload"` } @@ -1300,6 +1316,118 @@ func (x *KaspadMessage) GetGetTxsConfirmationsResponse() *GetTxsConfirmationsRes return nil } +func (x *KaspadMessage) GetNotifyTxsConfirmationChangedRequstMessage() *NotifyTxsConfirmationChangedRequstMessage { + if x, ok := x.GetPayload().(*KaspadMessage_NotifyTxsConfirmationChangedRequstMessage); ok { + return x.NotifyTxsConfirmationChangedRequstMessage + } + return nil +} + +func (x *KaspadMessage) GetNotifyTxsConfirmationChangedResponseMessage() *NotifyTxsConfirmationChangedResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_NotifyTxsConfirmationChangedResponseMessage); ok { + return x.NotifyTxsConfirmationChangedResponseMessage + } + return nil +} + +func (x *KaspadMessage) GetStopNotifyTxsConfirmationChangedRequestMessage() *StopNotifyTxsConfirmationChangedRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_StopNotifyTxsConfirmationChangedRequestMessage); ok { + return x.StopNotifyTxsConfirmationChangedRequestMessage + } + return nil +} + +func (x *KaspadMessage) GetStopNotifyTxsConfirmationChangedResponseMessage() *StopNotifyTxsConfirmationChangedResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_StopNotifyTxsConfirmationChangedResponseMessage); ok { + return x.StopNotifyTxsConfirmationChangedResponseMessage + } + return nil +} + +func (x *KaspadMessage) GetStartNotifyTxsConfirmationChangedRequestMessage() *StartNotifyTxsConfirmationChangedRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_StartNotifyTxsConfirmationChangedRequestMessage); ok { + return x.StartNotifyTxsConfirmationChangedRequestMessage + } + return nil +} + +func (x *KaspadMessage) GetStartNotifyTxsConfirmationChangedResponseMessage() *StartNotifyTxsConfirmationChangedResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_StartNotifyTxsConfirmationChangedResponseMessage); ok { + return x.StartNotifyTxsConfirmationChangedResponseMessage + } + return nil +} + +func (x *KaspadMessage) GetChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage() *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage); ok { + return x.ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage + } + return nil +} + +func (x *KaspadMessage) GetTxsConfirmationChangedNotficationMessage() *TxsConfirmationChangedNotficationMessage { + if x, ok := x.GetPayload().(*KaspadMessage_TxsConfirmationChangedNotficationMessage); ok { + return x.TxsConfirmationChangedNotficationMessage + } + return nil +} + +func (x *KaspadMessage) GetNotifyTxListenerRequestMessage() *NotifyTxListenerRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_NotifyTxListenerRequestMessage); ok { + return x.NotifyTxListenerRequestMessage + } + return nil +} + +func (x *KaspadMessage) GetStopNotifyTxListenerRequestMessage() *StopNotifyTxListenerRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_StopNotifyTxListenerRequestMessage); ok { + return x.StopNotifyTxListenerRequestMessage + } + return nil +} + +func (x *KaspadMessage) GetStopNotifyTxListenerResponseMessage() *StopNotifyTxListenerResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_StopNotifyTxListenerResponseMessage); ok { + return x.StopNotifyTxListenerResponseMessage + } + return nil +} + +func (x *KaspadMessage) GetStartNotifyTxListenerRequestMessage() *StartNotifyTxListenerRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_StartNotifyTxListenerRequestMessage); ok { + return x.StartNotifyTxListenerRequestMessage + } + return nil +} + +func (x *KaspadMessage) GetStartNotifyTxListenerResponseMessage() *StartNotifyTxListenerResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_StartNotifyTxListenerResponseMessage); ok { + return x.StartNotifyTxListenerResponseMessage + } + return nil +} + +func (x *KaspadMessage) GetChangeNotifyTxListenerRequiredConfirmationsRequestMessage() *ChangeNotifyTxListenerRequiredConfirmationsRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsRequestMessage); ok { + return x.ChangeNotifyTxListenerRequiredConfirmationsRequestMessage + } + return nil +} + +func (x *KaspadMessage) GetChangeNotifyTxListenerRequiredConfirmationsResponseMessage() *ChangeNotifyTxListenerRequiredConfirmationsResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsResponseMessage); ok { + return x.ChangeNotifyTxListenerRequiredConfirmationsResponseMessage + } + return nil +} + +func (x *KaspadMessage) GetTxListenerNotificationMessage() *TxListenerNotificationMessage { + if x, ok := x.GetPayload().(*KaspadMessage_TxListenerNotificationMessage); ok { + return x.TxListenerNotificationMessage + } + return nil +} + type isKaspadMessage_Payload interface { isKaspadMessage_Payload() } @@ -1920,6 +2048,70 @@ type KaspadMessage_GetTxsConfirmationsResponse struct { GetTxsConfirmationsResponse *GetTxsConfirmationsResponseMessage `protobuf:"bytes,1111,opt,name=getTxsConfirmationsResponse,proto3,oneof"` } +type KaspadMessage_NotifyTxsConfirmationChangedRequstMessage struct { + NotifyTxsConfirmationChangedRequstMessage *NotifyTxsConfirmationChangedRequstMessage `protobuf:"bytes,1112,opt,name=notifyTxsConfirmationChangedRequstMessage,proto3,oneof"` +} + +type KaspadMessage_NotifyTxsConfirmationChangedResponseMessage struct { + NotifyTxsConfirmationChangedResponseMessage *NotifyTxsConfirmationChangedResponseMessage `protobuf:"bytes,1113,opt,name=notifyTxsConfirmationChangedResponseMessage,proto3,oneof"` +} + +type KaspadMessage_StopNotifyTxsConfirmationChangedRequestMessage struct { + StopNotifyTxsConfirmationChangedRequestMessage *StopNotifyTxsConfirmationChangedRequestMessage `protobuf:"bytes,1114,opt,name=stopNotifyTxsConfirmationChangedRequestMessage,proto3,oneof"` +} + +type KaspadMessage_StopNotifyTxsConfirmationChangedResponseMessage struct { + StopNotifyTxsConfirmationChangedResponseMessage *StopNotifyTxsConfirmationChangedResponseMessage `protobuf:"bytes,1115,opt,name=stopNotifyTxsConfirmationChangedResponseMessage,proto3,oneof"` +} + +type KaspadMessage_StartNotifyTxsConfirmationChangedRequestMessage struct { + StartNotifyTxsConfirmationChangedRequestMessage *StartNotifyTxsConfirmationChangedRequestMessage `protobuf:"bytes,1116,opt,name=startNotifyTxsConfirmationChangedRequestMessage,proto3,oneof"` +} + +type KaspadMessage_StartNotifyTxsConfirmationChangedResponseMessage struct { + StartNotifyTxsConfirmationChangedResponseMessage *StartNotifyTxsConfirmationChangedResponseMessage `protobuf:"bytes,1117,opt,name=startNotifyTxsConfirmationChangedResponseMessage,proto3,oneof"` +} + +type KaspadMessage_ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage struct { + ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage `protobuf:"bytes,1118,opt,name=changeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage,proto3,oneof"` +} + +type KaspadMessage_TxsConfirmationChangedNotficationMessage struct { + TxsConfirmationChangedNotficationMessage *TxsConfirmationChangedNotficationMessage `protobuf:"bytes,1119,opt,name=txsConfirmationChangedNotficationMessage,proto3,oneof"` +} + +type KaspadMessage_NotifyTxListenerRequestMessage struct { + NotifyTxListenerRequestMessage *NotifyTxListenerRequestMessage `protobuf:"bytes,1120,opt,name=notifyTxListenerRequestMessage,proto3,oneof"` +} + +type KaspadMessage_StopNotifyTxListenerRequestMessage struct { + StopNotifyTxListenerRequestMessage *StopNotifyTxListenerRequestMessage `protobuf:"bytes,1121,opt,name=stopNotifyTxListenerRequestMessage,proto3,oneof"` +} + +type KaspadMessage_StopNotifyTxListenerResponseMessage struct { + StopNotifyTxListenerResponseMessage *StopNotifyTxListenerResponseMessage `protobuf:"bytes,1122,opt,name=stopNotifyTxListenerResponseMessage,proto3,oneof"` +} + +type KaspadMessage_StartNotifyTxListenerRequestMessage struct { + StartNotifyTxListenerRequestMessage *StartNotifyTxListenerRequestMessage `protobuf:"bytes,1123,opt,name=startNotifyTxListenerRequestMessage,proto3,oneof"` +} + +type KaspadMessage_StartNotifyTxListenerResponseMessage struct { + StartNotifyTxListenerResponseMessage *StartNotifyTxListenerResponseMessage `protobuf:"bytes,1124,opt,name=startNotifyTxListenerResponseMessage,proto3,oneof"` +} + +type KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsRequestMessage struct { + ChangeNotifyTxListenerRequiredConfirmationsRequestMessage *ChangeNotifyTxListenerRequiredConfirmationsRequestMessage `protobuf:"bytes,1125,opt,name=changeNotifyTxListenerRequiredConfirmationsRequestMessage,proto3,oneof"` +} + +type KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsResponseMessage struct { + ChangeNotifyTxListenerRequiredConfirmationsResponseMessage *ChangeNotifyTxListenerRequiredConfirmationsResponseMessage `protobuf:"bytes,1126,opt,name=changeNotifyTxListenerRequiredConfirmationsResponseMessage,proto3,oneof"` +} + +type KaspadMessage_TxListenerNotificationMessage struct { + TxListenerNotificationMessage *TxListenerNotificationMessage `protobuf:"bytes,1127,opt,name=txListenerNotificationMessage,proto3,oneof"` +} + func (*KaspadMessage_Addresses) isKaspadMessage_Payload() {} func (*KaspadMessage_Block) isKaspadMessage_Payload() {} @@ -2228,13 +2420,48 @@ func (*KaspadMessage_GetTxsConfirmationsRequest) isKaspadMessage_Payload() {} func (*KaspadMessage_GetTxsConfirmationsResponse) isKaspadMessage_Payload() {} +func (*KaspadMessage_NotifyTxsConfirmationChangedRequstMessage) isKaspadMessage_Payload() {} + +func (*KaspadMessage_NotifyTxsConfirmationChangedResponseMessage) isKaspadMessage_Payload() {} + +func (*KaspadMessage_StopNotifyTxsConfirmationChangedRequestMessage) isKaspadMessage_Payload() {} + +func (*KaspadMessage_StopNotifyTxsConfirmationChangedResponseMessage) isKaspadMessage_Payload() {} + +func (*KaspadMessage_StartNotifyTxsConfirmationChangedRequestMessage) isKaspadMessage_Payload() {} + +func (*KaspadMessage_StartNotifyTxsConfirmationChangedResponseMessage) isKaspadMessage_Payload() {} + +func (*KaspadMessage_ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage) isKaspadMessage_Payload() { +} + +func (*KaspadMessage_TxsConfirmationChangedNotficationMessage) isKaspadMessage_Payload() {} + +func (*KaspadMessage_NotifyTxListenerRequestMessage) isKaspadMessage_Payload() {} + +func (*KaspadMessage_StopNotifyTxListenerRequestMessage) isKaspadMessage_Payload() {} + +func (*KaspadMessage_StopNotifyTxListenerResponseMessage) isKaspadMessage_Payload() {} + +func (*KaspadMessage_StartNotifyTxListenerRequestMessage) isKaspadMessage_Payload() {} + +func (*KaspadMessage_StartNotifyTxListenerResponseMessage) isKaspadMessage_Payload() {} + +func (*KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsRequestMessage) isKaspadMessage_Payload() { +} + +func (*KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsResponseMessage) isKaspadMessage_Payload() { +} + +func (*KaspadMessage_TxListenerNotificationMessage) isKaspadMessage_Payload() {} + var File_messages_proto protoreflect.FileDescriptor var file_messages_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x1a, 0x09, 0x70, 0x32, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x09, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xd7, 0x83, 0x01, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, + 0x6f, 0x22, 0xcd, 0x97, 0x01, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4d, 0x65, 0x73, @@ -3287,20 +3514,180 @@ var file_messages_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x32, 0x50, 0x0a, 0x03, - 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0x50, - 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x65, 0x12, 0x95, 0x01, 0x0a, 0x29, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0xd8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x29, + 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x2b, 0x6e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xd9, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2b, 0x6e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0xa4, 0x01, 0x0a, 0x2e, 0x73, 0x74, 0x6f, 0x70, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xda, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, + 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2e, + 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0xa7, + 0x01, 0x0a, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0xdb, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0xa7, 0x01, 0x0a, 0x2f, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xdc, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, + 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x30, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xdd, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x30, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0xec, 0x01, 0x0a, 0x46, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xde, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x51, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x46, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x92, + 0x01, 0x0a, 0x28, 0x74, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xdf, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, + 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x28, 0x74, 0x78, 0x73, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x4e, 0x6f, 0x74, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x74, 0x0a, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xe0, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, + 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x22, 0x73, 0x74, + 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0xe1, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, + 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x83, 0x01, 0x0a, + 0x23, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0xe2, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x23, 0x73, + 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x23, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xe3, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x23, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x24, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0xe4, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x24, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0xc5, 0x01, 0x0a, 0x39, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0xe5, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, + 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x39, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0xc8, 0x01, 0x0a, 0x3a, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xe6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x45, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x3a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x71, 0x0a, 0x1d, 0x74, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xe7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x74, 0x78, 0x4c, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x32, 0x50, 0x0a, 0x03, 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, + 0x28, 0x01, 0x30, 0x01, 0x32, 0x50, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, 0x0d, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, - 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, - 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, - 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, + 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3317,160 +3704,176 @@ func file_messages_proto_rawDescGZIP() []byte { var file_messages_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_messages_proto_goTypes = []interface{}{ - (*KaspadMessage)(nil), // 0: protowire.KaspadMessage - (*AddressesMessage)(nil), // 1: protowire.AddressesMessage - (*BlockMessage)(nil), // 2: protowire.BlockMessage - (*TransactionMessage)(nil), // 3: protowire.TransactionMessage - (*BlockLocatorMessage)(nil), // 4: protowire.BlockLocatorMessage - (*RequestAddressesMessage)(nil), // 5: protowire.RequestAddressesMessage - (*RequestRelayBlocksMessage)(nil), // 6: protowire.RequestRelayBlocksMessage - (*RequestTransactionsMessage)(nil), // 7: protowire.RequestTransactionsMessage - (*InvRelayBlockMessage)(nil), // 8: protowire.InvRelayBlockMessage - (*InvTransactionsMessage)(nil), // 9: protowire.InvTransactionsMessage - (*PingMessage)(nil), // 10: protowire.PingMessage - (*PongMessage)(nil), // 11: protowire.PongMessage - (*VerackMessage)(nil), // 12: protowire.VerackMessage - (*VersionMessage)(nil), // 13: protowire.VersionMessage - (*TransactionNotFoundMessage)(nil), // 14: protowire.TransactionNotFoundMessage - (*RejectMessage)(nil), // 15: protowire.RejectMessage - (*PruningPointUtxoSetChunkMessage)(nil), // 16: protowire.PruningPointUtxoSetChunkMessage - (*RequestIBDBlocksMessage)(nil), // 17: protowire.RequestIBDBlocksMessage - (*UnexpectedPruningPointMessage)(nil), // 18: protowire.UnexpectedPruningPointMessage - (*IbdBlockLocatorMessage)(nil), // 19: protowire.IbdBlockLocatorMessage - (*IbdBlockLocatorHighestHashMessage)(nil), // 20: protowire.IbdBlockLocatorHighestHashMessage - (*RequestNextPruningPointUtxoSetChunkMessage)(nil), // 21: protowire.RequestNextPruningPointUtxoSetChunkMessage - (*DonePruningPointUtxoSetChunksMessage)(nil), // 22: protowire.DonePruningPointUtxoSetChunksMessage - (*IbdBlockLocatorHighestHashNotFoundMessage)(nil), // 23: protowire.IbdBlockLocatorHighestHashNotFoundMessage - (*BlockWithTrustedDataMessage)(nil), // 24: protowire.BlockWithTrustedDataMessage - (*DoneBlocksWithTrustedDataMessage)(nil), // 25: protowire.DoneBlocksWithTrustedDataMessage - (*RequestPruningPointAndItsAnticoneMessage)(nil), // 26: protowire.RequestPruningPointAndItsAnticoneMessage - (*BlockHeadersMessage)(nil), // 27: protowire.BlockHeadersMessage - (*RequestNextHeadersMessage)(nil), // 28: protowire.RequestNextHeadersMessage - (*DoneHeadersMessage)(nil), // 29: protowire.DoneHeadersMessage - (*RequestPruningPointUTXOSetMessage)(nil), // 30: protowire.RequestPruningPointUTXOSetMessage - (*RequestHeadersMessage)(nil), // 31: protowire.RequestHeadersMessage - (*RequestBlockLocatorMessage)(nil), // 32: protowire.RequestBlockLocatorMessage - (*PruningPointsMessage)(nil), // 33: protowire.PruningPointsMessage - (*RequestPruningPointProofMessage)(nil), // 34: protowire.RequestPruningPointProofMessage - (*PruningPointProofMessage)(nil), // 35: protowire.PruningPointProofMessage - (*ReadyMessage)(nil), // 36: protowire.ReadyMessage - (*BlockWithTrustedDataV4Message)(nil), // 37: protowire.BlockWithTrustedDataV4Message - (*TrustedDataMessage)(nil), // 38: protowire.TrustedDataMessage - (*RequestIBDChainBlockLocatorMessage)(nil), // 39: protowire.RequestIBDChainBlockLocatorMessage - (*IbdChainBlockLocatorMessage)(nil), // 40: protowire.IbdChainBlockLocatorMessage - (*RequestAnticoneMessage)(nil), // 41: protowire.RequestAnticoneMessage - (*RequestNextPruningPointAndItsAnticoneBlocksMessage)(nil), // 42: protowire.RequestNextPruningPointAndItsAnticoneBlocksMessage - (*GetCurrentNetworkRequestMessage)(nil), // 43: protowire.GetCurrentNetworkRequestMessage - (*GetCurrentNetworkResponseMessage)(nil), // 44: protowire.GetCurrentNetworkResponseMessage - (*SubmitBlockRequestMessage)(nil), // 45: protowire.SubmitBlockRequestMessage - (*SubmitBlockResponseMessage)(nil), // 46: protowire.SubmitBlockResponseMessage - (*GetBlockTemplateRequestMessage)(nil), // 47: protowire.GetBlockTemplateRequestMessage - (*GetBlockTemplateResponseMessage)(nil), // 48: protowire.GetBlockTemplateResponseMessage - (*NotifyBlockAddedRequestMessage)(nil), // 49: protowire.NotifyBlockAddedRequestMessage - (*NotifyBlockAddedResponseMessage)(nil), // 50: protowire.NotifyBlockAddedResponseMessage - (*BlockAddedNotificationMessage)(nil), // 51: protowire.BlockAddedNotificationMessage - (*GetPeerAddressesRequestMessage)(nil), // 52: protowire.GetPeerAddressesRequestMessage - (*GetPeerAddressesResponseMessage)(nil), // 53: protowire.GetPeerAddressesResponseMessage - (*GetSelectedTipHashRequestMessage)(nil), // 54: protowire.GetSelectedTipHashRequestMessage - (*GetSelectedTipHashResponseMessage)(nil), // 55: protowire.GetSelectedTipHashResponseMessage - (*GetMempoolEntryRequestMessage)(nil), // 56: protowire.GetMempoolEntryRequestMessage - (*GetMempoolEntryResponseMessage)(nil), // 57: protowire.GetMempoolEntryResponseMessage - (*GetConnectedPeerInfoRequestMessage)(nil), // 58: protowire.GetConnectedPeerInfoRequestMessage - (*GetConnectedPeerInfoResponseMessage)(nil), // 59: protowire.GetConnectedPeerInfoResponseMessage - (*AddPeerRequestMessage)(nil), // 60: protowire.AddPeerRequestMessage - (*AddPeerResponseMessage)(nil), // 61: protowire.AddPeerResponseMessage - (*SubmitTransactionRequestMessage)(nil), // 62: protowire.SubmitTransactionRequestMessage - (*SubmitTransactionResponseMessage)(nil), // 63: protowire.SubmitTransactionResponseMessage - (*NotifyVirtualSelectedParentChainChangedRequestMessage)(nil), // 64: protowire.NotifyVirtualSelectedParentChainChangedRequestMessage - (*NotifyVirtualSelectedParentChainChangedResponseMessage)(nil), // 65: protowire.NotifyVirtualSelectedParentChainChangedResponseMessage - (*VirtualSelectedParentChainChangedNotificationMessage)(nil), // 66: protowire.VirtualSelectedParentChainChangedNotificationMessage - (*GetBlockRequestMessage)(nil), // 67: protowire.GetBlockRequestMessage - (*GetBlockResponseMessage)(nil), // 68: protowire.GetBlockResponseMessage - (*GetSubnetworkRequestMessage)(nil), // 69: protowire.GetSubnetworkRequestMessage - (*GetSubnetworkResponseMessage)(nil), // 70: protowire.GetSubnetworkResponseMessage - (*GetVirtualSelectedParentChainFromBlockRequestMessage)(nil), // 71: protowire.GetVirtualSelectedParentChainFromBlockRequestMessage - (*GetVirtualSelectedParentChainFromBlockResponseMessage)(nil), // 72: protowire.GetVirtualSelectedParentChainFromBlockResponseMessage - (*GetBlocksRequestMessage)(nil), // 73: protowire.GetBlocksRequestMessage - (*GetBlocksResponseMessage)(nil), // 74: protowire.GetBlocksResponseMessage - (*GetBlockCountRequestMessage)(nil), // 75: protowire.GetBlockCountRequestMessage - (*GetBlockCountResponseMessage)(nil), // 76: protowire.GetBlockCountResponseMessage - (*GetBlockDagInfoRequestMessage)(nil), // 77: protowire.GetBlockDagInfoRequestMessage - (*GetBlockDagInfoResponseMessage)(nil), // 78: protowire.GetBlockDagInfoResponseMessage - (*ResolveFinalityConflictRequestMessage)(nil), // 79: protowire.ResolveFinalityConflictRequestMessage - (*ResolveFinalityConflictResponseMessage)(nil), // 80: protowire.ResolveFinalityConflictResponseMessage - (*NotifyFinalityConflictsRequestMessage)(nil), // 81: protowire.NotifyFinalityConflictsRequestMessage - (*NotifyFinalityConflictsResponseMessage)(nil), // 82: protowire.NotifyFinalityConflictsResponseMessage - (*FinalityConflictNotificationMessage)(nil), // 83: protowire.FinalityConflictNotificationMessage - (*FinalityConflictResolvedNotificationMessage)(nil), // 84: protowire.FinalityConflictResolvedNotificationMessage - (*GetMempoolEntriesRequestMessage)(nil), // 85: protowire.GetMempoolEntriesRequestMessage - (*GetMempoolEntriesResponseMessage)(nil), // 86: protowire.GetMempoolEntriesResponseMessage - (*ShutDownRequestMessage)(nil), // 87: protowire.ShutDownRequestMessage - (*ShutDownResponseMessage)(nil), // 88: protowire.ShutDownResponseMessage - (*GetHeadersRequestMessage)(nil), // 89: protowire.GetHeadersRequestMessage - (*GetHeadersResponseMessage)(nil), // 90: protowire.GetHeadersResponseMessage - (*NotifyUtxosChangedRequestMessage)(nil), // 91: protowire.NotifyUtxosChangedRequestMessage - (*NotifyUtxosChangedResponseMessage)(nil), // 92: protowire.NotifyUtxosChangedResponseMessage - (*UtxosChangedNotificationMessage)(nil), // 93: protowire.UtxosChangedNotificationMessage - (*GetUtxosByAddressesRequestMessage)(nil), // 94: protowire.GetUtxosByAddressesRequestMessage - (*GetUtxosByAddressesResponseMessage)(nil), // 95: protowire.GetUtxosByAddressesResponseMessage - (*GetVirtualSelectedParentBlueScoreRequestMessage)(nil), // 96: protowire.GetVirtualSelectedParentBlueScoreRequestMessage - (*GetVirtualSelectedParentBlueScoreResponseMessage)(nil), // 97: protowire.GetVirtualSelectedParentBlueScoreResponseMessage - (*NotifyVirtualSelectedParentBlueScoreChangedRequestMessage)(nil), // 98: protowire.NotifyVirtualSelectedParentBlueScoreChangedRequestMessage - (*NotifyVirtualSelectedParentBlueScoreChangedResponseMessage)(nil), // 99: protowire.NotifyVirtualSelectedParentBlueScoreChangedResponseMessage - (*VirtualSelectedParentBlueScoreChangedNotificationMessage)(nil), // 100: protowire.VirtualSelectedParentBlueScoreChangedNotificationMessage - (*BanRequestMessage)(nil), // 101: protowire.BanRequestMessage - (*BanResponseMessage)(nil), // 102: protowire.BanResponseMessage - (*UnbanRequestMessage)(nil), // 103: protowire.UnbanRequestMessage - (*UnbanResponseMessage)(nil), // 104: protowire.UnbanResponseMessage - (*GetInfoRequestMessage)(nil), // 105: protowire.GetInfoRequestMessage - (*GetInfoResponseMessage)(nil), // 106: protowire.GetInfoResponseMessage - (*StopNotifyingUtxosChangedRequestMessage)(nil), // 107: protowire.StopNotifyingUtxosChangedRequestMessage - (*StopNotifyingUtxosChangedResponseMessage)(nil), // 108: protowire.StopNotifyingUtxosChangedResponseMessage - (*NotifyPruningPointUTXOSetOverrideRequestMessage)(nil), // 109: protowire.NotifyPruningPointUTXOSetOverrideRequestMessage - (*NotifyPruningPointUTXOSetOverrideResponseMessage)(nil), // 110: protowire.NotifyPruningPointUTXOSetOverrideResponseMessage - (*PruningPointUTXOSetOverrideNotificationMessage)(nil), // 111: protowire.PruningPointUTXOSetOverrideNotificationMessage - (*StopNotifyingPruningPointUTXOSetOverrideRequestMessage)(nil), // 112: protowire.StopNotifyingPruningPointUTXOSetOverrideRequestMessage - (*StopNotifyingPruningPointUTXOSetOverrideResponseMessage)(nil), // 113: protowire.StopNotifyingPruningPointUTXOSetOverrideResponseMessage - (*EstimateNetworkHashesPerSecondRequestMessage)(nil), // 114: protowire.EstimateNetworkHashesPerSecondRequestMessage - (*EstimateNetworkHashesPerSecondResponseMessage)(nil), // 115: protowire.EstimateNetworkHashesPerSecondResponseMessage - (*NotifyVirtualDaaScoreChangedRequestMessage)(nil), // 116: protowire.NotifyVirtualDaaScoreChangedRequestMessage - (*NotifyVirtualDaaScoreChangedResponseMessage)(nil), // 117: protowire.NotifyVirtualDaaScoreChangedResponseMessage - (*VirtualDaaScoreChangedNotificationMessage)(nil), // 118: protowire.VirtualDaaScoreChangedNotificationMessage - (*GetBalanceByAddressRequestMessage)(nil), // 119: protowire.GetBalanceByAddressRequestMessage - (*GetBalanceByAddressResponseMessage)(nil), // 120: protowire.GetBalanceByAddressResponseMessage - (*GetBalancesByAddressesRequestMessage)(nil), // 121: protowire.GetBalancesByAddressesRequestMessage - (*GetBalancesByAddressesResponseMessage)(nil), // 122: protowire.GetBalancesByAddressesResponseMessage - (*NotifyNewBlockTemplateRequestMessage)(nil), // 123: protowire.NotifyNewBlockTemplateRequestMessage - (*NotifyNewBlockTemplateResponseMessage)(nil), // 124: protowire.NotifyNewBlockTemplateResponseMessage - (*NewBlockTemplateNotificationMessage)(nil), // 125: protowire.NewBlockTemplateNotificationMessage - (*GetMempoolEntriesByAddressesRequestMessage)(nil), // 126: protowire.GetMempoolEntriesByAddressesRequestMessage - (*GetMempoolEntriesByAddressesResponseMessage)(nil), // 127: protowire.GetMempoolEntriesByAddressesResponseMessage - (*GetCoinSupplyRequestMessage)(nil), // 128: protowire.GetCoinSupplyRequestMessage - (*GetCoinSupplyResponseMessage)(nil), // 129: protowire.GetCoinSupplyResponseMessage - (*GetAcceptingBlockHashOfTxRequestMessage)(nil), // 130: protowire.GetAcceptingBlockHashOfTxRequestMessage - (*GetAcceptingBlockHashOfTxResponseMessage)(nil), // 131: protowire.GetAcceptingBlockHashOfTxResponseMessage - (*GetAcceptingBlockHashesOfTxsRequestMessage)(nil), // 132: protowire.GetAcceptingBlockHashesOfTxsRequestMessage - (*GetAcceptingBlockHashesOfTxsResponseMessage)(nil), // 133: protowire.GetAcceptingBlockHashesOfTxsResponseMessage - (*GetAcceptingBlockOfTxRequestMessage)(nil), // 134: protowire.GetAcceptingBlockOfTxRequestMessage - (*GetAcceptingBlockOfTxResponseMessage)(nil), // 135: protowire.GetAcceptingBlockOfTxResponseMessage - (*GetAcceptingBlocksOfTxsRequestMessage)(nil), // 136: protowire.GetAcceptingBlocksOfTxsRequestMessage - (*GetAcceptingBlocksOfTxsResponseMessage)(nil), // 137: protowire.GetAcceptingBlocksOfTxsResponseMessage - (*GetIncludingBlockHashOfTxRequestMessage)(nil), // 138: protowire.GetIncludingBlockHashOfTxRequestMessage - (*GetIncludingBlockHashOfTxResponseMessage)(nil), // 139: protowire.GetIncludingBlockHashOfTxResponseMessage - (*GetIncludingBlockHashesOfTxsRequestMessage)(nil), // 140: protowire.GetIncludingBlockHashesOfTxsRequestMessage - (*GetIncludingBlockHashesOfTxsResponseMessage)(nil), // 141: protowire.GetIncludingBlockHashesOfTxsResponseMessage - (*GetIncludingBlockOfTxRequestMessage)(nil), // 142: protowire.GetIncludingBlockOfTxRequestMessage - (*GetIncludingBlockOfTxResponseMessage)(nil), // 143: protowire.GetIncludingBlockOfTxResponseMessage - (*GetIncludingBlocksOfTxsRequestMessage)(nil), // 144: protowire.GetIncludingBlocksOfTxsRequestMessage - (*GetIncludingBlocksOfTxsResponseMessage)(nil), // 145: protowire.GetIncludingBlocksOfTxsResponseMessage - (*GetTxRequestMessage)(nil), // 146: protowire.GetTxRequestMessage - (*GetTxResponseMessage)(nil), // 147: protowire.GetTxResponseMessage - (*GetTxsRequestMessage)(nil), // 148: protowire.GetTxsRequestMessage - (*GetTxsResponseMessage)(nil), // 149: protowire.GetTxsResponseMessage - (*GetTxConfirmationsRequestMessage)(nil), // 150: protowire.GetTxConfirmationsRequestMessage - (*GetTxConfirmationsResponseMessage)(nil), // 151: protowire.GetTxConfirmationsResponseMessage - (*GetTxsConfirmationsRequestMessage)(nil), // 152: protowire.GetTxsConfirmationsRequestMessage - (*GetTxsConfirmationsResponseMessage)(nil), // 153: protowire.GetTxsConfirmationsResponseMessage + (*KaspadMessage)(nil), // 0: protowire.KaspadMessage + (*AddressesMessage)(nil), // 1: protowire.AddressesMessage + (*BlockMessage)(nil), // 2: protowire.BlockMessage + (*TransactionMessage)(nil), // 3: protowire.TransactionMessage + (*BlockLocatorMessage)(nil), // 4: protowire.BlockLocatorMessage + (*RequestAddressesMessage)(nil), // 5: protowire.RequestAddressesMessage + (*RequestRelayBlocksMessage)(nil), // 6: protowire.RequestRelayBlocksMessage + (*RequestTransactionsMessage)(nil), // 7: protowire.RequestTransactionsMessage + (*InvRelayBlockMessage)(nil), // 8: protowire.InvRelayBlockMessage + (*InvTransactionsMessage)(nil), // 9: protowire.InvTransactionsMessage + (*PingMessage)(nil), // 10: protowire.PingMessage + (*PongMessage)(nil), // 11: protowire.PongMessage + (*VerackMessage)(nil), // 12: protowire.VerackMessage + (*VersionMessage)(nil), // 13: protowire.VersionMessage + (*TransactionNotFoundMessage)(nil), // 14: protowire.TransactionNotFoundMessage + (*RejectMessage)(nil), // 15: protowire.RejectMessage + (*PruningPointUtxoSetChunkMessage)(nil), // 16: protowire.PruningPointUtxoSetChunkMessage + (*RequestIBDBlocksMessage)(nil), // 17: protowire.RequestIBDBlocksMessage + (*UnexpectedPruningPointMessage)(nil), // 18: protowire.UnexpectedPruningPointMessage + (*IbdBlockLocatorMessage)(nil), // 19: protowire.IbdBlockLocatorMessage + (*IbdBlockLocatorHighestHashMessage)(nil), // 20: protowire.IbdBlockLocatorHighestHashMessage + (*RequestNextPruningPointUtxoSetChunkMessage)(nil), // 21: protowire.RequestNextPruningPointUtxoSetChunkMessage + (*DonePruningPointUtxoSetChunksMessage)(nil), // 22: protowire.DonePruningPointUtxoSetChunksMessage + (*IbdBlockLocatorHighestHashNotFoundMessage)(nil), // 23: protowire.IbdBlockLocatorHighestHashNotFoundMessage + (*BlockWithTrustedDataMessage)(nil), // 24: protowire.BlockWithTrustedDataMessage + (*DoneBlocksWithTrustedDataMessage)(nil), // 25: protowire.DoneBlocksWithTrustedDataMessage + (*RequestPruningPointAndItsAnticoneMessage)(nil), // 26: protowire.RequestPruningPointAndItsAnticoneMessage + (*BlockHeadersMessage)(nil), // 27: protowire.BlockHeadersMessage + (*RequestNextHeadersMessage)(nil), // 28: protowire.RequestNextHeadersMessage + (*DoneHeadersMessage)(nil), // 29: protowire.DoneHeadersMessage + (*RequestPruningPointUTXOSetMessage)(nil), // 30: protowire.RequestPruningPointUTXOSetMessage + (*RequestHeadersMessage)(nil), // 31: protowire.RequestHeadersMessage + (*RequestBlockLocatorMessage)(nil), // 32: protowire.RequestBlockLocatorMessage + (*PruningPointsMessage)(nil), // 33: protowire.PruningPointsMessage + (*RequestPruningPointProofMessage)(nil), // 34: protowire.RequestPruningPointProofMessage + (*PruningPointProofMessage)(nil), // 35: protowire.PruningPointProofMessage + (*ReadyMessage)(nil), // 36: protowire.ReadyMessage + (*BlockWithTrustedDataV4Message)(nil), // 37: protowire.BlockWithTrustedDataV4Message + (*TrustedDataMessage)(nil), // 38: protowire.TrustedDataMessage + (*RequestIBDChainBlockLocatorMessage)(nil), // 39: protowire.RequestIBDChainBlockLocatorMessage + (*IbdChainBlockLocatorMessage)(nil), // 40: protowire.IbdChainBlockLocatorMessage + (*RequestAnticoneMessage)(nil), // 41: protowire.RequestAnticoneMessage + (*RequestNextPruningPointAndItsAnticoneBlocksMessage)(nil), // 42: protowire.RequestNextPruningPointAndItsAnticoneBlocksMessage + (*GetCurrentNetworkRequestMessage)(nil), // 43: protowire.GetCurrentNetworkRequestMessage + (*GetCurrentNetworkResponseMessage)(nil), // 44: protowire.GetCurrentNetworkResponseMessage + (*SubmitBlockRequestMessage)(nil), // 45: protowire.SubmitBlockRequestMessage + (*SubmitBlockResponseMessage)(nil), // 46: protowire.SubmitBlockResponseMessage + (*GetBlockTemplateRequestMessage)(nil), // 47: protowire.GetBlockTemplateRequestMessage + (*GetBlockTemplateResponseMessage)(nil), // 48: protowire.GetBlockTemplateResponseMessage + (*NotifyBlockAddedRequestMessage)(nil), // 49: protowire.NotifyBlockAddedRequestMessage + (*NotifyBlockAddedResponseMessage)(nil), // 50: protowire.NotifyBlockAddedResponseMessage + (*BlockAddedNotificationMessage)(nil), // 51: protowire.BlockAddedNotificationMessage + (*GetPeerAddressesRequestMessage)(nil), // 52: protowire.GetPeerAddressesRequestMessage + (*GetPeerAddressesResponseMessage)(nil), // 53: protowire.GetPeerAddressesResponseMessage + (*GetSelectedTipHashRequestMessage)(nil), // 54: protowire.GetSelectedTipHashRequestMessage + (*GetSelectedTipHashResponseMessage)(nil), // 55: protowire.GetSelectedTipHashResponseMessage + (*GetMempoolEntryRequestMessage)(nil), // 56: protowire.GetMempoolEntryRequestMessage + (*GetMempoolEntryResponseMessage)(nil), // 57: protowire.GetMempoolEntryResponseMessage + (*GetConnectedPeerInfoRequestMessage)(nil), // 58: protowire.GetConnectedPeerInfoRequestMessage + (*GetConnectedPeerInfoResponseMessage)(nil), // 59: protowire.GetConnectedPeerInfoResponseMessage + (*AddPeerRequestMessage)(nil), // 60: protowire.AddPeerRequestMessage + (*AddPeerResponseMessage)(nil), // 61: protowire.AddPeerResponseMessage + (*SubmitTransactionRequestMessage)(nil), // 62: protowire.SubmitTransactionRequestMessage + (*SubmitTransactionResponseMessage)(nil), // 63: protowire.SubmitTransactionResponseMessage + (*NotifyVirtualSelectedParentChainChangedRequestMessage)(nil), // 64: protowire.NotifyVirtualSelectedParentChainChangedRequestMessage + (*NotifyVirtualSelectedParentChainChangedResponseMessage)(nil), // 65: protowire.NotifyVirtualSelectedParentChainChangedResponseMessage + (*VirtualSelectedParentChainChangedNotificationMessage)(nil), // 66: protowire.VirtualSelectedParentChainChangedNotificationMessage + (*GetBlockRequestMessage)(nil), // 67: protowire.GetBlockRequestMessage + (*GetBlockResponseMessage)(nil), // 68: protowire.GetBlockResponseMessage + (*GetSubnetworkRequestMessage)(nil), // 69: protowire.GetSubnetworkRequestMessage + (*GetSubnetworkResponseMessage)(nil), // 70: protowire.GetSubnetworkResponseMessage + (*GetVirtualSelectedParentChainFromBlockRequestMessage)(nil), // 71: protowire.GetVirtualSelectedParentChainFromBlockRequestMessage + (*GetVirtualSelectedParentChainFromBlockResponseMessage)(nil), // 72: protowire.GetVirtualSelectedParentChainFromBlockResponseMessage + (*GetBlocksRequestMessage)(nil), // 73: protowire.GetBlocksRequestMessage + (*GetBlocksResponseMessage)(nil), // 74: protowire.GetBlocksResponseMessage + (*GetBlockCountRequestMessage)(nil), // 75: protowire.GetBlockCountRequestMessage + (*GetBlockCountResponseMessage)(nil), // 76: protowire.GetBlockCountResponseMessage + (*GetBlockDagInfoRequestMessage)(nil), // 77: protowire.GetBlockDagInfoRequestMessage + (*GetBlockDagInfoResponseMessage)(nil), // 78: protowire.GetBlockDagInfoResponseMessage + (*ResolveFinalityConflictRequestMessage)(nil), // 79: protowire.ResolveFinalityConflictRequestMessage + (*ResolveFinalityConflictResponseMessage)(nil), // 80: protowire.ResolveFinalityConflictResponseMessage + (*NotifyFinalityConflictsRequestMessage)(nil), // 81: protowire.NotifyFinalityConflictsRequestMessage + (*NotifyFinalityConflictsResponseMessage)(nil), // 82: protowire.NotifyFinalityConflictsResponseMessage + (*FinalityConflictNotificationMessage)(nil), // 83: protowire.FinalityConflictNotificationMessage + (*FinalityConflictResolvedNotificationMessage)(nil), // 84: protowire.FinalityConflictResolvedNotificationMessage + (*GetMempoolEntriesRequestMessage)(nil), // 85: protowire.GetMempoolEntriesRequestMessage + (*GetMempoolEntriesResponseMessage)(nil), // 86: protowire.GetMempoolEntriesResponseMessage + (*ShutDownRequestMessage)(nil), // 87: protowire.ShutDownRequestMessage + (*ShutDownResponseMessage)(nil), // 88: protowire.ShutDownResponseMessage + (*GetHeadersRequestMessage)(nil), // 89: protowire.GetHeadersRequestMessage + (*GetHeadersResponseMessage)(nil), // 90: protowire.GetHeadersResponseMessage + (*NotifyUtxosChangedRequestMessage)(nil), // 91: protowire.NotifyUtxosChangedRequestMessage + (*NotifyUtxosChangedResponseMessage)(nil), // 92: protowire.NotifyUtxosChangedResponseMessage + (*UtxosChangedNotificationMessage)(nil), // 93: protowire.UtxosChangedNotificationMessage + (*GetUtxosByAddressesRequestMessage)(nil), // 94: protowire.GetUtxosByAddressesRequestMessage + (*GetUtxosByAddressesResponseMessage)(nil), // 95: protowire.GetUtxosByAddressesResponseMessage + (*GetVirtualSelectedParentBlueScoreRequestMessage)(nil), // 96: protowire.GetVirtualSelectedParentBlueScoreRequestMessage + (*GetVirtualSelectedParentBlueScoreResponseMessage)(nil), // 97: protowire.GetVirtualSelectedParentBlueScoreResponseMessage + (*NotifyVirtualSelectedParentBlueScoreChangedRequestMessage)(nil), // 98: protowire.NotifyVirtualSelectedParentBlueScoreChangedRequestMessage + (*NotifyVirtualSelectedParentBlueScoreChangedResponseMessage)(nil), // 99: protowire.NotifyVirtualSelectedParentBlueScoreChangedResponseMessage + (*VirtualSelectedParentBlueScoreChangedNotificationMessage)(nil), // 100: protowire.VirtualSelectedParentBlueScoreChangedNotificationMessage + (*BanRequestMessage)(nil), // 101: protowire.BanRequestMessage + (*BanResponseMessage)(nil), // 102: protowire.BanResponseMessage + (*UnbanRequestMessage)(nil), // 103: protowire.UnbanRequestMessage + (*UnbanResponseMessage)(nil), // 104: protowire.UnbanResponseMessage + (*GetInfoRequestMessage)(nil), // 105: protowire.GetInfoRequestMessage + (*GetInfoResponseMessage)(nil), // 106: protowire.GetInfoResponseMessage + (*StopNotifyingUtxosChangedRequestMessage)(nil), // 107: protowire.StopNotifyingUtxosChangedRequestMessage + (*StopNotifyingUtxosChangedResponseMessage)(nil), // 108: protowire.StopNotifyingUtxosChangedResponseMessage + (*NotifyPruningPointUTXOSetOverrideRequestMessage)(nil), // 109: protowire.NotifyPruningPointUTXOSetOverrideRequestMessage + (*NotifyPruningPointUTXOSetOverrideResponseMessage)(nil), // 110: protowire.NotifyPruningPointUTXOSetOverrideResponseMessage + (*PruningPointUTXOSetOverrideNotificationMessage)(nil), // 111: protowire.PruningPointUTXOSetOverrideNotificationMessage + (*StopNotifyingPruningPointUTXOSetOverrideRequestMessage)(nil), // 112: protowire.StopNotifyingPruningPointUTXOSetOverrideRequestMessage + (*StopNotifyingPruningPointUTXOSetOverrideResponseMessage)(nil), // 113: protowire.StopNotifyingPruningPointUTXOSetOverrideResponseMessage + (*EstimateNetworkHashesPerSecondRequestMessage)(nil), // 114: protowire.EstimateNetworkHashesPerSecondRequestMessage + (*EstimateNetworkHashesPerSecondResponseMessage)(nil), // 115: protowire.EstimateNetworkHashesPerSecondResponseMessage + (*NotifyVirtualDaaScoreChangedRequestMessage)(nil), // 116: protowire.NotifyVirtualDaaScoreChangedRequestMessage + (*NotifyVirtualDaaScoreChangedResponseMessage)(nil), // 117: protowire.NotifyVirtualDaaScoreChangedResponseMessage + (*VirtualDaaScoreChangedNotificationMessage)(nil), // 118: protowire.VirtualDaaScoreChangedNotificationMessage + (*GetBalanceByAddressRequestMessage)(nil), // 119: protowire.GetBalanceByAddressRequestMessage + (*GetBalanceByAddressResponseMessage)(nil), // 120: protowire.GetBalanceByAddressResponseMessage + (*GetBalancesByAddressesRequestMessage)(nil), // 121: protowire.GetBalancesByAddressesRequestMessage + (*GetBalancesByAddressesResponseMessage)(nil), // 122: protowire.GetBalancesByAddressesResponseMessage + (*NotifyNewBlockTemplateRequestMessage)(nil), // 123: protowire.NotifyNewBlockTemplateRequestMessage + (*NotifyNewBlockTemplateResponseMessage)(nil), // 124: protowire.NotifyNewBlockTemplateResponseMessage + (*NewBlockTemplateNotificationMessage)(nil), // 125: protowire.NewBlockTemplateNotificationMessage + (*GetMempoolEntriesByAddressesRequestMessage)(nil), // 126: protowire.GetMempoolEntriesByAddressesRequestMessage + (*GetMempoolEntriesByAddressesResponseMessage)(nil), // 127: protowire.GetMempoolEntriesByAddressesResponseMessage + (*GetCoinSupplyRequestMessage)(nil), // 128: protowire.GetCoinSupplyRequestMessage + (*GetCoinSupplyResponseMessage)(nil), // 129: protowire.GetCoinSupplyResponseMessage + (*GetAcceptingBlockHashOfTxRequestMessage)(nil), // 130: protowire.GetAcceptingBlockHashOfTxRequestMessage + (*GetAcceptingBlockHashOfTxResponseMessage)(nil), // 131: protowire.GetAcceptingBlockHashOfTxResponseMessage + (*GetAcceptingBlockHashesOfTxsRequestMessage)(nil), // 132: protowire.GetAcceptingBlockHashesOfTxsRequestMessage + (*GetAcceptingBlockHashesOfTxsResponseMessage)(nil), // 133: protowire.GetAcceptingBlockHashesOfTxsResponseMessage + (*GetAcceptingBlockOfTxRequestMessage)(nil), // 134: protowire.GetAcceptingBlockOfTxRequestMessage + (*GetAcceptingBlockOfTxResponseMessage)(nil), // 135: protowire.GetAcceptingBlockOfTxResponseMessage + (*GetAcceptingBlocksOfTxsRequestMessage)(nil), // 136: protowire.GetAcceptingBlocksOfTxsRequestMessage + (*GetAcceptingBlocksOfTxsResponseMessage)(nil), // 137: protowire.GetAcceptingBlocksOfTxsResponseMessage + (*GetIncludingBlockHashOfTxRequestMessage)(nil), // 138: protowire.GetIncludingBlockHashOfTxRequestMessage + (*GetIncludingBlockHashOfTxResponseMessage)(nil), // 139: protowire.GetIncludingBlockHashOfTxResponseMessage + (*GetIncludingBlockHashesOfTxsRequestMessage)(nil), // 140: protowire.GetIncludingBlockHashesOfTxsRequestMessage + (*GetIncludingBlockHashesOfTxsResponseMessage)(nil), // 141: protowire.GetIncludingBlockHashesOfTxsResponseMessage + (*GetIncludingBlockOfTxRequestMessage)(nil), // 142: protowire.GetIncludingBlockOfTxRequestMessage + (*GetIncludingBlockOfTxResponseMessage)(nil), // 143: protowire.GetIncludingBlockOfTxResponseMessage + (*GetIncludingBlocksOfTxsRequestMessage)(nil), // 144: protowire.GetIncludingBlocksOfTxsRequestMessage + (*GetIncludingBlocksOfTxsResponseMessage)(nil), // 145: protowire.GetIncludingBlocksOfTxsResponseMessage + (*GetTxRequestMessage)(nil), // 146: protowire.GetTxRequestMessage + (*GetTxResponseMessage)(nil), // 147: protowire.GetTxResponseMessage + (*GetTxsRequestMessage)(nil), // 148: protowire.GetTxsRequestMessage + (*GetTxsResponseMessage)(nil), // 149: protowire.GetTxsResponseMessage + (*GetTxConfirmationsRequestMessage)(nil), // 150: protowire.GetTxConfirmationsRequestMessage + (*GetTxConfirmationsResponseMessage)(nil), // 151: protowire.GetTxConfirmationsResponseMessage + (*GetTxsConfirmationsRequestMessage)(nil), // 152: protowire.GetTxsConfirmationsRequestMessage + (*GetTxsConfirmationsResponseMessage)(nil), // 153: protowire.GetTxsConfirmationsResponseMessage + (*NotifyTxsConfirmationChangedRequstMessage)(nil), // 154: protowire.NotifyTxsConfirmationChangedRequstMessage + (*NotifyTxsConfirmationChangedResponseMessage)(nil), // 155: protowire.NotifyTxsConfirmationChangedResponseMessage + (*StopNotifyTxsConfirmationChangedRequestMessage)(nil), // 156: protowire.StopNotifyTxsConfirmationChangedRequestMessage + (*StopNotifyTxsConfirmationChangedResponseMessage)(nil), // 157: protowire.StopNotifyTxsConfirmationChangedResponseMessage + (*StartNotifyTxsConfirmationChangedRequestMessage)(nil), // 158: protowire.StartNotifyTxsConfirmationChangedRequestMessage + (*StartNotifyTxsConfirmationChangedResponseMessage)(nil), // 159: protowire.StartNotifyTxsConfirmationChangedResponseMessage + (*ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage)(nil), // 160: protowire.ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage + (*TxsConfirmationChangedNotficationMessage)(nil), // 161: protowire.TxsConfirmationChangedNotficationMessage + (*NotifyTxListenerRequestMessage)(nil), // 162: protowire.NotifyTxListenerRequestMessage + (*StopNotifyTxListenerRequestMessage)(nil), // 163: protowire.StopNotifyTxListenerRequestMessage + (*StopNotifyTxListenerResponseMessage)(nil), // 164: protowire.StopNotifyTxListenerResponseMessage + (*StartNotifyTxListenerRequestMessage)(nil), // 165: protowire.StartNotifyTxListenerRequestMessage + (*StartNotifyTxListenerResponseMessage)(nil), // 166: protowire.StartNotifyTxListenerResponseMessage + (*ChangeNotifyTxListenerRequiredConfirmationsRequestMessage)(nil), // 167: protowire.ChangeNotifyTxListenerRequiredConfirmationsRequestMessage + (*ChangeNotifyTxListenerRequiredConfirmationsResponseMessage)(nil), // 168: protowire.ChangeNotifyTxListenerRequiredConfirmationsResponseMessage + (*TxListenerNotificationMessage)(nil), // 169: protowire.TxListenerNotificationMessage } var file_messages_proto_depIdxs = []int32{ 1, // 0: protowire.KaspadMessage.addresses:type_name -> protowire.AddressesMessage @@ -3627,15 +4030,31 @@ var file_messages_proto_depIdxs = []int32{ 151, // 151: protowire.KaspadMessage.getTxConfirmationsResponse:type_name -> protowire.GetTxConfirmationsResponseMessage 152, // 152: protowire.KaspadMessage.getTxsConfirmationsRequest:type_name -> protowire.GetTxsConfirmationsRequestMessage 153, // 153: protowire.KaspadMessage.getTxsConfirmationsResponse:type_name -> protowire.GetTxsConfirmationsResponseMessage - 0, // 154: protowire.P2P.MessageStream:input_type -> protowire.KaspadMessage - 0, // 155: protowire.RPC.MessageStream:input_type -> protowire.KaspadMessage - 0, // 156: protowire.P2P.MessageStream:output_type -> protowire.KaspadMessage - 0, // 157: protowire.RPC.MessageStream:output_type -> protowire.KaspadMessage - 156, // [156:158] is the sub-list for method output_type - 154, // [154:156] is the sub-list for method input_type - 154, // [154:154] is the sub-list for extension type_name - 154, // [154:154] is the sub-list for extension extendee - 0, // [0:154] is the sub-list for field type_name + 154, // 154: protowire.KaspadMessage.notifyTxsConfirmationChangedRequstMessage:type_name -> protowire.NotifyTxsConfirmationChangedRequstMessage + 155, // 155: protowire.KaspadMessage.notifyTxsConfirmationChangedResponseMessage:type_name -> protowire.NotifyTxsConfirmationChangedResponseMessage + 156, // 156: protowire.KaspadMessage.stopNotifyTxsConfirmationChangedRequestMessage:type_name -> protowire.StopNotifyTxsConfirmationChangedRequestMessage + 157, // 157: protowire.KaspadMessage.stopNotifyTxsConfirmationChangedResponseMessage:type_name -> protowire.StopNotifyTxsConfirmationChangedResponseMessage + 158, // 158: protowire.KaspadMessage.startNotifyTxsConfirmationChangedRequestMessage:type_name -> protowire.StartNotifyTxsConfirmationChangedRequestMessage + 159, // 159: protowire.KaspadMessage.startNotifyTxsConfirmationChangedResponseMessage:type_name -> protowire.StartNotifyTxsConfirmationChangedResponseMessage + 160, // 160: protowire.KaspadMessage.changeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage:type_name -> protowire.ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage + 161, // 161: protowire.KaspadMessage.txsConfirmationChangedNotficationMessage:type_name -> protowire.TxsConfirmationChangedNotficationMessage + 162, // 162: protowire.KaspadMessage.notifyTxListenerRequestMessage:type_name -> protowire.NotifyTxListenerRequestMessage + 163, // 163: protowire.KaspadMessage.stopNotifyTxListenerRequestMessage:type_name -> protowire.StopNotifyTxListenerRequestMessage + 164, // 164: protowire.KaspadMessage.stopNotifyTxListenerResponseMessage:type_name -> protowire.StopNotifyTxListenerResponseMessage + 165, // 165: protowire.KaspadMessage.startNotifyTxListenerRequestMessage:type_name -> protowire.StartNotifyTxListenerRequestMessage + 166, // 166: protowire.KaspadMessage.startNotifyTxListenerResponseMessage:type_name -> protowire.StartNotifyTxListenerResponseMessage + 167, // 167: protowire.KaspadMessage.changeNotifyTxListenerRequiredConfirmationsRequestMessage:type_name -> protowire.ChangeNotifyTxListenerRequiredConfirmationsRequestMessage + 168, // 168: protowire.KaspadMessage.changeNotifyTxListenerRequiredConfirmationsResponseMessage:type_name -> protowire.ChangeNotifyTxListenerRequiredConfirmationsResponseMessage + 169, // 169: protowire.KaspadMessage.txListenerNotificationMessage:type_name -> protowire.TxListenerNotificationMessage + 0, // 170: protowire.P2P.MessageStream:input_type -> protowire.KaspadMessage + 0, // 171: protowire.RPC.MessageStream:input_type -> protowire.KaspadMessage + 0, // 172: protowire.P2P.MessageStream:output_type -> protowire.KaspadMessage + 0, // 173: protowire.RPC.MessageStream:output_type -> protowire.KaspadMessage + 172, // [172:174] is the sub-list for method output_type + 170, // [170:172] is the sub-list for method input_type + 170, // [170:170] is the sub-list for extension type_name + 170, // [170:170] is the sub-list for extension extendee + 0, // [0:170] is the sub-list for field type_name } func init() { file_messages_proto_init() } @@ -3814,6 +4233,22 @@ func file_messages_proto_init() { (*KaspadMessage_GetTxConfirmationsResponse)(nil), (*KaspadMessage_GetTxsConfirmationsRequest)(nil), (*KaspadMessage_GetTxsConfirmationsResponse)(nil), + (*KaspadMessage_NotifyTxsConfirmationChangedRequstMessage)(nil), + (*KaspadMessage_NotifyTxsConfirmationChangedResponseMessage)(nil), + (*KaspadMessage_StopNotifyTxsConfirmationChangedRequestMessage)(nil), + (*KaspadMessage_StopNotifyTxsConfirmationChangedResponseMessage)(nil), + (*KaspadMessage_StartNotifyTxsConfirmationChangedRequestMessage)(nil), + (*KaspadMessage_StartNotifyTxsConfirmationChangedResponseMessage)(nil), + (*KaspadMessage_ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage)(nil), + (*KaspadMessage_TxsConfirmationChangedNotficationMessage)(nil), + (*KaspadMessage_NotifyTxListenerRequestMessage)(nil), + (*KaspadMessage_StopNotifyTxListenerRequestMessage)(nil), + (*KaspadMessage_StopNotifyTxListenerResponseMessage)(nil), + (*KaspadMessage_StartNotifyTxListenerRequestMessage)(nil), + (*KaspadMessage_StartNotifyTxListenerResponseMessage)(nil), + (*KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsRequestMessage)(nil), + (*KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsResponseMessage)(nil), + (*KaspadMessage_TxListenerNotificationMessage)(nil), } type x struct{} out := protoimpl.TypeBuilder{ diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto index 3882909697..21b92e409f 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto @@ -164,6 +164,23 @@ message KaspadMessage { GetTxConfirmationsResponseMessage getTxConfirmationsResponse = 1109; GetTxsConfirmationsRequestMessage getTxsConfirmationsRequest = 1110; GetTxsConfirmationsResponseMessage getTxsConfirmationsResponse = 1111; + NotifyTxsConfirmationChangedRequstMessage notifyTxsConfirmationChangedRequstMessage = 1112; + NotifyTxsConfirmationChangedResponseMessage notifyTxsConfirmationChangedResponseMessage = 1113; + StopNotifyTxsConfirmationChangedRequestMessage stopNotifyTxsConfirmationChangedRequestMessage = 1114; + StopNotifyTxsConfirmationChangedResponseMessage stopNotifyTxsConfirmationChangedResponseMessage = 1115; + StartNotifyTxsConfirmationChangedRequestMessage startNotifyTxsConfirmationChangedRequestMessage= 1116; + StartNotifyTxsConfirmationChangedResponseMessage startNotifyTxsConfirmationChangedResponseMessage = 1117; + ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage changeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage = 1118; + TxsConfirmationChangedNotficationMessage txsConfirmationChangedNotficationMessage = 1119; + NotifyTxListenerRequestMessage notifyTxListenerRequestMessage = 1120; + StopNotifyTxListenerRequestMessage stopNotifyTxListenerRequestMessage = 1121; + StopNotifyTxListenerResponseMessage stopNotifyTxListenerResponseMessage = 1122; + StartNotifyTxListenerRequestMessage startNotifyTxListenerRequestMessage = 1123; + StartNotifyTxListenerResponseMessage startNotifyTxListenerResponseMessage = 1124; + ChangeNotifyTxListenerRequiredConfirmationsRequestMessage changeNotifyTxListenerRequiredConfirmationsRequestMessage = 1125; + ChangeNotifyTxListenerRequiredConfirmationsResponseMessage changeNotifyTxListenerRequiredConfirmationsResponseMessage = 1126; + TxListenerNotificationMessage txListenerNotificationMessage = 1127; + } } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md index 62f0965cf2..408ce242be 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md @@ -139,6 +139,29 @@ - [GetTxConfirmationsResponseMessage](#protowire.GetTxConfirmationsResponseMessage) - [GetTxsConfirmationsRequestMessage](#protowire.GetTxsConfirmationsRequestMessage) - [GetTxsConfirmationsResponseMessage](#protowire.GetTxsConfirmationsResponseMessage) + - [NotifyTxsConfirmationChangedRequstMessage](#protowire.NotifyTxsConfirmationChangedRequstMessage) + - [NotifyTxsConfirmationChangedResponseMessage](#protowire.NotifyTxsConfirmationChangedResponseMessage) + - [TxsConfirmationChangedNotficationMessage](#protowire.TxsConfirmationChangedNotficationMessage) + - [TxsConfirmationChangedNotficationMessage.Pending](#protowire.TxsConfirmationChangedNotficationMessage.Pending) + - [TxsConfirmationChangedNotficationMessage.Confirmed](#protowire.TxsConfirmationChangedNotficationMessage.Confirmed) + - [StopNotifyTxsConfirmationChangedRequestMessage](#protowire.StopNotifyTxsConfirmationChangedRequestMessage) + - [StopNotifyTxsConfirmationChangedResponseMessage](#protowire.StopNotifyTxsConfirmationChangedResponseMessage) + - [StartNotifyTxsConfirmationChangedRequestMessage](#protowire.StartNotifyTxsConfirmationChangedRequestMessage) + - [StartNotifyTxsConfirmationChangedResponseMessage](#protowire.StartNotifyTxsConfirmationChangedResponseMessage) + - [ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage](#protowire.ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage) + - [ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage](#protowire.ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage) + - [TxEntryByAddress](#protowire.TxEntryByAddress) + - [NotifyTxListenerRequestMessage](#protowire.NotifyTxListenerRequestMessage) + - [NotifyTxListenerResponseMessage](#protowire.NotifyTxListenerResponseMessage) + - [StopNotifyTxListenerRequestMessage](#protowire.StopNotifyTxListenerRequestMessage) + - [StopNotifyTxListenerResponseMessage](#protowire.StopNotifyTxListenerResponseMessage) + - [StartNotifyTxListenerRequestMessage](#protowire.StartNotifyTxListenerRequestMessage) + - [StartNotifyTxListenerResponseMessage](#protowire.StartNotifyTxListenerResponseMessage) + - [ChangeNotifyTxListenerRequiredConfirmationsRequestMessage](#protowire.ChangeNotifyTxListenerRequiredConfirmationsRequestMessage) + - [ChangeNotifyTxListenerRequiredConfirmationsResponseMessage](#protowire.ChangeNotifyTxListenerRequiredConfirmationsResponseMessage) + - [TxListenerNotificationMessage](#protowire.TxListenerNotificationMessage) + - [TxListenerNotificationMessage.Pending](#protowire.TxListenerNotificationMessage.Pending) + - [TxListenerNotificationMessage.Confirmed](#protowire.TxListenerNotificationMessage.Confirmed) - [SubmitBlockResponseMessage.RejectReason](#protowire.SubmitBlockResponseMessage.RejectReason) @@ -2308,6 +2331,323 @@ See NotifyNewBlockTemplateRequestMessage + + + +### NotifyTxsConfirmationChangedRequstMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| TxIDs | [string](#string) | repeated | | +| requiredConfirmations | [uint32](#uint32) | | | +| includePending | [bool](#bool) | | | + + + + + + + + +### NotifyTxsConfirmationChangedResponseMessage + + + + + + + + + +### TxsConfirmationChangedNotficationMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| pending | [TxsConfirmationChangedNotficationMessage.Pending](#protowire.TxsConfirmationChangedNotficationMessage.Pending) | repeated | | +| confirmed | [TxsConfirmationChangedNotficationMessage.Confirmed](#protowire.TxsConfirmationChangedNotficationMessage.Confirmed) | repeated | | +| error | [RPCError](#protowire.RPCError) | | | + + + + + + + + +### TxsConfirmationChangedNotficationMessage.Pending + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txIDConfirmationsPairs | [RpcTxIDConfirmationsPair](#protowire.RpcTxIDConfirmationsPair) | repeated | | + + + + + + + + +### TxsConfirmationChangedNotficationMessage.Confirmed + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| txIDConfirmationsPairs | [RpcTxIDConfirmationsPair](#protowire.RpcTxIDConfirmationsPair) | repeated | | + + + + + + + + +### StopNotifyTxsConfirmationChangedRequestMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| TxIDs | [string](#string) | repeated | | + + + + + + + + +### StopNotifyTxsConfirmationChangedResponseMessage + + + + + + + + + +### StartNotifyTxsConfirmationChangedRequestMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| TxIDs | [string](#string) | repeated | | + + + + + + + + +### StartNotifyTxsConfirmationChangedResponseMessage + + + + + + + + + +### ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| requiredConfirmations | [uint32](#uint32) | | | + + + + + + + + +### ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage + + + + + + + + + +### TxEntryByAddress + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| address | [string](#string) | | | +| txId | [string](#string) | | | +| confirmations | [uint32](#uint32) | | | + + + + + + + + +### NotifyTxListenerRequestMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| addresses | [string](#string) | repeated | | +| requiredConfirmations | [uint32](#uint32) | | | +| includePending | [bool](#bool) | | | + + + + + + + + +### NotifyTxListenerResponseMessage + + + + + + + + + +### StopNotifyTxListenerRequestMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| addresses | [string](#string) | repeated | | + + + + + + + + +### StopNotifyTxListenerResponseMessage + + + + + + + + + +### StartNotifyTxListenerRequestMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| addresses | [string](#string) | repeated | | + + + + + + + + +### StartNotifyTxListenerResponseMessage + + + + + + + + + +### ChangeNotifyTxListenerRequiredConfirmationsRequestMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| requiredConfirmations | [uint32](#uint32) | | | + + + + + + + + +### ChangeNotifyTxListenerRequiredConfirmationsResponseMessage + + + + + + + + + +### TxListenerNotificationMessage + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| pending | [TxListenerNotificationMessage.Pending](#protowire.TxListenerNotificationMessage.Pending) | | | +| confirmed | [TxListenerNotificationMessage.Confirmed](#protowire.TxListenerNotificationMessage.Confirmed) | | | + + + + + + + + +### TxListenerNotificationMessage.Pending + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| sent | [TxEntryByAddress](#protowire.TxEntryByAddress) | repeated | | +| received | [TxEntryByAddress](#protowire.TxEntryByAddress) | repeated | | + + + + + + + + +### TxListenerNotificationMessage.Confirmed + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| requiredConfirmations | [uint32](#uint32) | | | +| sent | [TxEntryByAddress](#protowire.TxEntryByAddress) | repeated | | +| received | [TxEntryByAddress](#protowire.TxEntryByAddress) | repeated | | + + + + + diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go index 3a713a2759..c1a5a053ef 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go @@ -7534,6 +7534,1111 @@ func (x *GetTxsConfirmationsResponseMessage) GetError() *RPCError { return nil } +type NotifyTxsConfirmationChangedRequstMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxIDs []string `protobuf:"bytes,1,rep,name=TxIDs,proto3" json:"TxIDs,omitempty"` + RequiredConfirmations uint32 `protobuf:"varint,2,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` + IncludePending bool `protobuf:"varint,3,opt,name=includePending,proto3" json:"includePending,omitempty"` +} + +func (x *NotifyTxsConfirmationChangedRequstMessage) Reset() { + *x = NotifyTxsConfirmationChangedRequstMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[135] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NotifyTxsConfirmationChangedRequstMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NotifyTxsConfirmationChangedRequstMessage) ProtoMessage() {} + +func (x *NotifyTxsConfirmationChangedRequstMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[135] + 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 NotifyTxsConfirmationChangedRequstMessage.ProtoReflect.Descriptor instead. +func (*NotifyTxsConfirmationChangedRequstMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{135} +} + +func (x *NotifyTxsConfirmationChangedRequstMessage) GetTxIDs() []string { + if x != nil { + return x.TxIDs + } + return nil +} + +func (x *NotifyTxsConfirmationChangedRequstMessage) GetRequiredConfirmations() uint32 { + if x != nil { + return x.RequiredConfirmations + } + return 0 +} + +func (x *NotifyTxsConfirmationChangedRequstMessage) GetIncludePending() bool { + if x != nil { + return x.IncludePending + } + return false +} + +type NotifyTxsConfirmationChangedResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *NotifyTxsConfirmationChangedResponseMessage) Reset() { + *x = NotifyTxsConfirmationChangedResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[136] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NotifyTxsConfirmationChangedResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NotifyTxsConfirmationChangedResponseMessage) ProtoMessage() {} + +func (x *NotifyTxsConfirmationChangedResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[136] + 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 NotifyTxsConfirmationChangedResponseMessage.ProtoReflect.Descriptor instead. +func (*NotifyTxsConfirmationChangedResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{136} +} + +type TxsConfirmationChangedNotficationMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pending []*TxsConfirmationChangedNotficationMessage_Pending `protobuf:"bytes,1,rep,name=pending,proto3" json:"pending,omitempty"` + Confirmed []*TxsConfirmationChangedNotficationMessage_Confirmed `protobuf:"bytes,2,rep,name=confirmed,proto3" json:"confirmed,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *TxsConfirmationChangedNotficationMessage) Reset() { + *x = TxsConfirmationChangedNotficationMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[137] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TxsConfirmationChangedNotficationMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TxsConfirmationChangedNotficationMessage) ProtoMessage() {} + +func (x *TxsConfirmationChangedNotficationMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[137] + 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 TxsConfirmationChangedNotficationMessage.ProtoReflect.Descriptor instead. +func (*TxsConfirmationChangedNotficationMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{137} +} + +func (x *TxsConfirmationChangedNotficationMessage) GetPending() []*TxsConfirmationChangedNotficationMessage_Pending { + if x != nil { + return x.Pending + } + return nil +} + +func (x *TxsConfirmationChangedNotficationMessage) GetConfirmed() []*TxsConfirmationChangedNotficationMessage_Confirmed { + if x != nil { + return x.Confirmed + } + return nil +} + +func (x *TxsConfirmationChangedNotficationMessage) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + +type StopNotifyTxsConfirmationChangedRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxIDs []string `protobuf:"bytes,1,rep,name=TxIDs,proto3" json:"TxIDs,omitempty"` +} + +func (x *StopNotifyTxsConfirmationChangedRequestMessage) Reset() { + *x = StopNotifyTxsConfirmationChangedRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[138] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StopNotifyTxsConfirmationChangedRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StopNotifyTxsConfirmationChangedRequestMessage) ProtoMessage() {} + +func (x *StopNotifyTxsConfirmationChangedRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[138] + 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 StopNotifyTxsConfirmationChangedRequestMessage.ProtoReflect.Descriptor instead. +func (*StopNotifyTxsConfirmationChangedRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{138} +} + +func (x *StopNotifyTxsConfirmationChangedRequestMessage) GetTxIDs() []string { + if x != nil { + return x.TxIDs + } + return nil +} + +type StopNotifyTxsConfirmationChangedResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *StopNotifyTxsConfirmationChangedResponseMessage) Reset() { + *x = StopNotifyTxsConfirmationChangedResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[139] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StopNotifyTxsConfirmationChangedResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StopNotifyTxsConfirmationChangedResponseMessage) ProtoMessage() {} + +func (x *StopNotifyTxsConfirmationChangedResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[139] + 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 StopNotifyTxsConfirmationChangedResponseMessage.ProtoReflect.Descriptor instead. +func (*StopNotifyTxsConfirmationChangedResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{139} +} + +type StartNotifyTxsConfirmationChangedRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxIDs []string `protobuf:"bytes,1,rep,name=TxIDs,proto3" json:"TxIDs,omitempty"` +} + +func (x *StartNotifyTxsConfirmationChangedRequestMessage) Reset() { + *x = StartNotifyTxsConfirmationChangedRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[140] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartNotifyTxsConfirmationChangedRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartNotifyTxsConfirmationChangedRequestMessage) ProtoMessage() {} + +func (x *StartNotifyTxsConfirmationChangedRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[140] + 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 StartNotifyTxsConfirmationChangedRequestMessage.ProtoReflect.Descriptor instead. +func (*StartNotifyTxsConfirmationChangedRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{140} +} + +func (x *StartNotifyTxsConfirmationChangedRequestMessage) GetTxIDs() []string { + if x != nil { + return x.TxIDs + } + return nil +} + +type StartNotifyTxsConfirmationChangedResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *StartNotifyTxsConfirmationChangedResponseMessage) Reset() { + *x = StartNotifyTxsConfirmationChangedResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[141] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartNotifyTxsConfirmationChangedResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartNotifyTxsConfirmationChangedResponseMessage) ProtoMessage() {} + +func (x *StartNotifyTxsConfirmationChangedResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[141] + 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 StartNotifyTxsConfirmationChangedResponseMessage.ProtoReflect.Descriptor instead. +func (*StartNotifyTxsConfirmationChangedResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{141} +} + +type ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RequiredConfirmations uint32 `protobuf:"varint,1,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` +} + +func (x *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage) Reset() { + *x = ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[142] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage) ProtoMessage() {} + +func (x *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[142] + 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 ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage.ProtoReflect.Descriptor instead. +func (*ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{142} +} + +func (x *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage) GetRequiredConfirmations() uint32 { + if x != nil { + return x.RequiredConfirmations + } + return 0 +} + +type ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage) Reset() { + *x = ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[143] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage) ProtoMessage() {} + +func (x *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[143] + 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 ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage.ProtoReflect.Descriptor instead. +func (*ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{143} +} + +type TxEntryByAddress struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + TxId string `protobuf:"bytes,2,opt,name=txId,proto3" json:"txId,omitempty"` + Confirmations uint32 `protobuf:"varint,3,opt,name=confirmations,proto3" json:"confirmations,omitempty"` +} + +func (x *TxEntryByAddress) Reset() { + *x = TxEntryByAddress{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[144] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TxEntryByAddress) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TxEntryByAddress) ProtoMessage() {} + +func (x *TxEntryByAddress) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[144] + 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 TxEntryByAddress.ProtoReflect.Descriptor instead. +func (*TxEntryByAddress) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{144} +} + +func (x *TxEntryByAddress) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *TxEntryByAddress) GetTxId() string { + if x != nil { + return x.TxId + } + return "" +} + +func (x *TxEntryByAddress) GetConfirmations() uint32 { + if x != nil { + return x.Confirmations + } + return 0 +} + +type NotifyTxListenerRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` + RequiredConfirmations uint32 `protobuf:"varint,2,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` + IncludePending bool `protobuf:"varint,3,opt,name=includePending,proto3" json:"includePending,omitempty"` +} + +func (x *NotifyTxListenerRequestMessage) Reset() { + *x = NotifyTxListenerRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[145] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NotifyTxListenerRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NotifyTxListenerRequestMessage) ProtoMessage() {} + +func (x *NotifyTxListenerRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[145] + 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 NotifyTxListenerRequestMessage.ProtoReflect.Descriptor instead. +func (*NotifyTxListenerRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{145} +} + +func (x *NotifyTxListenerRequestMessage) GetAddresses() []string { + if x != nil { + return x.Addresses + } + return nil +} + +func (x *NotifyTxListenerRequestMessage) GetRequiredConfirmations() uint32 { + if x != nil { + return x.RequiredConfirmations + } + return 0 +} + +func (x *NotifyTxListenerRequestMessage) GetIncludePending() bool { + if x != nil { + return x.IncludePending + } + return false +} + +type NotifyTxListenerResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *NotifyTxListenerResponseMessage) Reset() { + *x = NotifyTxListenerResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[146] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NotifyTxListenerResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NotifyTxListenerResponseMessage) ProtoMessage() {} + +func (x *NotifyTxListenerResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[146] + 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 NotifyTxListenerResponseMessage.ProtoReflect.Descriptor instead. +func (*NotifyTxListenerResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{146} +} + +type StopNotifyTxListenerRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` +} + +func (x *StopNotifyTxListenerRequestMessage) Reset() { + *x = StopNotifyTxListenerRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[147] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StopNotifyTxListenerRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StopNotifyTxListenerRequestMessage) ProtoMessage() {} + +func (x *StopNotifyTxListenerRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[147] + 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 StopNotifyTxListenerRequestMessage.ProtoReflect.Descriptor instead. +func (*StopNotifyTxListenerRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{147} +} + +func (x *StopNotifyTxListenerRequestMessage) GetAddresses() []string { + if x != nil { + return x.Addresses + } + return nil +} + +type StopNotifyTxListenerResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *StopNotifyTxListenerResponseMessage) Reset() { + *x = StopNotifyTxListenerResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[148] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StopNotifyTxListenerResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StopNotifyTxListenerResponseMessage) ProtoMessage() {} + +func (x *StopNotifyTxListenerResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[148] + 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 StopNotifyTxListenerResponseMessage.ProtoReflect.Descriptor instead. +func (*StopNotifyTxListenerResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{148} +} + +type StartNotifyTxListenerRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` +} + +func (x *StartNotifyTxListenerRequestMessage) Reset() { + *x = StartNotifyTxListenerRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[149] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartNotifyTxListenerRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartNotifyTxListenerRequestMessage) ProtoMessage() {} + +func (x *StartNotifyTxListenerRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[149] + 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 StartNotifyTxListenerRequestMessage.ProtoReflect.Descriptor instead. +func (*StartNotifyTxListenerRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{149} +} + +func (x *StartNotifyTxListenerRequestMessage) GetAddresses() []string { + if x != nil { + return x.Addresses + } + return nil +} + +type StartNotifyTxListenerResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *StartNotifyTxListenerResponseMessage) Reset() { + *x = StartNotifyTxListenerResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[150] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartNotifyTxListenerResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartNotifyTxListenerResponseMessage) ProtoMessage() {} + +func (x *StartNotifyTxListenerResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[150] + 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 StartNotifyTxListenerResponseMessage.ProtoReflect.Descriptor instead. +func (*StartNotifyTxListenerResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{150} +} + +type ChangeNotifyTxListenerRequiredConfirmationsRequestMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RequiredConfirmations uint32 `protobuf:"varint,1,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` +} + +func (x *ChangeNotifyTxListenerRequiredConfirmationsRequestMessage) Reset() { + *x = ChangeNotifyTxListenerRequiredConfirmationsRequestMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[151] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChangeNotifyTxListenerRequiredConfirmationsRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangeNotifyTxListenerRequiredConfirmationsRequestMessage) ProtoMessage() {} + +func (x *ChangeNotifyTxListenerRequiredConfirmationsRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[151] + 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 ChangeNotifyTxListenerRequiredConfirmationsRequestMessage.ProtoReflect.Descriptor instead. +func (*ChangeNotifyTxListenerRequiredConfirmationsRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{151} +} + +func (x *ChangeNotifyTxListenerRequiredConfirmationsRequestMessage) GetRequiredConfirmations() uint32 { + if x != nil { + return x.RequiredConfirmations + } + return 0 +} + +type ChangeNotifyTxListenerRequiredConfirmationsResponseMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ChangeNotifyTxListenerRequiredConfirmationsResponseMessage) Reset() { + *x = ChangeNotifyTxListenerRequiredConfirmationsResponseMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[152] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChangeNotifyTxListenerRequiredConfirmationsResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangeNotifyTxListenerRequiredConfirmationsResponseMessage) ProtoMessage() {} + +func (x *ChangeNotifyTxListenerRequiredConfirmationsResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[152] + 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 ChangeNotifyTxListenerRequiredConfirmationsResponseMessage.ProtoReflect.Descriptor instead. +func (*ChangeNotifyTxListenerRequiredConfirmationsResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{152} +} + +type TxListenerNotificationMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pending *TxListenerNotificationMessage_Pending `protobuf:"bytes,1,opt,name=pending,proto3" json:"pending,omitempty"` + Confirmed *TxListenerNotificationMessage_Confirmed `protobuf:"bytes,2,opt,name=confirmed,proto3" json:"confirmed,omitempty"` +} + +func (x *TxListenerNotificationMessage) Reset() { + *x = TxListenerNotificationMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[153] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TxListenerNotificationMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TxListenerNotificationMessage) ProtoMessage() {} + +func (x *TxListenerNotificationMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[153] + 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 TxListenerNotificationMessage.ProtoReflect.Descriptor instead. +func (*TxListenerNotificationMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{153} +} + +func (x *TxListenerNotificationMessage) GetPending() *TxListenerNotificationMessage_Pending { + if x != nil { + return x.Pending + } + return nil +} + +func (x *TxListenerNotificationMessage) GetConfirmed() *TxListenerNotificationMessage_Confirmed { + if x != nil { + return x.Confirmed + } + return nil +} + +type TxsConfirmationChangedNotficationMessage_Pending struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxIDConfirmationsPairs []*RpcTxIDConfirmationsPair `protobuf:"bytes,1,rep,name=txIDConfirmationsPairs,proto3" json:"txIDConfirmationsPairs,omitempty"` +} + +func (x *TxsConfirmationChangedNotficationMessage_Pending) Reset() { + *x = TxsConfirmationChangedNotficationMessage_Pending{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[154] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TxsConfirmationChangedNotficationMessage_Pending) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TxsConfirmationChangedNotficationMessage_Pending) ProtoMessage() {} + +func (x *TxsConfirmationChangedNotficationMessage_Pending) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[154] + 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 TxsConfirmationChangedNotficationMessage_Pending.ProtoReflect.Descriptor instead. +func (*TxsConfirmationChangedNotficationMessage_Pending) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{137, 0} +} + +func (x *TxsConfirmationChangedNotficationMessage_Pending) GetTxIDConfirmationsPairs() []*RpcTxIDConfirmationsPair { + if x != nil { + return x.TxIDConfirmationsPairs + } + return nil +} + +type TxsConfirmationChangedNotficationMessage_Confirmed struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxIDConfirmationsPairs []*RpcTxIDConfirmationsPair `protobuf:"bytes,1,rep,name=txIDConfirmationsPairs,proto3" json:"txIDConfirmationsPairs,omitempty"` +} + +func (x *TxsConfirmationChangedNotficationMessage_Confirmed) Reset() { + *x = TxsConfirmationChangedNotficationMessage_Confirmed{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[155] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TxsConfirmationChangedNotficationMessage_Confirmed) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TxsConfirmationChangedNotficationMessage_Confirmed) ProtoMessage() {} + +func (x *TxsConfirmationChangedNotficationMessage_Confirmed) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[155] + 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 TxsConfirmationChangedNotficationMessage_Confirmed.ProtoReflect.Descriptor instead. +func (*TxsConfirmationChangedNotficationMessage_Confirmed) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{137, 1} +} + +func (x *TxsConfirmationChangedNotficationMessage_Confirmed) GetTxIDConfirmationsPairs() []*RpcTxIDConfirmationsPair { + if x != nil { + return x.TxIDConfirmationsPairs + } + return nil +} + +type TxListenerNotificationMessage_Pending struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Sent []*TxEntryByAddress `protobuf:"bytes,1,rep,name=sent,proto3" json:"sent,omitempty"` + Received []*TxEntryByAddress `protobuf:"bytes,2,rep,name=received,proto3" json:"received,omitempty"` +} + +func (x *TxListenerNotificationMessage_Pending) Reset() { + *x = TxListenerNotificationMessage_Pending{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[156] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TxListenerNotificationMessage_Pending) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TxListenerNotificationMessage_Pending) ProtoMessage() {} + +func (x *TxListenerNotificationMessage_Pending) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[156] + 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 TxListenerNotificationMessage_Pending.ProtoReflect.Descriptor instead. +func (*TxListenerNotificationMessage_Pending) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{153, 0} +} + +func (x *TxListenerNotificationMessage_Pending) GetSent() []*TxEntryByAddress { + if x != nil { + return x.Sent + } + return nil +} + +func (x *TxListenerNotificationMessage_Pending) GetReceived() []*TxEntryByAddress { + if x != nil { + return x.Received + } + return nil +} + +type TxListenerNotificationMessage_Confirmed struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RequiredConfirmations uint32 `protobuf:"varint,1,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` + Sent []*TxEntryByAddress `protobuf:"bytes,2,rep,name=sent,proto3" json:"sent,omitempty"` + Received []*TxEntryByAddress `protobuf:"bytes,3,rep,name=received,proto3" json:"received,omitempty"` +} + +func (x *TxListenerNotificationMessage_Confirmed) Reset() { + *x = TxListenerNotificationMessage_Confirmed{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_proto_msgTypes[157] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TxListenerNotificationMessage_Confirmed) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TxListenerNotificationMessage_Confirmed) ProtoMessage() {} + +func (x *TxListenerNotificationMessage_Confirmed) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[157] + 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 TxListenerNotificationMessage_Confirmed.ProtoReflect.Descriptor instead. +func (*TxListenerNotificationMessage_Confirmed) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{153, 1} +} + +func (x *TxListenerNotificationMessage_Confirmed) GetRequiredConfirmations() uint32 { + if x != nil { + return x.RequiredConfirmations + } + return 0 +} + +func (x *TxListenerNotificationMessage_Confirmed) GetSent() []*TxEntryByAddress { + if x != nil { + return x.Sent + } + return nil +} + +func (x *TxListenerNotificationMessage_Confirmed) GetReceived() []*TxEntryByAddress { + if x != nil { + return x.Received + } + return nil +} + var File_rpc_proto protoreflect.FileDescriptor var file_rpc_proto_rawDesc = []byte{ @@ -8514,10 +9619,154 @@ var file_rpc_proto_rawDesc = []byte{ 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, - 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x9f, 0x01, 0x0a, 0x29, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x2d, 0x0a, 0x2b, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xdc, 0x03, 0x0a, 0x28, 0x54, 0x78, 0x73, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x4e, 0x6f, 0x74, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x55, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x5b, 0x0a, 0x09, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x4e, 0x6f, 0x74, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x52, 0x09, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x1a, 0x66, 0x0a, 0x07, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x5b, + 0x0a, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, + 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, + 0x61, 0x69, 0x72, 0x52, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x1a, 0x68, 0x0a, 0x09, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x5b, 0x0a, 0x16, 0x74, 0x78, 0x49, 0x44, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, + 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x16, 0x74, + 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x46, 0x0a, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x22, 0x31, 0x0a, + 0x2f, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x47, 0x0a, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, + 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x22, 0x32, 0x0a, 0x30, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x7d, 0x0a, + 0x45, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x48, 0x0a, 0x46, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x66, 0x0a, 0x10, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x9c, + 0x01, 0x0a, 0x1e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, + 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x21, 0x0a, + 0x1f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x42, 0x0a, 0x22, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, + 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x22, 0x25, 0x0a, 0x23, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x43, 0x0a, 0x23, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x22, 0x26, 0x0a, 0x24, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, + 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x71, 0x0a, 0x39, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3c, 0x0a, 0x3a, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xe0, 0x03, 0x0a, 0x1d, 0x54, 0x78, + 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4a, 0x0a, 0x07, 0x70, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x07, + 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x50, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, + 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x52, 0x09, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x1a, 0x73, 0x0a, 0x07, 0x50, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, + 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, + 0x04, 0x73, 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x1a, 0xab, + 0x01, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x15, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x04, 0x73, + 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x42, 0x26, 0x5a, 0x24, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, + 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -8533,144 +9782,167 @@ func file_rpc_proto_rawDescGZIP() []byte { } var file_rpc_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 135) +var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 158) var file_rpc_proto_goTypes = []interface{}{ (SubmitBlockResponseMessage_RejectReason)(0), // 0: protowire.SubmitBlockResponseMessage.RejectReason - (*RPCError)(nil), // 1: protowire.RPCError - (*RpcBlock)(nil), // 2: protowire.RpcBlock - (*RpcBlockHeader)(nil), // 3: protowire.RpcBlockHeader - (*RpcBlockLevelParents)(nil), // 4: protowire.RpcBlockLevelParents - (*RpcBlockVerboseData)(nil), // 5: protowire.RpcBlockVerboseData - (*RpcTransaction)(nil), // 6: protowire.RpcTransaction - (*RpcTransactionInput)(nil), // 7: protowire.RpcTransactionInput - (*RpcScriptPublicKey)(nil), // 8: protowire.RpcScriptPublicKey - (*RpcTransactionOutput)(nil), // 9: protowire.RpcTransactionOutput - (*RpcOutpoint)(nil), // 10: protowire.RpcOutpoint - (*RpcUtxoEntry)(nil), // 11: protowire.RpcUtxoEntry - (*RpcTransactionVerboseData)(nil), // 12: protowire.RpcTransactionVerboseData - (*RpcTransactionInputVerboseData)(nil), // 13: protowire.RpcTransactionInputVerboseData - (*RpcTransactionOutputVerboseData)(nil), // 14: protowire.RpcTransactionOutputVerboseData - (*GetCurrentNetworkRequestMessage)(nil), // 15: protowire.GetCurrentNetworkRequestMessage - (*GetCurrentNetworkResponseMessage)(nil), // 16: protowire.GetCurrentNetworkResponseMessage - (*SubmitBlockRequestMessage)(nil), // 17: protowire.SubmitBlockRequestMessage - (*SubmitBlockResponseMessage)(nil), // 18: protowire.SubmitBlockResponseMessage - (*GetBlockTemplateRequestMessage)(nil), // 19: protowire.GetBlockTemplateRequestMessage - (*GetBlockTemplateResponseMessage)(nil), // 20: protowire.GetBlockTemplateResponseMessage - (*NotifyBlockAddedRequestMessage)(nil), // 21: protowire.NotifyBlockAddedRequestMessage - (*NotifyBlockAddedResponseMessage)(nil), // 22: protowire.NotifyBlockAddedResponseMessage - (*BlockAddedNotificationMessage)(nil), // 23: protowire.BlockAddedNotificationMessage - (*GetPeerAddressesRequestMessage)(nil), // 24: protowire.GetPeerAddressesRequestMessage - (*GetPeerAddressesResponseMessage)(nil), // 25: protowire.GetPeerAddressesResponseMessage - (*GetPeerAddressesKnownAddressMessage)(nil), // 26: protowire.GetPeerAddressesKnownAddressMessage - (*GetSelectedTipHashRequestMessage)(nil), // 27: protowire.GetSelectedTipHashRequestMessage - (*GetSelectedTipHashResponseMessage)(nil), // 28: protowire.GetSelectedTipHashResponseMessage - (*GetMempoolEntryRequestMessage)(nil), // 29: protowire.GetMempoolEntryRequestMessage - (*GetMempoolEntryResponseMessage)(nil), // 30: protowire.GetMempoolEntryResponseMessage - (*GetMempoolEntriesRequestMessage)(nil), // 31: protowire.GetMempoolEntriesRequestMessage - (*GetMempoolEntriesResponseMessage)(nil), // 32: protowire.GetMempoolEntriesResponseMessage - (*MempoolEntry)(nil), // 33: protowire.MempoolEntry - (*GetConnectedPeerInfoRequestMessage)(nil), // 34: protowire.GetConnectedPeerInfoRequestMessage - (*GetConnectedPeerInfoResponseMessage)(nil), // 35: protowire.GetConnectedPeerInfoResponseMessage - (*GetConnectedPeerInfoMessage)(nil), // 36: protowire.GetConnectedPeerInfoMessage - (*AddPeerRequestMessage)(nil), // 37: protowire.AddPeerRequestMessage - (*AddPeerResponseMessage)(nil), // 38: protowire.AddPeerResponseMessage - (*SubmitTransactionRequestMessage)(nil), // 39: protowire.SubmitTransactionRequestMessage - (*SubmitTransactionResponseMessage)(nil), // 40: protowire.SubmitTransactionResponseMessage - (*NotifyVirtualSelectedParentChainChangedRequestMessage)(nil), // 41: protowire.NotifyVirtualSelectedParentChainChangedRequestMessage - (*NotifyVirtualSelectedParentChainChangedResponseMessage)(nil), // 42: protowire.NotifyVirtualSelectedParentChainChangedResponseMessage - (*VirtualSelectedParentChainChangedNotificationMessage)(nil), // 43: protowire.VirtualSelectedParentChainChangedNotificationMessage - (*GetBlockRequestMessage)(nil), // 44: protowire.GetBlockRequestMessage - (*GetBlockResponseMessage)(nil), // 45: protowire.GetBlockResponseMessage - (*GetSubnetworkRequestMessage)(nil), // 46: protowire.GetSubnetworkRequestMessage - (*GetSubnetworkResponseMessage)(nil), // 47: protowire.GetSubnetworkResponseMessage - (*GetVirtualSelectedParentChainFromBlockRequestMessage)(nil), // 48: protowire.GetVirtualSelectedParentChainFromBlockRequestMessage - (*AcceptedTransactionIds)(nil), // 49: protowire.AcceptedTransactionIds - (*GetVirtualSelectedParentChainFromBlockResponseMessage)(nil), // 50: protowire.GetVirtualSelectedParentChainFromBlockResponseMessage - (*GetBlocksRequestMessage)(nil), // 51: protowire.GetBlocksRequestMessage - (*GetBlocksResponseMessage)(nil), // 52: protowire.GetBlocksResponseMessage - (*GetBlockCountRequestMessage)(nil), // 53: protowire.GetBlockCountRequestMessage - (*GetBlockCountResponseMessage)(nil), // 54: protowire.GetBlockCountResponseMessage - (*GetBlockDagInfoRequestMessage)(nil), // 55: protowire.GetBlockDagInfoRequestMessage - (*GetBlockDagInfoResponseMessage)(nil), // 56: protowire.GetBlockDagInfoResponseMessage - (*ResolveFinalityConflictRequestMessage)(nil), // 57: protowire.ResolveFinalityConflictRequestMessage - (*ResolveFinalityConflictResponseMessage)(nil), // 58: protowire.ResolveFinalityConflictResponseMessage - (*NotifyFinalityConflictsRequestMessage)(nil), // 59: protowire.NotifyFinalityConflictsRequestMessage - (*NotifyFinalityConflictsResponseMessage)(nil), // 60: protowire.NotifyFinalityConflictsResponseMessage - (*FinalityConflictNotificationMessage)(nil), // 61: protowire.FinalityConflictNotificationMessage - (*FinalityConflictResolvedNotificationMessage)(nil), // 62: protowire.FinalityConflictResolvedNotificationMessage - (*ShutDownRequestMessage)(nil), // 63: protowire.ShutDownRequestMessage - (*ShutDownResponseMessage)(nil), // 64: protowire.ShutDownResponseMessage - (*GetHeadersRequestMessage)(nil), // 65: protowire.GetHeadersRequestMessage - (*GetHeadersResponseMessage)(nil), // 66: protowire.GetHeadersResponseMessage - (*NotifyUtxosChangedRequestMessage)(nil), // 67: protowire.NotifyUtxosChangedRequestMessage - (*NotifyUtxosChangedResponseMessage)(nil), // 68: protowire.NotifyUtxosChangedResponseMessage - (*UtxosChangedNotificationMessage)(nil), // 69: protowire.UtxosChangedNotificationMessage - (*UtxosByAddressesEntry)(nil), // 70: protowire.UtxosByAddressesEntry - (*StopNotifyingUtxosChangedRequestMessage)(nil), // 71: protowire.StopNotifyingUtxosChangedRequestMessage - (*StopNotifyingUtxosChangedResponseMessage)(nil), // 72: protowire.StopNotifyingUtxosChangedResponseMessage - (*GetUtxosByAddressesRequestMessage)(nil), // 73: protowire.GetUtxosByAddressesRequestMessage - (*GetUtxosByAddressesResponseMessage)(nil), // 74: protowire.GetUtxosByAddressesResponseMessage - (*GetBalanceByAddressRequestMessage)(nil), // 75: protowire.GetBalanceByAddressRequestMessage - (*GetBalanceByAddressResponseMessage)(nil), // 76: protowire.GetBalanceByAddressResponseMessage - (*GetBalancesByAddressesRequestMessage)(nil), // 77: protowire.GetBalancesByAddressesRequestMessage - (*BalancesByAddressEntry)(nil), // 78: protowire.BalancesByAddressEntry - (*GetBalancesByAddressesResponseMessage)(nil), // 79: protowire.GetBalancesByAddressesResponseMessage - (*GetVirtualSelectedParentBlueScoreRequestMessage)(nil), // 80: protowire.GetVirtualSelectedParentBlueScoreRequestMessage - (*GetVirtualSelectedParentBlueScoreResponseMessage)(nil), // 81: protowire.GetVirtualSelectedParentBlueScoreResponseMessage - (*NotifyVirtualSelectedParentBlueScoreChangedRequestMessage)(nil), // 82: protowire.NotifyVirtualSelectedParentBlueScoreChangedRequestMessage - (*NotifyVirtualSelectedParentBlueScoreChangedResponseMessage)(nil), // 83: protowire.NotifyVirtualSelectedParentBlueScoreChangedResponseMessage - (*VirtualSelectedParentBlueScoreChangedNotificationMessage)(nil), // 84: protowire.VirtualSelectedParentBlueScoreChangedNotificationMessage - (*NotifyVirtualDaaScoreChangedRequestMessage)(nil), // 85: protowire.NotifyVirtualDaaScoreChangedRequestMessage - (*NotifyVirtualDaaScoreChangedResponseMessage)(nil), // 86: protowire.NotifyVirtualDaaScoreChangedResponseMessage - (*VirtualDaaScoreChangedNotificationMessage)(nil), // 87: protowire.VirtualDaaScoreChangedNotificationMessage - (*NotifyPruningPointUTXOSetOverrideRequestMessage)(nil), // 88: protowire.NotifyPruningPointUTXOSetOverrideRequestMessage - (*NotifyPruningPointUTXOSetOverrideResponseMessage)(nil), // 89: protowire.NotifyPruningPointUTXOSetOverrideResponseMessage - (*PruningPointUTXOSetOverrideNotificationMessage)(nil), // 90: protowire.PruningPointUTXOSetOverrideNotificationMessage - (*StopNotifyingPruningPointUTXOSetOverrideRequestMessage)(nil), // 91: protowire.StopNotifyingPruningPointUTXOSetOverrideRequestMessage - (*StopNotifyingPruningPointUTXOSetOverrideResponseMessage)(nil), // 92: protowire.StopNotifyingPruningPointUTXOSetOverrideResponseMessage - (*BanRequestMessage)(nil), // 93: protowire.BanRequestMessage - (*BanResponseMessage)(nil), // 94: protowire.BanResponseMessage - (*UnbanRequestMessage)(nil), // 95: protowire.UnbanRequestMessage - (*UnbanResponseMessage)(nil), // 96: protowire.UnbanResponseMessage - (*GetInfoRequestMessage)(nil), // 97: protowire.GetInfoRequestMessage - (*GetInfoResponseMessage)(nil), // 98: protowire.GetInfoResponseMessage - (*GetAcceptingBlockHashOfTxRequestMessage)(nil), // 99: protowire.GetAcceptingBlockHashOfTxRequestMessage - (*GetAcceptingBlockHashOfTxResponseMessage)(nil), // 100: protowire.GetAcceptingBlockHashOfTxResponseMessage - (*EstimateNetworkHashesPerSecondRequestMessage)(nil), // 101: protowire.EstimateNetworkHashesPerSecondRequestMessage - (*EstimateNetworkHashesPerSecondResponseMessage)(nil), // 102: protowire.EstimateNetworkHashesPerSecondResponseMessage - (*NotifyNewBlockTemplateRequestMessage)(nil), // 103: protowire.NotifyNewBlockTemplateRequestMessage - (*NotifyNewBlockTemplateResponseMessage)(nil), // 104: protowire.NotifyNewBlockTemplateResponseMessage - (*NewBlockTemplateNotificationMessage)(nil), // 105: protowire.NewBlockTemplateNotificationMessage - (*MempoolEntryByAddress)(nil), // 106: protowire.MempoolEntryByAddress - (*GetMempoolEntriesByAddressesRequestMessage)(nil), // 107: protowire.GetMempoolEntriesByAddressesRequestMessage - (*GetMempoolEntriesByAddressesResponseMessage)(nil), // 108: protowire.GetMempoolEntriesByAddressesResponseMessage - (*GetCoinSupplyRequestMessage)(nil), // 109: protowire.GetCoinSupplyRequestMessage - (*GetCoinSupplyResponseMessage)(nil), // 110: protowire.GetCoinSupplyResponseMessage - (*RpcTxIDConfirmationsPair)(nil), // 111: protowire.RpcTxIDConfirmationsPair - (*RpcTxIDBlockHashPair)(nil), // 112: protowire.RpcTxIDBlockHashPair - (*RpcTxIDBlockPair)(nil), // 113: protowire.RpcTxIDBlockPair - (*GetAcceptingBlockHashesOfTxsRequestMessage)(nil), // 114: protowire.GetAcceptingBlockHashesOfTxsRequestMessage - (*GetAcceptingBlockHashesOfTxsResponseMessage)(nil), // 115: protowire.GetAcceptingBlockHashesOfTxsResponseMessage - (*GetAcceptingBlockOfTxRequestMessage)(nil), // 116: protowire.GetAcceptingBlockOfTxRequestMessage - (*GetAcceptingBlockOfTxResponseMessage)(nil), // 117: protowire.GetAcceptingBlockOfTxResponseMessage - (*GetAcceptingBlocksOfTxsRequestMessage)(nil), // 118: protowire.GetAcceptingBlocksOfTxsRequestMessage - (*GetAcceptingBlocksOfTxsResponseMessage)(nil), // 119: protowire.GetAcceptingBlocksOfTxsResponseMessage - (*GetIncludingBlockHashOfTxRequestMessage)(nil), // 120: protowire.GetIncludingBlockHashOfTxRequestMessage - (*GetIncludingBlockHashOfTxResponseMessage)(nil), // 121: protowire.GetIncludingBlockHashOfTxResponseMessage - (*GetIncludingBlockHashesOfTxsRequestMessage)(nil), // 122: protowire.GetIncludingBlockHashesOfTxsRequestMessage - (*GetIncludingBlockHashesOfTxsResponseMessage)(nil), // 123: protowire.GetIncludingBlockHashesOfTxsResponseMessage - (*GetIncludingBlockOfTxRequestMessage)(nil), // 124: protowire.GetIncludingBlockOfTxRequestMessage - (*GetIncludingBlockOfTxResponseMessage)(nil), // 125: protowire.GetIncludingBlockOfTxResponseMessage - (*GetIncludingBlocksOfTxsRequestMessage)(nil), // 126: protowire.GetIncludingBlocksOfTxsRequestMessage - (*GetIncludingBlocksOfTxsResponseMessage)(nil), // 127: protowire.GetIncludingBlocksOfTxsResponseMessage - (*GetTxRequestMessage)(nil), // 128: protowire.GetTxRequestMessage - (*GetTxResponseMessage)(nil), // 129: protowire.GetTxResponseMessage - (*GetTxsRequestMessage)(nil), // 130: protowire.GetTxsRequestMessage - (*GetTxsResponseMessage)(nil), // 131: protowire.GetTxsResponseMessage - (*GetTxConfirmationsRequestMessage)(nil), // 132: protowire.GetTxConfirmationsRequestMessage - (*GetTxConfirmationsResponseMessage)(nil), // 133: protowire.GetTxConfirmationsResponseMessage - (*GetTxsConfirmationsRequestMessage)(nil), // 134: protowire.GetTxsConfirmationsRequestMessage - (*GetTxsConfirmationsResponseMessage)(nil), // 135: protowire.GetTxsConfirmationsResponseMessage + (*RPCError)(nil), // 1: protowire.RPCError + (*RpcBlock)(nil), // 2: protowire.RpcBlock + (*RpcBlockHeader)(nil), // 3: protowire.RpcBlockHeader + (*RpcBlockLevelParents)(nil), // 4: protowire.RpcBlockLevelParents + (*RpcBlockVerboseData)(nil), // 5: protowire.RpcBlockVerboseData + (*RpcTransaction)(nil), // 6: protowire.RpcTransaction + (*RpcTransactionInput)(nil), // 7: protowire.RpcTransactionInput + (*RpcScriptPublicKey)(nil), // 8: protowire.RpcScriptPublicKey + (*RpcTransactionOutput)(nil), // 9: protowire.RpcTransactionOutput + (*RpcOutpoint)(nil), // 10: protowire.RpcOutpoint + (*RpcUtxoEntry)(nil), // 11: protowire.RpcUtxoEntry + (*RpcTransactionVerboseData)(nil), // 12: protowire.RpcTransactionVerboseData + (*RpcTransactionInputVerboseData)(nil), // 13: protowire.RpcTransactionInputVerboseData + (*RpcTransactionOutputVerboseData)(nil), // 14: protowire.RpcTransactionOutputVerboseData + (*GetCurrentNetworkRequestMessage)(nil), // 15: protowire.GetCurrentNetworkRequestMessage + (*GetCurrentNetworkResponseMessage)(nil), // 16: protowire.GetCurrentNetworkResponseMessage + (*SubmitBlockRequestMessage)(nil), // 17: protowire.SubmitBlockRequestMessage + (*SubmitBlockResponseMessage)(nil), // 18: protowire.SubmitBlockResponseMessage + (*GetBlockTemplateRequestMessage)(nil), // 19: protowire.GetBlockTemplateRequestMessage + (*GetBlockTemplateResponseMessage)(nil), // 20: protowire.GetBlockTemplateResponseMessage + (*NotifyBlockAddedRequestMessage)(nil), // 21: protowire.NotifyBlockAddedRequestMessage + (*NotifyBlockAddedResponseMessage)(nil), // 22: protowire.NotifyBlockAddedResponseMessage + (*BlockAddedNotificationMessage)(nil), // 23: protowire.BlockAddedNotificationMessage + (*GetPeerAddressesRequestMessage)(nil), // 24: protowire.GetPeerAddressesRequestMessage + (*GetPeerAddressesResponseMessage)(nil), // 25: protowire.GetPeerAddressesResponseMessage + (*GetPeerAddressesKnownAddressMessage)(nil), // 26: protowire.GetPeerAddressesKnownAddressMessage + (*GetSelectedTipHashRequestMessage)(nil), // 27: protowire.GetSelectedTipHashRequestMessage + (*GetSelectedTipHashResponseMessage)(nil), // 28: protowire.GetSelectedTipHashResponseMessage + (*GetMempoolEntryRequestMessage)(nil), // 29: protowire.GetMempoolEntryRequestMessage + (*GetMempoolEntryResponseMessage)(nil), // 30: protowire.GetMempoolEntryResponseMessage + (*GetMempoolEntriesRequestMessage)(nil), // 31: protowire.GetMempoolEntriesRequestMessage + (*GetMempoolEntriesResponseMessage)(nil), // 32: protowire.GetMempoolEntriesResponseMessage + (*MempoolEntry)(nil), // 33: protowire.MempoolEntry + (*GetConnectedPeerInfoRequestMessage)(nil), // 34: protowire.GetConnectedPeerInfoRequestMessage + (*GetConnectedPeerInfoResponseMessage)(nil), // 35: protowire.GetConnectedPeerInfoResponseMessage + (*GetConnectedPeerInfoMessage)(nil), // 36: protowire.GetConnectedPeerInfoMessage + (*AddPeerRequestMessage)(nil), // 37: protowire.AddPeerRequestMessage + (*AddPeerResponseMessage)(nil), // 38: protowire.AddPeerResponseMessage + (*SubmitTransactionRequestMessage)(nil), // 39: protowire.SubmitTransactionRequestMessage + (*SubmitTransactionResponseMessage)(nil), // 40: protowire.SubmitTransactionResponseMessage + (*NotifyVirtualSelectedParentChainChangedRequestMessage)(nil), // 41: protowire.NotifyVirtualSelectedParentChainChangedRequestMessage + (*NotifyVirtualSelectedParentChainChangedResponseMessage)(nil), // 42: protowire.NotifyVirtualSelectedParentChainChangedResponseMessage + (*VirtualSelectedParentChainChangedNotificationMessage)(nil), // 43: protowire.VirtualSelectedParentChainChangedNotificationMessage + (*GetBlockRequestMessage)(nil), // 44: protowire.GetBlockRequestMessage + (*GetBlockResponseMessage)(nil), // 45: protowire.GetBlockResponseMessage + (*GetSubnetworkRequestMessage)(nil), // 46: protowire.GetSubnetworkRequestMessage + (*GetSubnetworkResponseMessage)(nil), // 47: protowire.GetSubnetworkResponseMessage + (*GetVirtualSelectedParentChainFromBlockRequestMessage)(nil), // 48: protowire.GetVirtualSelectedParentChainFromBlockRequestMessage + (*AcceptedTransactionIds)(nil), // 49: protowire.AcceptedTransactionIds + (*GetVirtualSelectedParentChainFromBlockResponseMessage)(nil), // 50: protowire.GetVirtualSelectedParentChainFromBlockResponseMessage + (*GetBlocksRequestMessage)(nil), // 51: protowire.GetBlocksRequestMessage + (*GetBlocksResponseMessage)(nil), // 52: protowire.GetBlocksResponseMessage + (*GetBlockCountRequestMessage)(nil), // 53: protowire.GetBlockCountRequestMessage + (*GetBlockCountResponseMessage)(nil), // 54: protowire.GetBlockCountResponseMessage + (*GetBlockDagInfoRequestMessage)(nil), // 55: protowire.GetBlockDagInfoRequestMessage + (*GetBlockDagInfoResponseMessage)(nil), // 56: protowire.GetBlockDagInfoResponseMessage + (*ResolveFinalityConflictRequestMessage)(nil), // 57: protowire.ResolveFinalityConflictRequestMessage + (*ResolveFinalityConflictResponseMessage)(nil), // 58: protowire.ResolveFinalityConflictResponseMessage + (*NotifyFinalityConflictsRequestMessage)(nil), // 59: protowire.NotifyFinalityConflictsRequestMessage + (*NotifyFinalityConflictsResponseMessage)(nil), // 60: protowire.NotifyFinalityConflictsResponseMessage + (*FinalityConflictNotificationMessage)(nil), // 61: protowire.FinalityConflictNotificationMessage + (*FinalityConflictResolvedNotificationMessage)(nil), // 62: protowire.FinalityConflictResolvedNotificationMessage + (*ShutDownRequestMessage)(nil), // 63: protowire.ShutDownRequestMessage + (*ShutDownResponseMessage)(nil), // 64: protowire.ShutDownResponseMessage + (*GetHeadersRequestMessage)(nil), // 65: protowire.GetHeadersRequestMessage + (*GetHeadersResponseMessage)(nil), // 66: protowire.GetHeadersResponseMessage + (*NotifyUtxosChangedRequestMessage)(nil), // 67: protowire.NotifyUtxosChangedRequestMessage + (*NotifyUtxosChangedResponseMessage)(nil), // 68: protowire.NotifyUtxosChangedResponseMessage + (*UtxosChangedNotificationMessage)(nil), // 69: protowire.UtxosChangedNotificationMessage + (*UtxosByAddressesEntry)(nil), // 70: protowire.UtxosByAddressesEntry + (*StopNotifyingUtxosChangedRequestMessage)(nil), // 71: protowire.StopNotifyingUtxosChangedRequestMessage + (*StopNotifyingUtxosChangedResponseMessage)(nil), // 72: protowire.StopNotifyingUtxosChangedResponseMessage + (*GetUtxosByAddressesRequestMessage)(nil), // 73: protowire.GetUtxosByAddressesRequestMessage + (*GetUtxosByAddressesResponseMessage)(nil), // 74: protowire.GetUtxosByAddressesResponseMessage + (*GetBalanceByAddressRequestMessage)(nil), // 75: protowire.GetBalanceByAddressRequestMessage + (*GetBalanceByAddressResponseMessage)(nil), // 76: protowire.GetBalanceByAddressResponseMessage + (*GetBalancesByAddressesRequestMessage)(nil), // 77: protowire.GetBalancesByAddressesRequestMessage + (*BalancesByAddressEntry)(nil), // 78: protowire.BalancesByAddressEntry + (*GetBalancesByAddressesResponseMessage)(nil), // 79: protowire.GetBalancesByAddressesResponseMessage + (*GetVirtualSelectedParentBlueScoreRequestMessage)(nil), // 80: protowire.GetVirtualSelectedParentBlueScoreRequestMessage + (*GetVirtualSelectedParentBlueScoreResponseMessage)(nil), // 81: protowire.GetVirtualSelectedParentBlueScoreResponseMessage + (*NotifyVirtualSelectedParentBlueScoreChangedRequestMessage)(nil), // 82: protowire.NotifyVirtualSelectedParentBlueScoreChangedRequestMessage + (*NotifyVirtualSelectedParentBlueScoreChangedResponseMessage)(nil), // 83: protowire.NotifyVirtualSelectedParentBlueScoreChangedResponseMessage + (*VirtualSelectedParentBlueScoreChangedNotificationMessage)(nil), // 84: protowire.VirtualSelectedParentBlueScoreChangedNotificationMessage + (*NotifyVirtualDaaScoreChangedRequestMessage)(nil), // 85: protowire.NotifyVirtualDaaScoreChangedRequestMessage + (*NotifyVirtualDaaScoreChangedResponseMessage)(nil), // 86: protowire.NotifyVirtualDaaScoreChangedResponseMessage + (*VirtualDaaScoreChangedNotificationMessage)(nil), // 87: protowire.VirtualDaaScoreChangedNotificationMessage + (*NotifyPruningPointUTXOSetOverrideRequestMessage)(nil), // 88: protowire.NotifyPruningPointUTXOSetOverrideRequestMessage + (*NotifyPruningPointUTXOSetOverrideResponseMessage)(nil), // 89: protowire.NotifyPruningPointUTXOSetOverrideResponseMessage + (*PruningPointUTXOSetOverrideNotificationMessage)(nil), // 90: protowire.PruningPointUTXOSetOverrideNotificationMessage + (*StopNotifyingPruningPointUTXOSetOverrideRequestMessage)(nil), // 91: protowire.StopNotifyingPruningPointUTXOSetOverrideRequestMessage + (*StopNotifyingPruningPointUTXOSetOverrideResponseMessage)(nil), // 92: protowire.StopNotifyingPruningPointUTXOSetOverrideResponseMessage + (*BanRequestMessage)(nil), // 93: protowire.BanRequestMessage + (*BanResponseMessage)(nil), // 94: protowire.BanResponseMessage + (*UnbanRequestMessage)(nil), // 95: protowire.UnbanRequestMessage + (*UnbanResponseMessage)(nil), // 96: protowire.UnbanResponseMessage + (*GetInfoRequestMessage)(nil), // 97: protowire.GetInfoRequestMessage + (*GetInfoResponseMessage)(nil), // 98: protowire.GetInfoResponseMessage + (*GetAcceptingBlockHashOfTxRequestMessage)(nil), // 99: protowire.GetAcceptingBlockHashOfTxRequestMessage + (*GetAcceptingBlockHashOfTxResponseMessage)(nil), // 100: protowire.GetAcceptingBlockHashOfTxResponseMessage + (*EstimateNetworkHashesPerSecondRequestMessage)(nil), // 101: protowire.EstimateNetworkHashesPerSecondRequestMessage + (*EstimateNetworkHashesPerSecondResponseMessage)(nil), // 102: protowire.EstimateNetworkHashesPerSecondResponseMessage + (*NotifyNewBlockTemplateRequestMessage)(nil), // 103: protowire.NotifyNewBlockTemplateRequestMessage + (*NotifyNewBlockTemplateResponseMessage)(nil), // 104: protowire.NotifyNewBlockTemplateResponseMessage + (*NewBlockTemplateNotificationMessage)(nil), // 105: protowire.NewBlockTemplateNotificationMessage + (*MempoolEntryByAddress)(nil), // 106: protowire.MempoolEntryByAddress + (*GetMempoolEntriesByAddressesRequestMessage)(nil), // 107: protowire.GetMempoolEntriesByAddressesRequestMessage + (*GetMempoolEntriesByAddressesResponseMessage)(nil), // 108: protowire.GetMempoolEntriesByAddressesResponseMessage + (*GetCoinSupplyRequestMessage)(nil), // 109: protowire.GetCoinSupplyRequestMessage + (*GetCoinSupplyResponseMessage)(nil), // 110: protowire.GetCoinSupplyResponseMessage + (*RpcTxIDConfirmationsPair)(nil), // 111: protowire.RpcTxIDConfirmationsPair + (*RpcTxIDBlockHashPair)(nil), // 112: protowire.RpcTxIDBlockHashPair + (*RpcTxIDBlockPair)(nil), // 113: protowire.RpcTxIDBlockPair + (*GetAcceptingBlockHashesOfTxsRequestMessage)(nil), // 114: protowire.GetAcceptingBlockHashesOfTxsRequestMessage + (*GetAcceptingBlockHashesOfTxsResponseMessage)(nil), // 115: protowire.GetAcceptingBlockHashesOfTxsResponseMessage + (*GetAcceptingBlockOfTxRequestMessage)(nil), // 116: protowire.GetAcceptingBlockOfTxRequestMessage + (*GetAcceptingBlockOfTxResponseMessage)(nil), // 117: protowire.GetAcceptingBlockOfTxResponseMessage + (*GetAcceptingBlocksOfTxsRequestMessage)(nil), // 118: protowire.GetAcceptingBlocksOfTxsRequestMessage + (*GetAcceptingBlocksOfTxsResponseMessage)(nil), // 119: protowire.GetAcceptingBlocksOfTxsResponseMessage + (*GetIncludingBlockHashOfTxRequestMessage)(nil), // 120: protowire.GetIncludingBlockHashOfTxRequestMessage + (*GetIncludingBlockHashOfTxResponseMessage)(nil), // 121: protowire.GetIncludingBlockHashOfTxResponseMessage + (*GetIncludingBlockHashesOfTxsRequestMessage)(nil), // 122: protowire.GetIncludingBlockHashesOfTxsRequestMessage + (*GetIncludingBlockHashesOfTxsResponseMessage)(nil), // 123: protowire.GetIncludingBlockHashesOfTxsResponseMessage + (*GetIncludingBlockOfTxRequestMessage)(nil), // 124: protowire.GetIncludingBlockOfTxRequestMessage + (*GetIncludingBlockOfTxResponseMessage)(nil), // 125: protowire.GetIncludingBlockOfTxResponseMessage + (*GetIncludingBlocksOfTxsRequestMessage)(nil), // 126: protowire.GetIncludingBlocksOfTxsRequestMessage + (*GetIncludingBlocksOfTxsResponseMessage)(nil), // 127: protowire.GetIncludingBlocksOfTxsResponseMessage + (*GetTxRequestMessage)(nil), // 128: protowire.GetTxRequestMessage + (*GetTxResponseMessage)(nil), // 129: protowire.GetTxResponseMessage + (*GetTxsRequestMessage)(nil), // 130: protowire.GetTxsRequestMessage + (*GetTxsResponseMessage)(nil), // 131: protowire.GetTxsResponseMessage + (*GetTxConfirmationsRequestMessage)(nil), // 132: protowire.GetTxConfirmationsRequestMessage + (*GetTxConfirmationsResponseMessage)(nil), // 133: protowire.GetTxConfirmationsResponseMessage + (*GetTxsConfirmationsRequestMessage)(nil), // 134: protowire.GetTxsConfirmationsRequestMessage + (*GetTxsConfirmationsResponseMessage)(nil), // 135: protowire.GetTxsConfirmationsResponseMessage + (*NotifyTxsConfirmationChangedRequstMessage)(nil), // 136: protowire.NotifyTxsConfirmationChangedRequstMessage + (*NotifyTxsConfirmationChangedResponseMessage)(nil), // 137: protowire.NotifyTxsConfirmationChangedResponseMessage + (*TxsConfirmationChangedNotficationMessage)(nil), // 138: protowire.TxsConfirmationChangedNotficationMessage + (*StopNotifyTxsConfirmationChangedRequestMessage)(nil), // 139: protowire.StopNotifyTxsConfirmationChangedRequestMessage + (*StopNotifyTxsConfirmationChangedResponseMessage)(nil), // 140: protowire.StopNotifyTxsConfirmationChangedResponseMessage + (*StartNotifyTxsConfirmationChangedRequestMessage)(nil), // 141: protowire.StartNotifyTxsConfirmationChangedRequestMessage + (*StartNotifyTxsConfirmationChangedResponseMessage)(nil), // 142: protowire.StartNotifyTxsConfirmationChangedResponseMessage + (*ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage)(nil), // 143: protowire.ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage + (*ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage)(nil), // 144: protowire.ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage + (*TxEntryByAddress)(nil), // 145: protowire.TxEntryByAddress + (*NotifyTxListenerRequestMessage)(nil), // 146: protowire.NotifyTxListenerRequestMessage + (*NotifyTxListenerResponseMessage)(nil), // 147: protowire.NotifyTxListenerResponseMessage + (*StopNotifyTxListenerRequestMessage)(nil), // 148: protowire.StopNotifyTxListenerRequestMessage + (*StopNotifyTxListenerResponseMessage)(nil), // 149: protowire.StopNotifyTxListenerResponseMessage + (*StartNotifyTxListenerRequestMessage)(nil), // 150: protowire.StartNotifyTxListenerRequestMessage + (*StartNotifyTxListenerResponseMessage)(nil), // 151: protowire.StartNotifyTxListenerResponseMessage + (*ChangeNotifyTxListenerRequiredConfirmationsRequestMessage)(nil), // 152: protowire.ChangeNotifyTxListenerRequiredConfirmationsRequestMessage + (*ChangeNotifyTxListenerRequiredConfirmationsResponseMessage)(nil), // 153: protowire.ChangeNotifyTxListenerRequiredConfirmationsResponseMessage + (*TxListenerNotificationMessage)(nil), // 154: protowire.TxListenerNotificationMessage + (*TxsConfirmationChangedNotficationMessage_Pending)(nil), // 155: protowire.TxsConfirmationChangedNotficationMessage.Pending + (*TxsConfirmationChangedNotficationMessage_Confirmed)(nil), // 156: protowire.TxsConfirmationChangedNotficationMessage.Confirmed + (*TxListenerNotificationMessage_Pending)(nil), // 157: protowire.TxListenerNotificationMessage.Pending + (*TxListenerNotificationMessage_Confirmed)(nil), // 158: protowire.TxListenerNotificationMessage.Confirmed } var file_rpc_proto_depIdxs = []int32{ 3, // 0: protowire.RpcBlock.header:type_name -> protowire.RpcBlockHeader @@ -8771,11 +10043,22 @@ var file_rpc_proto_depIdxs = []int32{ 1, // 95: protowire.GetTxConfirmationsResponseMessage.error:type_name -> protowire.RPCError 111, // 96: protowire.GetTxsConfirmationsResponseMessage.txIDConfirmationsPairs:type_name -> protowire.RpcTxIDConfirmationsPair 1, // 97: protowire.GetTxsConfirmationsResponseMessage.error:type_name -> protowire.RPCError - 98, // [98:98] is the sub-list for method output_type - 98, // [98:98] is the sub-list for method input_type - 98, // [98:98] is the sub-list for extension type_name - 98, // [98:98] is the sub-list for extension extendee - 0, // [0:98] is the sub-list for field type_name + 155, // 98: protowire.TxsConfirmationChangedNotficationMessage.pending:type_name -> protowire.TxsConfirmationChangedNotficationMessage.Pending + 156, // 99: protowire.TxsConfirmationChangedNotficationMessage.confirmed:type_name -> protowire.TxsConfirmationChangedNotficationMessage.Confirmed + 1, // 100: protowire.TxsConfirmationChangedNotficationMessage.error:type_name -> protowire.RPCError + 157, // 101: protowire.TxListenerNotificationMessage.pending:type_name -> protowire.TxListenerNotificationMessage.Pending + 158, // 102: protowire.TxListenerNotificationMessage.confirmed:type_name -> protowire.TxListenerNotificationMessage.Confirmed + 111, // 103: protowire.TxsConfirmationChangedNotficationMessage.Pending.txIDConfirmationsPairs:type_name -> protowire.RpcTxIDConfirmationsPair + 111, // 104: protowire.TxsConfirmationChangedNotficationMessage.Confirmed.txIDConfirmationsPairs:type_name -> protowire.RpcTxIDConfirmationsPair + 145, // 105: protowire.TxListenerNotificationMessage.Pending.sent:type_name -> protowire.TxEntryByAddress + 145, // 106: protowire.TxListenerNotificationMessage.Pending.received:type_name -> protowire.TxEntryByAddress + 145, // 107: protowire.TxListenerNotificationMessage.Confirmed.sent:type_name -> protowire.TxEntryByAddress + 145, // 108: protowire.TxListenerNotificationMessage.Confirmed.received:type_name -> protowire.TxEntryByAddress + 109, // [109:109] is the sub-list for method output_type + 109, // [109:109] is the sub-list for method input_type + 109, // [109:109] is the sub-list for extension type_name + 109, // [109:109] is the sub-list for extension extendee + 0, // [0:109] is the sub-list for field type_name } func init() { file_rpc_proto_init() } @@ -10404,6 +11687,282 @@ func file_rpc_proto_init() { return nil } } + file_rpc_proto_msgTypes[135].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyTxsConfirmationChangedRequstMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[136].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyTxsConfirmationChangedResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[137].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TxsConfirmationChangedNotficationMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[138].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StopNotifyTxsConfirmationChangedRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[139].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StopNotifyTxsConfirmationChangedResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[140].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StartNotifyTxsConfirmationChangedRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[141].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StartNotifyTxsConfirmationChangedResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[142].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[143].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[144].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TxEntryByAddress); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[145].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyTxListenerRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[146].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyTxListenerResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[147].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StopNotifyTxListenerRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[148].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StopNotifyTxListenerResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[149].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StartNotifyTxListenerRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[150].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StartNotifyTxListenerResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[151].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangeNotifyTxListenerRequiredConfirmationsRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[152].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangeNotifyTxListenerRequiredConfirmationsResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[153].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TxListenerNotificationMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[154].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TxsConfirmationChangedNotficationMessage_Pending); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[155].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TxsConfirmationChangedNotficationMessage_Confirmed); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[156].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TxListenerNotificationMessage_Pending); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_proto_msgTypes[157].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TxListenerNotificationMessage_Confirmed); 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{ @@ -10411,7 +11970,7 @@ func file_rpc_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_rpc_proto_rawDesc, NumEnums: 1, - NumMessages: 135, + NumMessages: 158, NumExtensions: 0, NumServices: 0, }, diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto index 6812a99314..4017843729 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto @@ -863,4 +863,106 @@ message GetTxsConfirmationsResponseMessage{ repeated RpcTxIDConfirmationsPair txIDConfirmationsPairs = 1; RPCError error = 1000; +} + +message NotifyTxsConfirmationChangedRequstMessage{ + repeated string TxIDs = 1; + uint32 requiredConfirmations = 2; + bool includePending = 3; +} + +message NotifyTxsConfirmationChangedResponseMessage{ + +} + +message TxsConfirmationChangedNotficationMessage{ + message Pending{ + repeated RpcTxIDConfirmationsPair txIDConfirmationsPairs = 1; + } + message Confirmed{ + repeated RpcTxIDConfirmationsPair txIDConfirmationsPairs = 1; + } + repeated Pending pending = 1; + repeated Confirmed confirmed = 2; + + RPCError error = 1000; +} + +message StopNotifyTxsConfirmationChangedRequestMessage{ + repeated string TxIDs = 1; +} + +message StopNotifyTxsConfirmationChangedResponseMessage{ + +} + +message StartNotifyTxsConfirmationChangedRequestMessage{ + repeated string TxIDs = 1; +} + +message StartNotifyTxsConfirmationChangedResponseMessage{ + +} + +message ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage{ + uint32 requiredConfirmations = 1; +} + +message ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage{ + +} + +message TxEntryByAddress{ + string address = 1; + string txId = 2; + uint32 confirmations = 3; + } + +message NotifyTxListenerRequestMessage{ + repeated string addresses = 1; + uint32 requiredConfirmations = 2; + bool includePending = 3; +} + +message NotifyTxListenerResponseMessage{ + +} + +message StopNotifyTxListenerRequestMessage{ + repeated string addresses = 1; +} + +message StopNotifyTxListenerResponseMessage{ + +} + +message StartNotifyTxListenerRequestMessage{ + repeated string addresses = 1; +} + +message StartNotifyTxListenerResponseMessage{ + +} + + +message ChangeNotifyTxListenerRequiredConfirmationsRequestMessage{ + uint32 requiredConfirmations = 1; +} + +message ChangeNotifyTxListenerRequiredConfirmationsResponseMessage{ + +} + +message TxListenerNotificationMessage{ + message Pending{ + repeated TxEntryByAddress sent = 1; + repeated TxEntryByAddress received = 2; + } + message Confirmed{ + uint32 requiredConfirmations = 1; + repeated TxEntryByAddress sent = 2; + repeated TxEntryByAddress received = 3; + } + Pending pending = 1; + Confirmed confirmed = 2; } \ No newline at end of file From 22aeb048d1eadd9f62f6d37d8e04c9836ff0abda Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Sat, 15 Oct 2022 00:56:05 +0200 Subject: [PATCH 34/47] update listener protos --- .../grpcserver/protowire/messages.pb.go | 1003 ++++++------- .../grpcserver/protowire/messages.proto | 35 +- .../server/grpcserver/protowire/rpc.md | 229 +-- .../server/grpcserver/protowire/rpc.pb.go | 1289 +++++++++-------- .../server/grpcserver/protowire/rpc.proto | 128 +- .../rpc_modify_addresses_txs_params.go | 0 ..._modify_txs_confirmation_changed_params.go | 0 .../protowire/rpc_notify_addresses_txs.go | 0 .../rpc_notify_txs_confirmation_changed.go | 0 .../rpc_start_notify_addresses_txs.go | 0 ...c_start_notify_txs_confirmation_changed.go | 0 .../rpc_stop_notify_addresses_txs.go | 0 ...pc_stop_notify_txs_confirmation_changed.go | 0 13 files changed, 1459 insertions(+), 1225 deletions(-) create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_addresses_txs_params.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_txs_confirmation_changed_params.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_txs_confirmation_changed.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_start_notify_addresses_txs.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_start_notify_txs_confirmation_changed.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_stop_notify_addresses_txs.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_stop_notify_txs_confirmation_changed.go diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go index c3528485f9..8a57ead4b4 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go @@ -180,22 +180,24 @@ type KaspadMessage struct { // *KaspadMessage_GetTxConfirmationsResponse // *KaspadMessage_GetTxsConfirmationsRequest // *KaspadMessage_GetTxsConfirmationsResponse - // *KaspadMessage_NotifyTxsConfirmationChangedRequstMessage - // *KaspadMessage_NotifyTxsConfirmationChangedResponseMessage - // *KaspadMessage_StopNotifyTxsConfirmationChangedRequestMessage - // *KaspadMessage_StopNotifyTxsConfirmationChangedResponseMessage - // *KaspadMessage_StartNotifyTxsConfirmationChangedRequestMessage - // *KaspadMessage_StartNotifyTxsConfirmationChangedResponseMessage - // *KaspadMessage_ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage - // *KaspadMessage_TxsConfirmationChangedNotficationMessage - // *KaspadMessage_NotifyTxListenerRequestMessage - // *KaspadMessage_StopNotifyTxListenerRequestMessage - // *KaspadMessage_StopNotifyTxListenerResponseMessage - // *KaspadMessage_StartNotifyTxListenerRequestMessage - // *KaspadMessage_StartNotifyTxListenerResponseMessage - // *KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsRequestMessage - // *KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsResponseMessage - // *KaspadMessage_TxListenerNotificationMessage + // *KaspadMessage_NotifyTxsConfirmationChangedRequst + // *KaspadMessage_NotifyTxsConfirmationChangedResponse + // *KaspadMessage_StopNotifyTxsConfirmationChangedRequest + // *KaspadMessage_StopNotifyTxsConfirmationChangedResponse + // *KaspadMessage_StartNotifyTxsConfirmationChangedRequest + // *KaspadMessage_StartNotifyTxsConfirmationChangedResponse + // *KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsRequest + // *KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsResponse + // *KaspadMessage_TxsConfirmationChangedNotification + // *KaspadMessage_NotifyNotifyAddressesTxsRequest + // *KaspadMessage_NotifyNotifyAddressesTxsResponse + // *KaspadMessage_StopNotifyAddressesTxsRequest + // *KaspadMessage_StopNotifyAddressesTxsResponse + // *KaspadMessage_StartNotifyAddressesTxsRequest + // *KaspadMessage_StartNotifyAddressesTxsResponse + // *KaspadMessage_ModifyNotifyAddressesTxsParamsRequest + // *KaspadMessage_ModifyNotifyAddressesTxsParamsResponse + // *KaspadMessage_AddressesTxsNotification Payload isKaspadMessage_Payload `protobuf_oneof:"payload"` } @@ -1316,114 +1318,128 @@ func (x *KaspadMessage) GetGetTxsConfirmationsResponse() *GetTxsConfirmationsRes return nil } -func (x *KaspadMessage) GetNotifyTxsConfirmationChangedRequstMessage() *NotifyTxsConfirmationChangedRequstMessage { - if x, ok := x.GetPayload().(*KaspadMessage_NotifyTxsConfirmationChangedRequstMessage); ok { - return x.NotifyTxsConfirmationChangedRequstMessage +func (x *KaspadMessage) GetNotifyTxsConfirmationChangedRequst() *NotifyTxsConfirmationChangedRequstMessage { + if x, ok := x.GetPayload().(*KaspadMessage_NotifyTxsConfirmationChangedRequst); ok { + return x.NotifyTxsConfirmationChangedRequst } return nil } -func (x *KaspadMessage) GetNotifyTxsConfirmationChangedResponseMessage() *NotifyTxsConfirmationChangedResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_NotifyTxsConfirmationChangedResponseMessage); ok { - return x.NotifyTxsConfirmationChangedResponseMessage +func (x *KaspadMessage) GetNotifyTxsConfirmationChangedResponse() *NotifyTxsConfirmationChangedResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_NotifyTxsConfirmationChangedResponse); ok { + return x.NotifyTxsConfirmationChangedResponse } return nil } -func (x *KaspadMessage) GetStopNotifyTxsConfirmationChangedRequestMessage() *StopNotifyTxsConfirmationChangedRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_StopNotifyTxsConfirmationChangedRequestMessage); ok { - return x.StopNotifyTxsConfirmationChangedRequestMessage +func (x *KaspadMessage) GetStopNotifyTxsConfirmationChangedRequest() *StopNotifyTxsConfirmationChangedRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_StopNotifyTxsConfirmationChangedRequest); ok { + return x.StopNotifyTxsConfirmationChangedRequest } return nil } -func (x *KaspadMessage) GetStopNotifyTxsConfirmationChangedResponseMessage() *StopNotifyTxsConfirmationChangedResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_StopNotifyTxsConfirmationChangedResponseMessage); ok { - return x.StopNotifyTxsConfirmationChangedResponseMessage +func (x *KaspadMessage) GetStopNotifyTxsConfirmationChangedResponse() *StopNotifyTxsConfirmationChangedResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_StopNotifyTxsConfirmationChangedResponse); ok { + return x.StopNotifyTxsConfirmationChangedResponse } return nil } -func (x *KaspadMessage) GetStartNotifyTxsConfirmationChangedRequestMessage() *StartNotifyTxsConfirmationChangedRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_StartNotifyTxsConfirmationChangedRequestMessage); ok { - return x.StartNotifyTxsConfirmationChangedRequestMessage +func (x *KaspadMessage) GetStartNotifyTxsConfirmationChangedRequest() *StartNotifyTxsConfirmationChangedRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_StartNotifyTxsConfirmationChangedRequest); ok { + return x.StartNotifyTxsConfirmationChangedRequest } return nil } -func (x *KaspadMessage) GetStartNotifyTxsConfirmationChangedResponseMessage() *StartNotifyTxsConfirmationChangedResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_StartNotifyTxsConfirmationChangedResponseMessage); ok { - return x.StartNotifyTxsConfirmationChangedResponseMessage +func (x *KaspadMessage) GetStartNotifyTxsConfirmationChangedResponse() *StartNotifyTxsConfirmationChangedResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_StartNotifyTxsConfirmationChangedResponse); ok { + return x.StartNotifyTxsConfirmationChangedResponse } return nil } -func (x *KaspadMessage) GetChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage() *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage); ok { - return x.ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage +func (x *KaspadMessage) GetModifyNotifyTxsConfirmationChangedParamsRequest() *ModifyNotifyTxsConfirmationChangedParamsRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsRequest); ok { + return x.ModifyNotifyTxsConfirmationChangedParamsRequest } return nil } -func (x *KaspadMessage) GetTxsConfirmationChangedNotficationMessage() *TxsConfirmationChangedNotficationMessage { - if x, ok := x.GetPayload().(*KaspadMessage_TxsConfirmationChangedNotficationMessage); ok { - return x.TxsConfirmationChangedNotficationMessage +func (x *KaspadMessage) GetModifyNotifyTxsConfirmationChangedParamsResponse() *ModifyNotifyTxsConfirmationChangedParamsResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsResponse); ok { + return x.ModifyNotifyTxsConfirmationChangedParamsResponse } return nil } -func (x *KaspadMessage) GetNotifyTxListenerRequestMessage() *NotifyTxListenerRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_NotifyTxListenerRequestMessage); ok { - return x.NotifyTxListenerRequestMessage +func (x *KaspadMessage) GetTxsConfirmationChangedNotification() *TxsConfirmationChangedNotificationMessage { + if x, ok := x.GetPayload().(*KaspadMessage_TxsConfirmationChangedNotification); ok { + return x.TxsConfirmationChangedNotification } return nil } -func (x *KaspadMessage) GetStopNotifyTxListenerRequestMessage() *StopNotifyTxListenerRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_StopNotifyTxListenerRequestMessage); ok { - return x.StopNotifyTxListenerRequestMessage +func (x *KaspadMessage) GetNotifyNotifyAddressesTxsRequest() *NotifyAddressesTxsRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_NotifyNotifyAddressesTxsRequest); ok { + return x.NotifyNotifyAddressesTxsRequest } return nil } -func (x *KaspadMessage) GetStopNotifyTxListenerResponseMessage() *StopNotifyTxListenerResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_StopNotifyTxListenerResponseMessage); ok { - return x.StopNotifyTxListenerResponseMessage +func (x *KaspadMessage) GetNotifyNotifyAddressesTxsResponse() *NotifyAddressesTxsResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_NotifyNotifyAddressesTxsResponse); ok { + return x.NotifyNotifyAddressesTxsResponse } return nil } -func (x *KaspadMessage) GetStartNotifyTxListenerRequestMessage() *StartNotifyTxListenerRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_StartNotifyTxListenerRequestMessage); ok { - return x.StartNotifyTxListenerRequestMessage +func (x *KaspadMessage) GetStopNotifyAddressesTxsRequest() *StopNotifyAddressesTxsRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_StopNotifyAddressesTxsRequest); ok { + return x.StopNotifyAddressesTxsRequest } return nil } -func (x *KaspadMessage) GetStartNotifyTxListenerResponseMessage() *StartNotifyTxListenerResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_StartNotifyTxListenerResponseMessage); ok { - return x.StartNotifyTxListenerResponseMessage +func (x *KaspadMessage) GetStopNotifyAddressesTxsResponse() *StopNotifyAddressesTxsResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_StopNotifyAddressesTxsResponse); ok { + return x.StopNotifyAddressesTxsResponse } return nil } -func (x *KaspadMessage) GetChangeNotifyTxListenerRequiredConfirmationsRequestMessage() *ChangeNotifyTxListenerRequiredConfirmationsRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsRequestMessage); ok { - return x.ChangeNotifyTxListenerRequiredConfirmationsRequestMessage +func (x *KaspadMessage) GetStartNotifyAddressesTxsRequest() *StartNotifyAddressesTxsRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_StartNotifyAddressesTxsRequest); ok { + return x.StartNotifyAddressesTxsRequest } return nil } -func (x *KaspadMessage) GetChangeNotifyTxListenerRequiredConfirmationsResponseMessage() *ChangeNotifyTxListenerRequiredConfirmationsResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsResponseMessage); ok { - return x.ChangeNotifyTxListenerRequiredConfirmationsResponseMessage +func (x *KaspadMessage) GetStartNotifyAddressesTxsResponse() *StartNotifyAddressesTxsResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_StartNotifyAddressesTxsResponse); ok { + return x.StartNotifyAddressesTxsResponse } return nil } -func (x *KaspadMessage) GetTxListenerNotificationMessage() *TxListenerNotificationMessage { - if x, ok := x.GetPayload().(*KaspadMessage_TxListenerNotificationMessage); ok { - return x.TxListenerNotificationMessage +func (x *KaspadMessage) GetModifyNotifyAddressesTxsParamsRequest() *ModifyNotifyAddressesTxsParamsRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_ModifyNotifyAddressesTxsParamsRequest); ok { + return x.ModifyNotifyAddressesTxsParamsRequest + } + return nil +} + +func (x *KaspadMessage) GetModifyNotifyAddressesTxsParamsResponse() *ModifyNotifyAddressesTxsParamsResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_ModifyNotifyAddressesTxsParamsResponse); ok { + return x.ModifyNotifyAddressesTxsParamsResponse + } + return nil +} + +func (x *KaspadMessage) GetAddressesTxsNotification() *AddressesTxsNotificationMessage { + if x, ok := x.GetPayload().(*KaspadMessage_AddressesTxsNotification); ok { + return x.AddressesTxsNotification } return nil } @@ -2048,68 +2064,76 @@ type KaspadMessage_GetTxsConfirmationsResponse struct { GetTxsConfirmationsResponse *GetTxsConfirmationsResponseMessage `protobuf:"bytes,1111,opt,name=getTxsConfirmationsResponse,proto3,oneof"` } -type KaspadMessage_NotifyTxsConfirmationChangedRequstMessage struct { - NotifyTxsConfirmationChangedRequstMessage *NotifyTxsConfirmationChangedRequstMessage `protobuf:"bytes,1112,opt,name=notifyTxsConfirmationChangedRequstMessage,proto3,oneof"` +type KaspadMessage_NotifyTxsConfirmationChangedRequst struct { + NotifyTxsConfirmationChangedRequst *NotifyTxsConfirmationChangedRequstMessage `protobuf:"bytes,1112,opt,name=notifyTxsConfirmationChangedRequst,proto3,oneof"` +} + +type KaspadMessage_NotifyTxsConfirmationChangedResponse struct { + NotifyTxsConfirmationChangedResponse *NotifyTxsConfirmationChangedResponseMessage `protobuf:"bytes,1113,opt,name=notifyTxsConfirmationChangedResponse,proto3,oneof"` } -type KaspadMessage_NotifyTxsConfirmationChangedResponseMessage struct { - NotifyTxsConfirmationChangedResponseMessage *NotifyTxsConfirmationChangedResponseMessage `protobuf:"bytes,1113,opt,name=notifyTxsConfirmationChangedResponseMessage,proto3,oneof"` +type KaspadMessage_StopNotifyTxsConfirmationChangedRequest struct { + StopNotifyTxsConfirmationChangedRequest *StopNotifyTxsConfirmationChangedRequestMessage `protobuf:"bytes,1114,opt,name=stopNotifyTxsConfirmationChangedRequest,proto3,oneof"` } -type KaspadMessage_StopNotifyTxsConfirmationChangedRequestMessage struct { - StopNotifyTxsConfirmationChangedRequestMessage *StopNotifyTxsConfirmationChangedRequestMessage `protobuf:"bytes,1114,opt,name=stopNotifyTxsConfirmationChangedRequestMessage,proto3,oneof"` +type KaspadMessage_StopNotifyTxsConfirmationChangedResponse struct { + StopNotifyTxsConfirmationChangedResponse *StopNotifyTxsConfirmationChangedResponseMessage `protobuf:"bytes,1115,opt,name=stopNotifyTxsConfirmationChangedResponse,proto3,oneof"` } -type KaspadMessage_StopNotifyTxsConfirmationChangedResponseMessage struct { - StopNotifyTxsConfirmationChangedResponseMessage *StopNotifyTxsConfirmationChangedResponseMessage `protobuf:"bytes,1115,opt,name=stopNotifyTxsConfirmationChangedResponseMessage,proto3,oneof"` +type KaspadMessage_StartNotifyTxsConfirmationChangedRequest struct { + StartNotifyTxsConfirmationChangedRequest *StartNotifyTxsConfirmationChangedRequestMessage `protobuf:"bytes,1116,opt,name=startNotifyTxsConfirmationChangedRequest,proto3,oneof"` } -type KaspadMessage_StartNotifyTxsConfirmationChangedRequestMessage struct { - StartNotifyTxsConfirmationChangedRequestMessage *StartNotifyTxsConfirmationChangedRequestMessage `protobuf:"bytes,1116,opt,name=startNotifyTxsConfirmationChangedRequestMessage,proto3,oneof"` +type KaspadMessage_StartNotifyTxsConfirmationChangedResponse struct { + StartNotifyTxsConfirmationChangedResponse *StartNotifyTxsConfirmationChangedResponseMessage `protobuf:"bytes,1117,opt,name=startNotifyTxsConfirmationChangedResponse,proto3,oneof"` } -type KaspadMessage_StartNotifyTxsConfirmationChangedResponseMessage struct { - StartNotifyTxsConfirmationChangedResponseMessage *StartNotifyTxsConfirmationChangedResponseMessage `protobuf:"bytes,1117,opt,name=startNotifyTxsConfirmationChangedResponseMessage,proto3,oneof"` +type KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsRequest struct { + ModifyNotifyTxsConfirmationChangedParamsRequest *ModifyNotifyTxsConfirmationChangedParamsRequestMessage `protobuf:"bytes,1118,opt,name=modifyNotifyTxsConfirmationChangedParamsRequest,proto3,oneof"` } -type KaspadMessage_ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage struct { - ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage `protobuf:"bytes,1118,opt,name=changeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage,proto3,oneof"` +type KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsResponse struct { + ModifyNotifyTxsConfirmationChangedParamsResponse *ModifyNotifyTxsConfirmationChangedParamsResponseMessage `protobuf:"bytes,1119,opt,name=modifyNotifyTxsConfirmationChangedParamsResponse,proto3,oneof"` } -type KaspadMessage_TxsConfirmationChangedNotficationMessage struct { - TxsConfirmationChangedNotficationMessage *TxsConfirmationChangedNotficationMessage `protobuf:"bytes,1119,opt,name=txsConfirmationChangedNotficationMessage,proto3,oneof"` +type KaspadMessage_TxsConfirmationChangedNotification struct { + TxsConfirmationChangedNotification *TxsConfirmationChangedNotificationMessage `protobuf:"bytes,1120,opt,name=txsConfirmationChangedNotification,proto3,oneof"` } -type KaspadMessage_NotifyTxListenerRequestMessage struct { - NotifyTxListenerRequestMessage *NotifyTxListenerRequestMessage `protobuf:"bytes,1120,opt,name=notifyTxListenerRequestMessage,proto3,oneof"` +type KaspadMessage_NotifyNotifyAddressesTxsRequest struct { + NotifyNotifyAddressesTxsRequest *NotifyAddressesTxsRequestMessage `protobuf:"bytes,1121,opt,name=notifyNotifyAddressesTxsRequest,proto3,oneof"` } -type KaspadMessage_StopNotifyTxListenerRequestMessage struct { - StopNotifyTxListenerRequestMessage *StopNotifyTxListenerRequestMessage `protobuf:"bytes,1121,opt,name=stopNotifyTxListenerRequestMessage,proto3,oneof"` +type KaspadMessage_NotifyNotifyAddressesTxsResponse struct { + NotifyNotifyAddressesTxsResponse *NotifyAddressesTxsResponseMessage `protobuf:"bytes,1122,opt,name=notifyNotifyAddressesTxsResponse,proto3,oneof"` } -type KaspadMessage_StopNotifyTxListenerResponseMessage struct { - StopNotifyTxListenerResponseMessage *StopNotifyTxListenerResponseMessage `protobuf:"bytes,1122,opt,name=stopNotifyTxListenerResponseMessage,proto3,oneof"` +type KaspadMessage_StopNotifyAddressesTxsRequest struct { + StopNotifyAddressesTxsRequest *StopNotifyAddressesTxsRequestMessage `protobuf:"bytes,1123,opt,name=stopNotifyAddressesTxsRequest,proto3,oneof"` } -type KaspadMessage_StartNotifyTxListenerRequestMessage struct { - StartNotifyTxListenerRequestMessage *StartNotifyTxListenerRequestMessage `protobuf:"bytes,1123,opt,name=startNotifyTxListenerRequestMessage,proto3,oneof"` +type KaspadMessage_StopNotifyAddressesTxsResponse struct { + StopNotifyAddressesTxsResponse *StopNotifyAddressesTxsResponseMessage `protobuf:"bytes,1124,opt,name=stopNotifyAddressesTxsResponse,proto3,oneof"` } -type KaspadMessage_StartNotifyTxListenerResponseMessage struct { - StartNotifyTxListenerResponseMessage *StartNotifyTxListenerResponseMessage `protobuf:"bytes,1124,opt,name=startNotifyTxListenerResponseMessage,proto3,oneof"` +type KaspadMessage_StartNotifyAddressesTxsRequest struct { + StartNotifyAddressesTxsRequest *StartNotifyAddressesTxsRequestMessage `protobuf:"bytes,1125,opt,name=startNotifyAddressesTxsRequest,proto3,oneof"` } -type KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsRequestMessage struct { - ChangeNotifyTxListenerRequiredConfirmationsRequestMessage *ChangeNotifyTxListenerRequiredConfirmationsRequestMessage `protobuf:"bytes,1125,opt,name=changeNotifyTxListenerRequiredConfirmationsRequestMessage,proto3,oneof"` +type KaspadMessage_StartNotifyAddressesTxsResponse struct { + StartNotifyAddressesTxsResponse *StartNotifyAddressesTxsResponseMessage `protobuf:"bytes,1126,opt,name=startNotifyAddressesTxsResponse,proto3,oneof"` } -type KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsResponseMessage struct { - ChangeNotifyTxListenerRequiredConfirmationsResponseMessage *ChangeNotifyTxListenerRequiredConfirmationsResponseMessage `protobuf:"bytes,1126,opt,name=changeNotifyTxListenerRequiredConfirmationsResponseMessage,proto3,oneof"` +type KaspadMessage_ModifyNotifyAddressesTxsParamsRequest struct { + ModifyNotifyAddressesTxsParamsRequest *ModifyNotifyAddressesTxsParamsRequestMessage `protobuf:"bytes,1127,opt,name=modifyNotifyAddressesTxsParamsRequest,proto3,oneof"` } -type KaspadMessage_TxListenerNotificationMessage struct { - TxListenerNotificationMessage *TxListenerNotificationMessage `protobuf:"bytes,1127,opt,name=txListenerNotificationMessage,proto3,oneof"` +type KaspadMessage_ModifyNotifyAddressesTxsParamsResponse struct { + ModifyNotifyAddressesTxsParamsResponse *ModifyNotifyAddressesTxsParamsResponseMessage `protobuf:"bytes,1128,opt,name=modifyNotifyAddressesTxsParamsResponse,proto3,oneof"` +} + +type KaspadMessage_AddressesTxsNotification struct { + AddressesTxsNotification *AddressesTxsNotificationMessage `protobuf:"bytes,1129,opt,name=AddressesTxsNotification,proto3,oneof"` } func (*KaspadMessage_Addresses) isKaspadMessage_Payload() {} @@ -2420,40 +2444,41 @@ func (*KaspadMessage_GetTxsConfirmationsRequest) isKaspadMessage_Payload() {} func (*KaspadMessage_GetTxsConfirmationsResponse) isKaspadMessage_Payload() {} -func (*KaspadMessage_NotifyTxsConfirmationChangedRequstMessage) isKaspadMessage_Payload() {} +func (*KaspadMessage_NotifyTxsConfirmationChangedRequst) isKaspadMessage_Payload() {} -func (*KaspadMessage_NotifyTxsConfirmationChangedResponseMessage) isKaspadMessage_Payload() {} +func (*KaspadMessage_NotifyTxsConfirmationChangedResponse) isKaspadMessage_Payload() {} -func (*KaspadMessage_StopNotifyTxsConfirmationChangedRequestMessage) isKaspadMessage_Payload() {} +func (*KaspadMessage_StopNotifyTxsConfirmationChangedRequest) isKaspadMessage_Payload() {} -func (*KaspadMessage_StopNotifyTxsConfirmationChangedResponseMessage) isKaspadMessage_Payload() {} +func (*KaspadMessage_StopNotifyTxsConfirmationChangedResponse) isKaspadMessage_Payload() {} -func (*KaspadMessage_StartNotifyTxsConfirmationChangedRequestMessage) isKaspadMessage_Payload() {} +func (*KaspadMessage_StartNotifyTxsConfirmationChangedRequest) isKaspadMessage_Payload() {} -func (*KaspadMessage_StartNotifyTxsConfirmationChangedResponseMessage) isKaspadMessage_Payload() {} +func (*KaspadMessage_StartNotifyTxsConfirmationChangedResponse) isKaspadMessage_Payload() {} -func (*KaspadMessage_ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage) isKaspadMessage_Payload() { -} +func (*KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsRequest) isKaspadMessage_Payload() {} -func (*KaspadMessage_TxsConfirmationChangedNotficationMessage) isKaspadMessage_Payload() {} +func (*KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsResponse) isKaspadMessage_Payload() {} -func (*KaspadMessage_NotifyTxListenerRequestMessage) isKaspadMessage_Payload() {} +func (*KaspadMessage_TxsConfirmationChangedNotification) isKaspadMessage_Payload() {} -func (*KaspadMessage_StopNotifyTxListenerRequestMessage) isKaspadMessage_Payload() {} +func (*KaspadMessage_NotifyNotifyAddressesTxsRequest) isKaspadMessage_Payload() {} -func (*KaspadMessage_StopNotifyTxListenerResponseMessage) isKaspadMessage_Payload() {} +func (*KaspadMessage_NotifyNotifyAddressesTxsResponse) isKaspadMessage_Payload() {} -func (*KaspadMessage_StartNotifyTxListenerRequestMessage) isKaspadMessage_Payload() {} +func (*KaspadMessage_StopNotifyAddressesTxsRequest) isKaspadMessage_Payload() {} -func (*KaspadMessage_StartNotifyTxListenerResponseMessage) isKaspadMessage_Payload() {} +func (*KaspadMessage_StopNotifyAddressesTxsResponse) isKaspadMessage_Payload() {} -func (*KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsRequestMessage) isKaspadMessage_Payload() { -} +func (*KaspadMessage_StartNotifyAddressesTxsRequest) isKaspadMessage_Payload() {} -func (*KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsResponseMessage) isKaspadMessage_Payload() { -} +func (*KaspadMessage_StartNotifyAddressesTxsResponse) isKaspadMessage_Payload() {} + +func (*KaspadMessage_ModifyNotifyAddressesTxsParamsRequest) isKaspadMessage_Payload() {} -func (*KaspadMessage_TxListenerNotificationMessage) isKaspadMessage_Payload() {} +func (*KaspadMessage_ModifyNotifyAddressesTxsParamsResponse) isKaspadMessage_Payload() {} + +func (*KaspadMessage_AddressesTxsNotification) isKaspadMessage_Payload() {} var File_messages_proto protoreflect.FileDescriptor @@ -2461,7 +2486,7 @@ var file_messages_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x1a, 0x09, 0x70, 0x32, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x09, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xcd, 0x97, 0x01, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, + 0x6f, 0x22, 0xcf, 0x97, 0x01, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4d, 0x65, 0x73, @@ -3514,180 +3539,180 @@ var file_messages_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x95, 0x01, 0x0a, 0x29, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, + 0x65, 0x12, 0x87, 0x01, 0x0a, 0x22, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0xd8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x29, - 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x2b, 0x6e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xd9, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2b, 0x6e, 0x6f, 0x74, 0x69, + 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x73, 0x74, 0x18, 0xd8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0xa4, 0x01, 0x0a, 0x2e, 0x73, 0x74, 0x6f, 0x70, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xda, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, - 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2e, + 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, + 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x73, 0x74, 0x12, 0x8d, 0x01, 0x0a, 0x24, + 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xd9, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, + 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x24, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x96, 0x01, 0x0a, 0x27, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0xa7, - 0x01, 0x0a, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0xdb, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xda, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x27, 0x73, 0x74, 0x6f, + 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x99, 0x01, 0x0a, 0x28, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0xa7, 0x01, 0x0a, 0x2f, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xdc, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, - 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x30, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, + 0x65, 0x18, 0xdb, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, + 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x28, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xdd, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x30, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0xec, 0x01, 0x0a, 0x46, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x12, 0x99, 0x01, 0x0a, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xde, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x51, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x46, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x92, - 0x01, 0x0a, 0x28, 0x74, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xdf, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xdc, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x28, 0x74, 0x78, 0x73, 0x43, 0x6f, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x9c, 0x01, 0x0a, + 0x29, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xdd, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x29, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xae, 0x01, 0x0a, 0x2f, + 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0xde, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, + 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2f, 0x6d, 0x6f, 0x64, + 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xb1, 0x01, 0x0a, + 0x30, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0xdf, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x30, + 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x87, 0x01, 0x0a, 0x22, 0x74, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe0, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x4e, 0x6f, 0x74, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x74, 0x0a, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xe0, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, - 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x22, 0x73, 0x74, - 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0xe1, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, - 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x83, 0x01, 0x0a, - 0x23, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0xe2, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x23, 0x73, - 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x23, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xe3, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x23, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x24, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x18, 0xe4, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x24, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0xc5, 0x01, 0x0a, 0x39, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0xe5, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, - 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x39, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0xc8, 0x01, 0x0a, 0x3a, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xe6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x45, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x3a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x71, 0x0a, 0x1d, 0x74, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xe7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x74, 0x78, 0x4c, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x32, 0x50, 0x0a, 0x03, 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, - 0x28, 0x01, 0x30, 0x01, 0x32, 0x50, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, 0x0d, 0x4d, + 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, 0x74, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x78, 0x0a, 0x1f, 0x6e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xe1, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x1f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x7b, 0x0a, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xe2, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x78, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0xe3, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x73, 0x74, + 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7b, 0x0a, 0x1e, 0x73, + 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xe4, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xe5, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7e, 0x0a, 0x1f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xe6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x1f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x90, 0x01, 0x0a, 0x25, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, + 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0xe7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x25, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x93, 0x01, 0x0a, 0x26, 0x6d, 0x6f, 0x64, + 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0xe8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x26, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, + 0x0a, 0x18, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe9, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x18, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x32, 0x50, 0x0a, 0x03, 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, - 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0x50, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, + 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, + 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3704,176 +3729,178 @@ func file_messages_proto_rawDescGZIP() []byte { var file_messages_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_messages_proto_goTypes = []interface{}{ - (*KaspadMessage)(nil), // 0: protowire.KaspadMessage - (*AddressesMessage)(nil), // 1: protowire.AddressesMessage - (*BlockMessage)(nil), // 2: protowire.BlockMessage - (*TransactionMessage)(nil), // 3: protowire.TransactionMessage - (*BlockLocatorMessage)(nil), // 4: protowire.BlockLocatorMessage - (*RequestAddressesMessage)(nil), // 5: protowire.RequestAddressesMessage - (*RequestRelayBlocksMessage)(nil), // 6: protowire.RequestRelayBlocksMessage - (*RequestTransactionsMessage)(nil), // 7: protowire.RequestTransactionsMessage - (*InvRelayBlockMessage)(nil), // 8: protowire.InvRelayBlockMessage - (*InvTransactionsMessage)(nil), // 9: protowire.InvTransactionsMessage - (*PingMessage)(nil), // 10: protowire.PingMessage - (*PongMessage)(nil), // 11: protowire.PongMessage - (*VerackMessage)(nil), // 12: protowire.VerackMessage - (*VersionMessage)(nil), // 13: protowire.VersionMessage - (*TransactionNotFoundMessage)(nil), // 14: protowire.TransactionNotFoundMessage - (*RejectMessage)(nil), // 15: protowire.RejectMessage - (*PruningPointUtxoSetChunkMessage)(nil), // 16: protowire.PruningPointUtxoSetChunkMessage - (*RequestIBDBlocksMessage)(nil), // 17: protowire.RequestIBDBlocksMessage - (*UnexpectedPruningPointMessage)(nil), // 18: protowire.UnexpectedPruningPointMessage - (*IbdBlockLocatorMessage)(nil), // 19: protowire.IbdBlockLocatorMessage - (*IbdBlockLocatorHighestHashMessage)(nil), // 20: protowire.IbdBlockLocatorHighestHashMessage - (*RequestNextPruningPointUtxoSetChunkMessage)(nil), // 21: protowire.RequestNextPruningPointUtxoSetChunkMessage - (*DonePruningPointUtxoSetChunksMessage)(nil), // 22: protowire.DonePruningPointUtxoSetChunksMessage - (*IbdBlockLocatorHighestHashNotFoundMessage)(nil), // 23: protowire.IbdBlockLocatorHighestHashNotFoundMessage - (*BlockWithTrustedDataMessage)(nil), // 24: protowire.BlockWithTrustedDataMessage - (*DoneBlocksWithTrustedDataMessage)(nil), // 25: protowire.DoneBlocksWithTrustedDataMessage - (*RequestPruningPointAndItsAnticoneMessage)(nil), // 26: protowire.RequestPruningPointAndItsAnticoneMessage - (*BlockHeadersMessage)(nil), // 27: protowire.BlockHeadersMessage - (*RequestNextHeadersMessage)(nil), // 28: protowire.RequestNextHeadersMessage - (*DoneHeadersMessage)(nil), // 29: protowire.DoneHeadersMessage - (*RequestPruningPointUTXOSetMessage)(nil), // 30: protowire.RequestPruningPointUTXOSetMessage - (*RequestHeadersMessage)(nil), // 31: protowire.RequestHeadersMessage - (*RequestBlockLocatorMessage)(nil), // 32: protowire.RequestBlockLocatorMessage - (*PruningPointsMessage)(nil), // 33: protowire.PruningPointsMessage - (*RequestPruningPointProofMessage)(nil), // 34: protowire.RequestPruningPointProofMessage - (*PruningPointProofMessage)(nil), // 35: protowire.PruningPointProofMessage - (*ReadyMessage)(nil), // 36: protowire.ReadyMessage - (*BlockWithTrustedDataV4Message)(nil), // 37: protowire.BlockWithTrustedDataV4Message - (*TrustedDataMessage)(nil), // 38: protowire.TrustedDataMessage - (*RequestIBDChainBlockLocatorMessage)(nil), // 39: protowire.RequestIBDChainBlockLocatorMessage - (*IbdChainBlockLocatorMessage)(nil), // 40: protowire.IbdChainBlockLocatorMessage - (*RequestAnticoneMessage)(nil), // 41: protowire.RequestAnticoneMessage - (*RequestNextPruningPointAndItsAnticoneBlocksMessage)(nil), // 42: protowire.RequestNextPruningPointAndItsAnticoneBlocksMessage - (*GetCurrentNetworkRequestMessage)(nil), // 43: protowire.GetCurrentNetworkRequestMessage - (*GetCurrentNetworkResponseMessage)(nil), // 44: protowire.GetCurrentNetworkResponseMessage - (*SubmitBlockRequestMessage)(nil), // 45: protowire.SubmitBlockRequestMessage - (*SubmitBlockResponseMessage)(nil), // 46: protowire.SubmitBlockResponseMessage - (*GetBlockTemplateRequestMessage)(nil), // 47: protowire.GetBlockTemplateRequestMessage - (*GetBlockTemplateResponseMessage)(nil), // 48: protowire.GetBlockTemplateResponseMessage - (*NotifyBlockAddedRequestMessage)(nil), // 49: protowire.NotifyBlockAddedRequestMessage - (*NotifyBlockAddedResponseMessage)(nil), // 50: protowire.NotifyBlockAddedResponseMessage - (*BlockAddedNotificationMessage)(nil), // 51: protowire.BlockAddedNotificationMessage - (*GetPeerAddressesRequestMessage)(nil), // 52: protowire.GetPeerAddressesRequestMessage - (*GetPeerAddressesResponseMessage)(nil), // 53: protowire.GetPeerAddressesResponseMessage - (*GetSelectedTipHashRequestMessage)(nil), // 54: protowire.GetSelectedTipHashRequestMessage - (*GetSelectedTipHashResponseMessage)(nil), // 55: protowire.GetSelectedTipHashResponseMessage - (*GetMempoolEntryRequestMessage)(nil), // 56: protowire.GetMempoolEntryRequestMessage - (*GetMempoolEntryResponseMessage)(nil), // 57: protowire.GetMempoolEntryResponseMessage - (*GetConnectedPeerInfoRequestMessage)(nil), // 58: protowire.GetConnectedPeerInfoRequestMessage - (*GetConnectedPeerInfoResponseMessage)(nil), // 59: protowire.GetConnectedPeerInfoResponseMessage - (*AddPeerRequestMessage)(nil), // 60: protowire.AddPeerRequestMessage - (*AddPeerResponseMessage)(nil), // 61: protowire.AddPeerResponseMessage - (*SubmitTransactionRequestMessage)(nil), // 62: protowire.SubmitTransactionRequestMessage - (*SubmitTransactionResponseMessage)(nil), // 63: protowire.SubmitTransactionResponseMessage - (*NotifyVirtualSelectedParentChainChangedRequestMessage)(nil), // 64: protowire.NotifyVirtualSelectedParentChainChangedRequestMessage - (*NotifyVirtualSelectedParentChainChangedResponseMessage)(nil), // 65: protowire.NotifyVirtualSelectedParentChainChangedResponseMessage - (*VirtualSelectedParentChainChangedNotificationMessage)(nil), // 66: protowire.VirtualSelectedParentChainChangedNotificationMessage - (*GetBlockRequestMessage)(nil), // 67: protowire.GetBlockRequestMessage - (*GetBlockResponseMessage)(nil), // 68: protowire.GetBlockResponseMessage - (*GetSubnetworkRequestMessage)(nil), // 69: protowire.GetSubnetworkRequestMessage - (*GetSubnetworkResponseMessage)(nil), // 70: protowire.GetSubnetworkResponseMessage - (*GetVirtualSelectedParentChainFromBlockRequestMessage)(nil), // 71: protowire.GetVirtualSelectedParentChainFromBlockRequestMessage - (*GetVirtualSelectedParentChainFromBlockResponseMessage)(nil), // 72: protowire.GetVirtualSelectedParentChainFromBlockResponseMessage - (*GetBlocksRequestMessage)(nil), // 73: protowire.GetBlocksRequestMessage - (*GetBlocksResponseMessage)(nil), // 74: protowire.GetBlocksResponseMessage - (*GetBlockCountRequestMessage)(nil), // 75: protowire.GetBlockCountRequestMessage - (*GetBlockCountResponseMessage)(nil), // 76: protowire.GetBlockCountResponseMessage - (*GetBlockDagInfoRequestMessage)(nil), // 77: protowire.GetBlockDagInfoRequestMessage - (*GetBlockDagInfoResponseMessage)(nil), // 78: protowire.GetBlockDagInfoResponseMessage - (*ResolveFinalityConflictRequestMessage)(nil), // 79: protowire.ResolveFinalityConflictRequestMessage - (*ResolveFinalityConflictResponseMessage)(nil), // 80: protowire.ResolveFinalityConflictResponseMessage - (*NotifyFinalityConflictsRequestMessage)(nil), // 81: protowire.NotifyFinalityConflictsRequestMessage - (*NotifyFinalityConflictsResponseMessage)(nil), // 82: protowire.NotifyFinalityConflictsResponseMessage - (*FinalityConflictNotificationMessage)(nil), // 83: protowire.FinalityConflictNotificationMessage - (*FinalityConflictResolvedNotificationMessage)(nil), // 84: protowire.FinalityConflictResolvedNotificationMessage - (*GetMempoolEntriesRequestMessage)(nil), // 85: protowire.GetMempoolEntriesRequestMessage - (*GetMempoolEntriesResponseMessage)(nil), // 86: protowire.GetMempoolEntriesResponseMessage - (*ShutDownRequestMessage)(nil), // 87: protowire.ShutDownRequestMessage - (*ShutDownResponseMessage)(nil), // 88: protowire.ShutDownResponseMessage - (*GetHeadersRequestMessage)(nil), // 89: protowire.GetHeadersRequestMessage - (*GetHeadersResponseMessage)(nil), // 90: protowire.GetHeadersResponseMessage - (*NotifyUtxosChangedRequestMessage)(nil), // 91: protowire.NotifyUtxosChangedRequestMessage - (*NotifyUtxosChangedResponseMessage)(nil), // 92: protowire.NotifyUtxosChangedResponseMessage - (*UtxosChangedNotificationMessage)(nil), // 93: protowire.UtxosChangedNotificationMessage - (*GetUtxosByAddressesRequestMessage)(nil), // 94: protowire.GetUtxosByAddressesRequestMessage - (*GetUtxosByAddressesResponseMessage)(nil), // 95: protowire.GetUtxosByAddressesResponseMessage - (*GetVirtualSelectedParentBlueScoreRequestMessage)(nil), // 96: protowire.GetVirtualSelectedParentBlueScoreRequestMessage - (*GetVirtualSelectedParentBlueScoreResponseMessage)(nil), // 97: protowire.GetVirtualSelectedParentBlueScoreResponseMessage - (*NotifyVirtualSelectedParentBlueScoreChangedRequestMessage)(nil), // 98: protowire.NotifyVirtualSelectedParentBlueScoreChangedRequestMessage - (*NotifyVirtualSelectedParentBlueScoreChangedResponseMessage)(nil), // 99: protowire.NotifyVirtualSelectedParentBlueScoreChangedResponseMessage - (*VirtualSelectedParentBlueScoreChangedNotificationMessage)(nil), // 100: protowire.VirtualSelectedParentBlueScoreChangedNotificationMessage - (*BanRequestMessage)(nil), // 101: protowire.BanRequestMessage - (*BanResponseMessage)(nil), // 102: protowire.BanResponseMessage - (*UnbanRequestMessage)(nil), // 103: protowire.UnbanRequestMessage - (*UnbanResponseMessage)(nil), // 104: protowire.UnbanResponseMessage - (*GetInfoRequestMessage)(nil), // 105: protowire.GetInfoRequestMessage - (*GetInfoResponseMessage)(nil), // 106: protowire.GetInfoResponseMessage - (*StopNotifyingUtxosChangedRequestMessage)(nil), // 107: protowire.StopNotifyingUtxosChangedRequestMessage - (*StopNotifyingUtxosChangedResponseMessage)(nil), // 108: protowire.StopNotifyingUtxosChangedResponseMessage - (*NotifyPruningPointUTXOSetOverrideRequestMessage)(nil), // 109: protowire.NotifyPruningPointUTXOSetOverrideRequestMessage - (*NotifyPruningPointUTXOSetOverrideResponseMessage)(nil), // 110: protowire.NotifyPruningPointUTXOSetOverrideResponseMessage - (*PruningPointUTXOSetOverrideNotificationMessage)(nil), // 111: protowire.PruningPointUTXOSetOverrideNotificationMessage - (*StopNotifyingPruningPointUTXOSetOverrideRequestMessage)(nil), // 112: protowire.StopNotifyingPruningPointUTXOSetOverrideRequestMessage - (*StopNotifyingPruningPointUTXOSetOverrideResponseMessage)(nil), // 113: protowire.StopNotifyingPruningPointUTXOSetOverrideResponseMessage - (*EstimateNetworkHashesPerSecondRequestMessage)(nil), // 114: protowire.EstimateNetworkHashesPerSecondRequestMessage - (*EstimateNetworkHashesPerSecondResponseMessage)(nil), // 115: protowire.EstimateNetworkHashesPerSecondResponseMessage - (*NotifyVirtualDaaScoreChangedRequestMessage)(nil), // 116: protowire.NotifyVirtualDaaScoreChangedRequestMessage - (*NotifyVirtualDaaScoreChangedResponseMessage)(nil), // 117: protowire.NotifyVirtualDaaScoreChangedResponseMessage - (*VirtualDaaScoreChangedNotificationMessage)(nil), // 118: protowire.VirtualDaaScoreChangedNotificationMessage - (*GetBalanceByAddressRequestMessage)(nil), // 119: protowire.GetBalanceByAddressRequestMessage - (*GetBalanceByAddressResponseMessage)(nil), // 120: protowire.GetBalanceByAddressResponseMessage - (*GetBalancesByAddressesRequestMessage)(nil), // 121: protowire.GetBalancesByAddressesRequestMessage - (*GetBalancesByAddressesResponseMessage)(nil), // 122: protowire.GetBalancesByAddressesResponseMessage - (*NotifyNewBlockTemplateRequestMessage)(nil), // 123: protowire.NotifyNewBlockTemplateRequestMessage - (*NotifyNewBlockTemplateResponseMessage)(nil), // 124: protowire.NotifyNewBlockTemplateResponseMessage - (*NewBlockTemplateNotificationMessage)(nil), // 125: protowire.NewBlockTemplateNotificationMessage - (*GetMempoolEntriesByAddressesRequestMessage)(nil), // 126: protowire.GetMempoolEntriesByAddressesRequestMessage - (*GetMempoolEntriesByAddressesResponseMessage)(nil), // 127: protowire.GetMempoolEntriesByAddressesResponseMessage - (*GetCoinSupplyRequestMessage)(nil), // 128: protowire.GetCoinSupplyRequestMessage - (*GetCoinSupplyResponseMessage)(nil), // 129: protowire.GetCoinSupplyResponseMessage - (*GetAcceptingBlockHashOfTxRequestMessage)(nil), // 130: protowire.GetAcceptingBlockHashOfTxRequestMessage - (*GetAcceptingBlockHashOfTxResponseMessage)(nil), // 131: protowire.GetAcceptingBlockHashOfTxResponseMessage - (*GetAcceptingBlockHashesOfTxsRequestMessage)(nil), // 132: protowire.GetAcceptingBlockHashesOfTxsRequestMessage - (*GetAcceptingBlockHashesOfTxsResponseMessage)(nil), // 133: protowire.GetAcceptingBlockHashesOfTxsResponseMessage - (*GetAcceptingBlockOfTxRequestMessage)(nil), // 134: protowire.GetAcceptingBlockOfTxRequestMessage - (*GetAcceptingBlockOfTxResponseMessage)(nil), // 135: protowire.GetAcceptingBlockOfTxResponseMessage - (*GetAcceptingBlocksOfTxsRequestMessage)(nil), // 136: protowire.GetAcceptingBlocksOfTxsRequestMessage - (*GetAcceptingBlocksOfTxsResponseMessage)(nil), // 137: protowire.GetAcceptingBlocksOfTxsResponseMessage - (*GetIncludingBlockHashOfTxRequestMessage)(nil), // 138: protowire.GetIncludingBlockHashOfTxRequestMessage - (*GetIncludingBlockHashOfTxResponseMessage)(nil), // 139: protowire.GetIncludingBlockHashOfTxResponseMessage - (*GetIncludingBlockHashesOfTxsRequestMessage)(nil), // 140: protowire.GetIncludingBlockHashesOfTxsRequestMessage - (*GetIncludingBlockHashesOfTxsResponseMessage)(nil), // 141: protowire.GetIncludingBlockHashesOfTxsResponseMessage - (*GetIncludingBlockOfTxRequestMessage)(nil), // 142: protowire.GetIncludingBlockOfTxRequestMessage - (*GetIncludingBlockOfTxResponseMessage)(nil), // 143: protowire.GetIncludingBlockOfTxResponseMessage - (*GetIncludingBlocksOfTxsRequestMessage)(nil), // 144: protowire.GetIncludingBlocksOfTxsRequestMessage - (*GetIncludingBlocksOfTxsResponseMessage)(nil), // 145: protowire.GetIncludingBlocksOfTxsResponseMessage - (*GetTxRequestMessage)(nil), // 146: protowire.GetTxRequestMessage - (*GetTxResponseMessage)(nil), // 147: protowire.GetTxResponseMessage - (*GetTxsRequestMessage)(nil), // 148: protowire.GetTxsRequestMessage - (*GetTxsResponseMessage)(nil), // 149: protowire.GetTxsResponseMessage - (*GetTxConfirmationsRequestMessage)(nil), // 150: protowire.GetTxConfirmationsRequestMessage - (*GetTxConfirmationsResponseMessage)(nil), // 151: protowire.GetTxConfirmationsResponseMessage - (*GetTxsConfirmationsRequestMessage)(nil), // 152: protowire.GetTxsConfirmationsRequestMessage - (*GetTxsConfirmationsResponseMessage)(nil), // 153: protowire.GetTxsConfirmationsResponseMessage - (*NotifyTxsConfirmationChangedRequstMessage)(nil), // 154: protowire.NotifyTxsConfirmationChangedRequstMessage - (*NotifyTxsConfirmationChangedResponseMessage)(nil), // 155: protowire.NotifyTxsConfirmationChangedResponseMessage - (*StopNotifyTxsConfirmationChangedRequestMessage)(nil), // 156: protowire.StopNotifyTxsConfirmationChangedRequestMessage - (*StopNotifyTxsConfirmationChangedResponseMessage)(nil), // 157: protowire.StopNotifyTxsConfirmationChangedResponseMessage - (*StartNotifyTxsConfirmationChangedRequestMessage)(nil), // 158: protowire.StartNotifyTxsConfirmationChangedRequestMessage - (*StartNotifyTxsConfirmationChangedResponseMessage)(nil), // 159: protowire.StartNotifyTxsConfirmationChangedResponseMessage - (*ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage)(nil), // 160: protowire.ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage - (*TxsConfirmationChangedNotficationMessage)(nil), // 161: protowire.TxsConfirmationChangedNotficationMessage - (*NotifyTxListenerRequestMessage)(nil), // 162: protowire.NotifyTxListenerRequestMessage - (*StopNotifyTxListenerRequestMessage)(nil), // 163: protowire.StopNotifyTxListenerRequestMessage - (*StopNotifyTxListenerResponseMessage)(nil), // 164: protowire.StopNotifyTxListenerResponseMessage - (*StartNotifyTxListenerRequestMessage)(nil), // 165: protowire.StartNotifyTxListenerRequestMessage - (*StartNotifyTxListenerResponseMessage)(nil), // 166: protowire.StartNotifyTxListenerResponseMessage - (*ChangeNotifyTxListenerRequiredConfirmationsRequestMessage)(nil), // 167: protowire.ChangeNotifyTxListenerRequiredConfirmationsRequestMessage - (*ChangeNotifyTxListenerRequiredConfirmationsResponseMessage)(nil), // 168: protowire.ChangeNotifyTxListenerRequiredConfirmationsResponseMessage - (*TxListenerNotificationMessage)(nil), // 169: protowire.TxListenerNotificationMessage + (*KaspadMessage)(nil), // 0: protowire.KaspadMessage + (*AddressesMessage)(nil), // 1: protowire.AddressesMessage + (*BlockMessage)(nil), // 2: protowire.BlockMessage + (*TransactionMessage)(nil), // 3: protowire.TransactionMessage + (*BlockLocatorMessage)(nil), // 4: protowire.BlockLocatorMessage + (*RequestAddressesMessage)(nil), // 5: protowire.RequestAddressesMessage + (*RequestRelayBlocksMessage)(nil), // 6: protowire.RequestRelayBlocksMessage + (*RequestTransactionsMessage)(nil), // 7: protowire.RequestTransactionsMessage + (*InvRelayBlockMessage)(nil), // 8: protowire.InvRelayBlockMessage + (*InvTransactionsMessage)(nil), // 9: protowire.InvTransactionsMessage + (*PingMessage)(nil), // 10: protowire.PingMessage + (*PongMessage)(nil), // 11: protowire.PongMessage + (*VerackMessage)(nil), // 12: protowire.VerackMessage + (*VersionMessage)(nil), // 13: protowire.VersionMessage + (*TransactionNotFoundMessage)(nil), // 14: protowire.TransactionNotFoundMessage + (*RejectMessage)(nil), // 15: protowire.RejectMessage + (*PruningPointUtxoSetChunkMessage)(nil), // 16: protowire.PruningPointUtxoSetChunkMessage + (*RequestIBDBlocksMessage)(nil), // 17: protowire.RequestIBDBlocksMessage + (*UnexpectedPruningPointMessage)(nil), // 18: protowire.UnexpectedPruningPointMessage + (*IbdBlockLocatorMessage)(nil), // 19: protowire.IbdBlockLocatorMessage + (*IbdBlockLocatorHighestHashMessage)(nil), // 20: protowire.IbdBlockLocatorHighestHashMessage + (*RequestNextPruningPointUtxoSetChunkMessage)(nil), // 21: protowire.RequestNextPruningPointUtxoSetChunkMessage + (*DonePruningPointUtxoSetChunksMessage)(nil), // 22: protowire.DonePruningPointUtxoSetChunksMessage + (*IbdBlockLocatorHighestHashNotFoundMessage)(nil), // 23: protowire.IbdBlockLocatorHighestHashNotFoundMessage + (*BlockWithTrustedDataMessage)(nil), // 24: protowire.BlockWithTrustedDataMessage + (*DoneBlocksWithTrustedDataMessage)(nil), // 25: protowire.DoneBlocksWithTrustedDataMessage + (*RequestPruningPointAndItsAnticoneMessage)(nil), // 26: protowire.RequestPruningPointAndItsAnticoneMessage + (*BlockHeadersMessage)(nil), // 27: protowire.BlockHeadersMessage + (*RequestNextHeadersMessage)(nil), // 28: protowire.RequestNextHeadersMessage + (*DoneHeadersMessage)(nil), // 29: protowire.DoneHeadersMessage + (*RequestPruningPointUTXOSetMessage)(nil), // 30: protowire.RequestPruningPointUTXOSetMessage + (*RequestHeadersMessage)(nil), // 31: protowire.RequestHeadersMessage + (*RequestBlockLocatorMessage)(nil), // 32: protowire.RequestBlockLocatorMessage + (*PruningPointsMessage)(nil), // 33: protowire.PruningPointsMessage + (*RequestPruningPointProofMessage)(nil), // 34: protowire.RequestPruningPointProofMessage + (*PruningPointProofMessage)(nil), // 35: protowire.PruningPointProofMessage + (*ReadyMessage)(nil), // 36: protowire.ReadyMessage + (*BlockWithTrustedDataV4Message)(nil), // 37: protowire.BlockWithTrustedDataV4Message + (*TrustedDataMessage)(nil), // 38: protowire.TrustedDataMessage + (*RequestIBDChainBlockLocatorMessage)(nil), // 39: protowire.RequestIBDChainBlockLocatorMessage + (*IbdChainBlockLocatorMessage)(nil), // 40: protowire.IbdChainBlockLocatorMessage + (*RequestAnticoneMessage)(nil), // 41: protowire.RequestAnticoneMessage + (*RequestNextPruningPointAndItsAnticoneBlocksMessage)(nil), // 42: protowire.RequestNextPruningPointAndItsAnticoneBlocksMessage + (*GetCurrentNetworkRequestMessage)(nil), // 43: protowire.GetCurrentNetworkRequestMessage + (*GetCurrentNetworkResponseMessage)(nil), // 44: protowire.GetCurrentNetworkResponseMessage + (*SubmitBlockRequestMessage)(nil), // 45: protowire.SubmitBlockRequestMessage + (*SubmitBlockResponseMessage)(nil), // 46: protowire.SubmitBlockResponseMessage + (*GetBlockTemplateRequestMessage)(nil), // 47: protowire.GetBlockTemplateRequestMessage + (*GetBlockTemplateResponseMessage)(nil), // 48: protowire.GetBlockTemplateResponseMessage + (*NotifyBlockAddedRequestMessage)(nil), // 49: protowire.NotifyBlockAddedRequestMessage + (*NotifyBlockAddedResponseMessage)(nil), // 50: protowire.NotifyBlockAddedResponseMessage + (*BlockAddedNotificationMessage)(nil), // 51: protowire.BlockAddedNotificationMessage + (*GetPeerAddressesRequestMessage)(nil), // 52: protowire.GetPeerAddressesRequestMessage + (*GetPeerAddressesResponseMessage)(nil), // 53: protowire.GetPeerAddressesResponseMessage + (*GetSelectedTipHashRequestMessage)(nil), // 54: protowire.GetSelectedTipHashRequestMessage + (*GetSelectedTipHashResponseMessage)(nil), // 55: protowire.GetSelectedTipHashResponseMessage + (*GetMempoolEntryRequestMessage)(nil), // 56: protowire.GetMempoolEntryRequestMessage + (*GetMempoolEntryResponseMessage)(nil), // 57: protowire.GetMempoolEntryResponseMessage + (*GetConnectedPeerInfoRequestMessage)(nil), // 58: protowire.GetConnectedPeerInfoRequestMessage + (*GetConnectedPeerInfoResponseMessage)(nil), // 59: protowire.GetConnectedPeerInfoResponseMessage + (*AddPeerRequestMessage)(nil), // 60: protowire.AddPeerRequestMessage + (*AddPeerResponseMessage)(nil), // 61: protowire.AddPeerResponseMessage + (*SubmitTransactionRequestMessage)(nil), // 62: protowire.SubmitTransactionRequestMessage + (*SubmitTransactionResponseMessage)(nil), // 63: protowire.SubmitTransactionResponseMessage + (*NotifyVirtualSelectedParentChainChangedRequestMessage)(nil), // 64: protowire.NotifyVirtualSelectedParentChainChangedRequestMessage + (*NotifyVirtualSelectedParentChainChangedResponseMessage)(nil), // 65: protowire.NotifyVirtualSelectedParentChainChangedResponseMessage + (*VirtualSelectedParentChainChangedNotificationMessage)(nil), // 66: protowire.VirtualSelectedParentChainChangedNotificationMessage + (*GetBlockRequestMessage)(nil), // 67: protowire.GetBlockRequestMessage + (*GetBlockResponseMessage)(nil), // 68: protowire.GetBlockResponseMessage + (*GetSubnetworkRequestMessage)(nil), // 69: protowire.GetSubnetworkRequestMessage + (*GetSubnetworkResponseMessage)(nil), // 70: protowire.GetSubnetworkResponseMessage + (*GetVirtualSelectedParentChainFromBlockRequestMessage)(nil), // 71: protowire.GetVirtualSelectedParentChainFromBlockRequestMessage + (*GetVirtualSelectedParentChainFromBlockResponseMessage)(nil), // 72: protowire.GetVirtualSelectedParentChainFromBlockResponseMessage + (*GetBlocksRequestMessage)(nil), // 73: protowire.GetBlocksRequestMessage + (*GetBlocksResponseMessage)(nil), // 74: protowire.GetBlocksResponseMessage + (*GetBlockCountRequestMessage)(nil), // 75: protowire.GetBlockCountRequestMessage + (*GetBlockCountResponseMessage)(nil), // 76: protowire.GetBlockCountResponseMessage + (*GetBlockDagInfoRequestMessage)(nil), // 77: protowire.GetBlockDagInfoRequestMessage + (*GetBlockDagInfoResponseMessage)(nil), // 78: protowire.GetBlockDagInfoResponseMessage + (*ResolveFinalityConflictRequestMessage)(nil), // 79: protowire.ResolveFinalityConflictRequestMessage + (*ResolveFinalityConflictResponseMessage)(nil), // 80: protowire.ResolveFinalityConflictResponseMessage + (*NotifyFinalityConflictsRequestMessage)(nil), // 81: protowire.NotifyFinalityConflictsRequestMessage + (*NotifyFinalityConflictsResponseMessage)(nil), // 82: protowire.NotifyFinalityConflictsResponseMessage + (*FinalityConflictNotificationMessage)(nil), // 83: protowire.FinalityConflictNotificationMessage + (*FinalityConflictResolvedNotificationMessage)(nil), // 84: protowire.FinalityConflictResolvedNotificationMessage + (*GetMempoolEntriesRequestMessage)(nil), // 85: protowire.GetMempoolEntriesRequestMessage + (*GetMempoolEntriesResponseMessage)(nil), // 86: protowire.GetMempoolEntriesResponseMessage + (*ShutDownRequestMessage)(nil), // 87: protowire.ShutDownRequestMessage + (*ShutDownResponseMessage)(nil), // 88: protowire.ShutDownResponseMessage + (*GetHeadersRequestMessage)(nil), // 89: protowire.GetHeadersRequestMessage + (*GetHeadersResponseMessage)(nil), // 90: protowire.GetHeadersResponseMessage + (*NotifyUtxosChangedRequestMessage)(nil), // 91: protowire.NotifyUtxosChangedRequestMessage + (*NotifyUtxosChangedResponseMessage)(nil), // 92: protowire.NotifyUtxosChangedResponseMessage + (*UtxosChangedNotificationMessage)(nil), // 93: protowire.UtxosChangedNotificationMessage + (*GetUtxosByAddressesRequestMessage)(nil), // 94: protowire.GetUtxosByAddressesRequestMessage + (*GetUtxosByAddressesResponseMessage)(nil), // 95: protowire.GetUtxosByAddressesResponseMessage + (*GetVirtualSelectedParentBlueScoreRequestMessage)(nil), // 96: protowire.GetVirtualSelectedParentBlueScoreRequestMessage + (*GetVirtualSelectedParentBlueScoreResponseMessage)(nil), // 97: protowire.GetVirtualSelectedParentBlueScoreResponseMessage + (*NotifyVirtualSelectedParentBlueScoreChangedRequestMessage)(nil), // 98: protowire.NotifyVirtualSelectedParentBlueScoreChangedRequestMessage + (*NotifyVirtualSelectedParentBlueScoreChangedResponseMessage)(nil), // 99: protowire.NotifyVirtualSelectedParentBlueScoreChangedResponseMessage + (*VirtualSelectedParentBlueScoreChangedNotificationMessage)(nil), // 100: protowire.VirtualSelectedParentBlueScoreChangedNotificationMessage + (*BanRequestMessage)(nil), // 101: protowire.BanRequestMessage + (*BanResponseMessage)(nil), // 102: protowire.BanResponseMessage + (*UnbanRequestMessage)(nil), // 103: protowire.UnbanRequestMessage + (*UnbanResponseMessage)(nil), // 104: protowire.UnbanResponseMessage + (*GetInfoRequestMessage)(nil), // 105: protowire.GetInfoRequestMessage + (*GetInfoResponseMessage)(nil), // 106: protowire.GetInfoResponseMessage + (*StopNotifyingUtxosChangedRequestMessage)(nil), // 107: protowire.StopNotifyingUtxosChangedRequestMessage + (*StopNotifyingUtxosChangedResponseMessage)(nil), // 108: protowire.StopNotifyingUtxosChangedResponseMessage + (*NotifyPruningPointUTXOSetOverrideRequestMessage)(nil), // 109: protowire.NotifyPruningPointUTXOSetOverrideRequestMessage + (*NotifyPruningPointUTXOSetOverrideResponseMessage)(nil), // 110: protowire.NotifyPruningPointUTXOSetOverrideResponseMessage + (*PruningPointUTXOSetOverrideNotificationMessage)(nil), // 111: protowire.PruningPointUTXOSetOverrideNotificationMessage + (*StopNotifyingPruningPointUTXOSetOverrideRequestMessage)(nil), // 112: protowire.StopNotifyingPruningPointUTXOSetOverrideRequestMessage + (*StopNotifyingPruningPointUTXOSetOverrideResponseMessage)(nil), // 113: protowire.StopNotifyingPruningPointUTXOSetOverrideResponseMessage + (*EstimateNetworkHashesPerSecondRequestMessage)(nil), // 114: protowire.EstimateNetworkHashesPerSecondRequestMessage + (*EstimateNetworkHashesPerSecondResponseMessage)(nil), // 115: protowire.EstimateNetworkHashesPerSecondResponseMessage + (*NotifyVirtualDaaScoreChangedRequestMessage)(nil), // 116: protowire.NotifyVirtualDaaScoreChangedRequestMessage + (*NotifyVirtualDaaScoreChangedResponseMessage)(nil), // 117: protowire.NotifyVirtualDaaScoreChangedResponseMessage + (*VirtualDaaScoreChangedNotificationMessage)(nil), // 118: protowire.VirtualDaaScoreChangedNotificationMessage + (*GetBalanceByAddressRequestMessage)(nil), // 119: protowire.GetBalanceByAddressRequestMessage + (*GetBalanceByAddressResponseMessage)(nil), // 120: protowire.GetBalanceByAddressResponseMessage + (*GetBalancesByAddressesRequestMessage)(nil), // 121: protowire.GetBalancesByAddressesRequestMessage + (*GetBalancesByAddressesResponseMessage)(nil), // 122: protowire.GetBalancesByAddressesResponseMessage + (*NotifyNewBlockTemplateRequestMessage)(nil), // 123: protowire.NotifyNewBlockTemplateRequestMessage + (*NotifyNewBlockTemplateResponseMessage)(nil), // 124: protowire.NotifyNewBlockTemplateResponseMessage + (*NewBlockTemplateNotificationMessage)(nil), // 125: protowire.NewBlockTemplateNotificationMessage + (*GetMempoolEntriesByAddressesRequestMessage)(nil), // 126: protowire.GetMempoolEntriesByAddressesRequestMessage + (*GetMempoolEntriesByAddressesResponseMessage)(nil), // 127: protowire.GetMempoolEntriesByAddressesResponseMessage + (*GetCoinSupplyRequestMessage)(nil), // 128: protowire.GetCoinSupplyRequestMessage + (*GetCoinSupplyResponseMessage)(nil), // 129: protowire.GetCoinSupplyResponseMessage + (*GetAcceptingBlockHashOfTxRequestMessage)(nil), // 130: protowire.GetAcceptingBlockHashOfTxRequestMessage + (*GetAcceptingBlockHashOfTxResponseMessage)(nil), // 131: protowire.GetAcceptingBlockHashOfTxResponseMessage + (*GetAcceptingBlockHashesOfTxsRequestMessage)(nil), // 132: protowire.GetAcceptingBlockHashesOfTxsRequestMessage + (*GetAcceptingBlockHashesOfTxsResponseMessage)(nil), // 133: protowire.GetAcceptingBlockHashesOfTxsResponseMessage + (*GetAcceptingBlockOfTxRequestMessage)(nil), // 134: protowire.GetAcceptingBlockOfTxRequestMessage + (*GetAcceptingBlockOfTxResponseMessage)(nil), // 135: protowire.GetAcceptingBlockOfTxResponseMessage + (*GetAcceptingBlocksOfTxsRequestMessage)(nil), // 136: protowire.GetAcceptingBlocksOfTxsRequestMessage + (*GetAcceptingBlocksOfTxsResponseMessage)(nil), // 137: protowire.GetAcceptingBlocksOfTxsResponseMessage + (*GetIncludingBlockHashOfTxRequestMessage)(nil), // 138: protowire.GetIncludingBlockHashOfTxRequestMessage + (*GetIncludingBlockHashOfTxResponseMessage)(nil), // 139: protowire.GetIncludingBlockHashOfTxResponseMessage + (*GetIncludingBlockHashesOfTxsRequestMessage)(nil), // 140: protowire.GetIncludingBlockHashesOfTxsRequestMessage + (*GetIncludingBlockHashesOfTxsResponseMessage)(nil), // 141: protowire.GetIncludingBlockHashesOfTxsResponseMessage + (*GetIncludingBlockOfTxRequestMessage)(nil), // 142: protowire.GetIncludingBlockOfTxRequestMessage + (*GetIncludingBlockOfTxResponseMessage)(nil), // 143: protowire.GetIncludingBlockOfTxResponseMessage + (*GetIncludingBlocksOfTxsRequestMessage)(nil), // 144: protowire.GetIncludingBlocksOfTxsRequestMessage + (*GetIncludingBlocksOfTxsResponseMessage)(nil), // 145: protowire.GetIncludingBlocksOfTxsResponseMessage + (*GetTxRequestMessage)(nil), // 146: protowire.GetTxRequestMessage + (*GetTxResponseMessage)(nil), // 147: protowire.GetTxResponseMessage + (*GetTxsRequestMessage)(nil), // 148: protowire.GetTxsRequestMessage + (*GetTxsResponseMessage)(nil), // 149: protowire.GetTxsResponseMessage + (*GetTxConfirmationsRequestMessage)(nil), // 150: protowire.GetTxConfirmationsRequestMessage + (*GetTxConfirmationsResponseMessage)(nil), // 151: protowire.GetTxConfirmationsResponseMessage + (*GetTxsConfirmationsRequestMessage)(nil), // 152: protowire.GetTxsConfirmationsRequestMessage + (*GetTxsConfirmationsResponseMessage)(nil), // 153: protowire.GetTxsConfirmationsResponseMessage + (*NotifyTxsConfirmationChangedRequstMessage)(nil), // 154: protowire.NotifyTxsConfirmationChangedRequstMessage + (*NotifyTxsConfirmationChangedResponseMessage)(nil), // 155: protowire.NotifyTxsConfirmationChangedResponseMessage + (*StopNotifyTxsConfirmationChangedRequestMessage)(nil), // 156: protowire.StopNotifyTxsConfirmationChangedRequestMessage + (*StopNotifyTxsConfirmationChangedResponseMessage)(nil), // 157: protowire.StopNotifyTxsConfirmationChangedResponseMessage + (*StartNotifyTxsConfirmationChangedRequestMessage)(nil), // 158: protowire.StartNotifyTxsConfirmationChangedRequestMessage + (*StartNotifyTxsConfirmationChangedResponseMessage)(nil), // 159: protowire.StartNotifyTxsConfirmationChangedResponseMessage + (*ModifyNotifyTxsConfirmationChangedParamsRequestMessage)(nil), // 160: protowire.ModifyNotifyTxsConfirmationChangedParamsRequestMessage + (*ModifyNotifyTxsConfirmationChangedParamsResponseMessage)(nil), // 161: protowire.ModifyNotifyTxsConfirmationChangedParamsResponseMessage + (*TxsConfirmationChangedNotificationMessage)(nil), // 162: protowire.TxsConfirmationChangedNotificationMessage + (*NotifyAddressesTxsRequestMessage)(nil), // 163: protowire.NotifyAddressesTxsRequestMessage + (*NotifyAddressesTxsResponseMessage)(nil), // 164: protowire.NotifyAddressesTxsResponseMessage + (*StopNotifyAddressesTxsRequestMessage)(nil), // 165: protowire.StopNotifyAddressesTxsRequestMessage + (*StopNotifyAddressesTxsResponseMessage)(nil), // 166: protowire.StopNotifyAddressesTxsResponseMessage + (*StartNotifyAddressesTxsRequestMessage)(nil), // 167: protowire.StartNotifyAddressesTxsRequestMessage + (*StartNotifyAddressesTxsResponseMessage)(nil), // 168: protowire.StartNotifyAddressesTxsResponseMessage + (*ModifyNotifyAddressesTxsParamsRequestMessage)(nil), // 169: protowire.ModifyNotifyAddressesTxsParamsRequestMessage + (*ModifyNotifyAddressesTxsParamsResponseMessage)(nil), // 170: protowire.ModifyNotifyAddressesTxsParamsResponseMessage + (*AddressesTxsNotificationMessage)(nil), // 171: protowire.AddressesTxsNotificationMessage } var file_messages_proto_depIdxs = []int32{ 1, // 0: protowire.KaspadMessage.addresses:type_name -> protowire.AddressesMessage @@ -4030,31 +4057,33 @@ var file_messages_proto_depIdxs = []int32{ 151, // 151: protowire.KaspadMessage.getTxConfirmationsResponse:type_name -> protowire.GetTxConfirmationsResponseMessage 152, // 152: protowire.KaspadMessage.getTxsConfirmationsRequest:type_name -> protowire.GetTxsConfirmationsRequestMessage 153, // 153: protowire.KaspadMessage.getTxsConfirmationsResponse:type_name -> protowire.GetTxsConfirmationsResponseMessage - 154, // 154: protowire.KaspadMessage.notifyTxsConfirmationChangedRequstMessage:type_name -> protowire.NotifyTxsConfirmationChangedRequstMessage - 155, // 155: protowire.KaspadMessage.notifyTxsConfirmationChangedResponseMessage:type_name -> protowire.NotifyTxsConfirmationChangedResponseMessage - 156, // 156: protowire.KaspadMessage.stopNotifyTxsConfirmationChangedRequestMessage:type_name -> protowire.StopNotifyTxsConfirmationChangedRequestMessage - 157, // 157: protowire.KaspadMessage.stopNotifyTxsConfirmationChangedResponseMessage:type_name -> protowire.StopNotifyTxsConfirmationChangedResponseMessage - 158, // 158: protowire.KaspadMessage.startNotifyTxsConfirmationChangedRequestMessage:type_name -> protowire.StartNotifyTxsConfirmationChangedRequestMessage - 159, // 159: protowire.KaspadMessage.startNotifyTxsConfirmationChangedResponseMessage:type_name -> protowire.StartNotifyTxsConfirmationChangedResponseMessage - 160, // 160: protowire.KaspadMessage.changeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage:type_name -> protowire.ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage - 161, // 161: protowire.KaspadMessage.txsConfirmationChangedNotficationMessage:type_name -> protowire.TxsConfirmationChangedNotficationMessage - 162, // 162: protowire.KaspadMessage.notifyTxListenerRequestMessage:type_name -> protowire.NotifyTxListenerRequestMessage - 163, // 163: protowire.KaspadMessage.stopNotifyTxListenerRequestMessage:type_name -> protowire.StopNotifyTxListenerRequestMessage - 164, // 164: protowire.KaspadMessage.stopNotifyTxListenerResponseMessage:type_name -> protowire.StopNotifyTxListenerResponseMessage - 165, // 165: protowire.KaspadMessage.startNotifyTxListenerRequestMessage:type_name -> protowire.StartNotifyTxListenerRequestMessage - 166, // 166: protowire.KaspadMessage.startNotifyTxListenerResponseMessage:type_name -> protowire.StartNotifyTxListenerResponseMessage - 167, // 167: protowire.KaspadMessage.changeNotifyTxListenerRequiredConfirmationsRequestMessage:type_name -> protowire.ChangeNotifyTxListenerRequiredConfirmationsRequestMessage - 168, // 168: protowire.KaspadMessage.changeNotifyTxListenerRequiredConfirmationsResponseMessage:type_name -> protowire.ChangeNotifyTxListenerRequiredConfirmationsResponseMessage - 169, // 169: protowire.KaspadMessage.txListenerNotificationMessage:type_name -> protowire.TxListenerNotificationMessage - 0, // 170: protowire.P2P.MessageStream:input_type -> protowire.KaspadMessage - 0, // 171: protowire.RPC.MessageStream:input_type -> protowire.KaspadMessage - 0, // 172: protowire.P2P.MessageStream:output_type -> protowire.KaspadMessage - 0, // 173: protowire.RPC.MessageStream:output_type -> protowire.KaspadMessage - 172, // [172:174] is the sub-list for method output_type - 170, // [170:172] is the sub-list for method input_type - 170, // [170:170] is the sub-list for extension type_name - 170, // [170:170] is the sub-list for extension extendee - 0, // [0:170] is the sub-list for field type_name + 154, // 154: protowire.KaspadMessage.notifyTxsConfirmationChangedRequst:type_name -> protowire.NotifyTxsConfirmationChangedRequstMessage + 155, // 155: protowire.KaspadMessage.notifyTxsConfirmationChangedResponse:type_name -> protowire.NotifyTxsConfirmationChangedResponseMessage + 156, // 156: protowire.KaspadMessage.stopNotifyTxsConfirmationChangedRequest:type_name -> protowire.StopNotifyTxsConfirmationChangedRequestMessage + 157, // 157: protowire.KaspadMessage.stopNotifyTxsConfirmationChangedResponse:type_name -> protowire.StopNotifyTxsConfirmationChangedResponseMessage + 158, // 158: protowire.KaspadMessage.startNotifyTxsConfirmationChangedRequest:type_name -> protowire.StartNotifyTxsConfirmationChangedRequestMessage + 159, // 159: protowire.KaspadMessage.startNotifyTxsConfirmationChangedResponse:type_name -> protowire.StartNotifyTxsConfirmationChangedResponseMessage + 160, // 160: protowire.KaspadMessage.modifyNotifyTxsConfirmationChangedParamsRequest:type_name -> protowire.ModifyNotifyTxsConfirmationChangedParamsRequestMessage + 161, // 161: protowire.KaspadMessage.modifyNotifyTxsConfirmationChangedParamsResponse:type_name -> protowire.ModifyNotifyTxsConfirmationChangedParamsResponseMessage + 162, // 162: protowire.KaspadMessage.txsConfirmationChangedNotification:type_name -> protowire.TxsConfirmationChangedNotificationMessage + 163, // 163: protowire.KaspadMessage.notifyNotifyAddressesTxsRequest:type_name -> protowire.NotifyAddressesTxsRequestMessage + 164, // 164: protowire.KaspadMessage.notifyNotifyAddressesTxsResponse:type_name -> protowire.NotifyAddressesTxsResponseMessage + 165, // 165: protowire.KaspadMessage.stopNotifyAddressesTxsRequest:type_name -> protowire.StopNotifyAddressesTxsRequestMessage + 166, // 166: protowire.KaspadMessage.stopNotifyAddressesTxsResponse:type_name -> protowire.StopNotifyAddressesTxsResponseMessage + 167, // 167: protowire.KaspadMessage.startNotifyAddressesTxsRequest:type_name -> protowire.StartNotifyAddressesTxsRequestMessage + 168, // 168: protowire.KaspadMessage.startNotifyAddressesTxsResponse:type_name -> protowire.StartNotifyAddressesTxsResponseMessage + 169, // 169: protowire.KaspadMessage.modifyNotifyAddressesTxsParamsRequest:type_name -> protowire.ModifyNotifyAddressesTxsParamsRequestMessage + 170, // 170: protowire.KaspadMessage.modifyNotifyAddressesTxsParamsResponse:type_name -> protowire.ModifyNotifyAddressesTxsParamsResponseMessage + 171, // 171: protowire.KaspadMessage.AddressesTxsNotification:type_name -> protowire.AddressesTxsNotificationMessage + 0, // 172: protowire.P2P.MessageStream:input_type -> protowire.KaspadMessage + 0, // 173: protowire.RPC.MessageStream:input_type -> protowire.KaspadMessage + 0, // 174: protowire.P2P.MessageStream:output_type -> protowire.KaspadMessage + 0, // 175: protowire.RPC.MessageStream:output_type -> protowire.KaspadMessage + 174, // [174:176] is the sub-list for method output_type + 172, // [172:174] is the sub-list for method input_type + 172, // [172:172] is the sub-list for extension type_name + 172, // [172:172] is the sub-list for extension extendee + 0, // [0:172] is the sub-list for field type_name } func init() { file_messages_proto_init() } @@ -4233,22 +4262,24 @@ func file_messages_proto_init() { (*KaspadMessage_GetTxConfirmationsResponse)(nil), (*KaspadMessage_GetTxsConfirmationsRequest)(nil), (*KaspadMessage_GetTxsConfirmationsResponse)(nil), - (*KaspadMessage_NotifyTxsConfirmationChangedRequstMessage)(nil), - (*KaspadMessage_NotifyTxsConfirmationChangedResponseMessage)(nil), - (*KaspadMessage_StopNotifyTxsConfirmationChangedRequestMessage)(nil), - (*KaspadMessage_StopNotifyTxsConfirmationChangedResponseMessage)(nil), - (*KaspadMessage_StartNotifyTxsConfirmationChangedRequestMessage)(nil), - (*KaspadMessage_StartNotifyTxsConfirmationChangedResponseMessage)(nil), - (*KaspadMessage_ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage)(nil), - (*KaspadMessage_TxsConfirmationChangedNotficationMessage)(nil), - (*KaspadMessage_NotifyTxListenerRequestMessage)(nil), - (*KaspadMessage_StopNotifyTxListenerRequestMessage)(nil), - (*KaspadMessage_StopNotifyTxListenerResponseMessage)(nil), - (*KaspadMessage_StartNotifyTxListenerRequestMessage)(nil), - (*KaspadMessage_StartNotifyTxListenerResponseMessage)(nil), - (*KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsRequestMessage)(nil), - (*KaspadMessage_ChangeNotifyTxListenerRequiredConfirmationsResponseMessage)(nil), - (*KaspadMessage_TxListenerNotificationMessage)(nil), + (*KaspadMessage_NotifyTxsConfirmationChangedRequst)(nil), + (*KaspadMessage_NotifyTxsConfirmationChangedResponse)(nil), + (*KaspadMessage_StopNotifyTxsConfirmationChangedRequest)(nil), + (*KaspadMessage_StopNotifyTxsConfirmationChangedResponse)(nil), + (*KaspadMessage_StartNotifyTxsConfirmationChangedRequest)(nil), + (*KaspadMessage_StartNotifyTxsConfirmationChangedResponse)(nil), + (*KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsRequest)(nil), + (*KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsResponse)(nil), + (*KaspadMessage_TxsConfirmationChangedNotification)(nil), + (*KaspadMessage_NotifyNotifyAddressesTxsRequest)(nil), + (*KaspadMessage_NotifyNotifyAddressesTxsResponse)(nil), + (*KaspadMessage_StopNotifyAddressesTxsRequest)(nil), + (*KaspadMessage_StopNotifyAddressesTxsResponse)(nil), + (*KaspadMessage_StartNotifyAddressesTxsRequest)(nil), + (*KaspadMessage_StartNotifyAddressesTxsResponse)(nil), + (*KaspadMessage_ModifyNotifyAddressesTxsParamsRequest)(nil), + (*KaspadMessage_ModifyNotifyAddressesTxsParamsResponse)(nil), + (*KaspadMessage_AddressesTxsNotification)(nil), } type x struct{} out := protoimpl.TypeBuilder{ diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto index 21b92e409f..62faf400ba 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto @@ -164,23 +164,24 @@ message KaspadMessage { GetTxConfirmationsResponseMessage getTxConfirmationsResponse = 1109; GetTxsConfirmationsRequestMessage getTxsConfirmationsRequest = 1110; GetTxsConfirmationsResponseMessage getTxsConfirmationsResponse = 1111; - NotifyTxsConfirmationChangedRequstMessage notifyTxsConfirmationChangedRequstMessage = 1112; - NotifyTxsConfirmationChangedResponseMessage notifyTxsConfirmationChangedResponseMessage = 1113; - StopNotifyTxsConfirmationChangedRequestMessage stopNotifyTxsConfirmationChangedRequestMessage = 1114; - StopNotifyTxsConfirmationChangedResponseMessage stopNotifyTxsConfirmationChangedResponseMessage = 1115; - StartNotifyTxsConfirmationChangedRequestMessage startNotifyTxsConfirmationChangedRequestMessage= 1116; - StartNotifyTxsConfirmationChangedResponseMessage startNotifyTxsConfirmationChangedResponseMessage = 1117; - ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage changeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage = 1118; - TxsConfirmationChangedNotficationMessage txsConfirmationChangedNotficationMessage = 1119; - NotifyTxListenerRequestMessage notifyTxListenerRequestMessage = 1120; - StopNotifyTxListenerRequestMessage stopNotifyTxListenerRequestMessage = 1121; - StopNotifyTxListenerResponseMessage stopNotifyTxListenerResponseMessage = 1122; - StartNotifyTxListenerRequestMessage startNotifyTxListenerRequestMessage = 1123; - StartNotifyTxListenerResponseMessage startNotifyTxListenerResponseMessage = 1124; - ChangeNotifyTxListenerRequiredConfirmationsRequestMessage changeNotifyTxListenerRequiredConfirmationsRequestMessage = 1125; - ChangeNotifyTxListenerRequiredConfirmationsResponseMessage changeNotifyTxListenerRequiredConfirmationsResponseMessage = 1126; - TxListenerNotificationMessage txListenerNotificationMessage = 1127; - + NotifyTxsConfirmationChangedRequstMessage notifyTxsConfirmationChangedRequst = 1112; + NotifyTxsConfirmationChangedResponseMessage notifyTxsConfirmationChangedResponse = 1113; + StopNotifyTxsConfirmationChangedRequestMessage stopNotifyTxsConfirmationChangedRequest = 1114; + StopNotifyTxsConfirmationChangedResponseMessage stopNotifyTxsConfirmationChangedResponse = 1115; + StartNotifyTxsConfirmationChangedRequestMessage startNotifyTxsConfirmationChangedRequest = 1116; + StartNotifyTxsConfirmationChangedResponseMessage startNotifyTxsConfirmationChangedResponse = 1117; + ModifyNotifyTxsConfirmationChangedParamsRequestMessage modifyNotifyTxsConfirmationChangedParamsRequest = 1118; + ModifyNotifyTxsConfirmationChangedParamsResponseMessage modifyNotifyTxsConfirmationChangedParamsResponse = 1119; + TxsConfirmationChangedNotificationMessage txsConfirmationChangedNotification = 1120; + NotifyAddressesTxsRequestMessage notifyNotifyAddressesTxsRequest = 1121; + NotifyAddressesTxsResponseMessage notifyNotifyAddressesTxsResponse = 1122; + StopNotifyAddressesTxsRequestMessage stopNotifyAddressesTxsRequest = 1123; + StopNotifyAddressesTxsResponseMessage stopNotifyAddressesTxsResponse = 1124; + StartNotifyAddressesTxsRequestMessage startNotifyAddressesTxsRequest = 1125; + StartNotifyAddressesTxsResponseMessage startNotifyAddressesTxsResponse = 1126; + ModifyNotifyAddressesTxsParamsRequestMessage modifyNotifyAddressesTxsParamsRequest = 1127; + ModifyNotifyAddressesTxsParamsResponseMessage modifyNotifyAddressesTxsParamsResponse = 1128; + AddressesTxsNotificationMessage AddressesTxsNotification = 1129; } } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md index 408ce242be..8d1efef70f 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md @@ -140,28 +140,27 @@ - [GetTxsConfirmationsRequestMessage](#protowire.GetTxsConfirmationsRequestMessage) - [GetTxsConfirmationsResponseMessage](#protowire.GetTxsConfirmationsResponseMessage) - [NotifyTxsConfirmationChangedRequstMessage](#protowire.NotifyTxsConfirmationChangedRequstMessage) + - [NotifyTxsConfirmationChangedRequstMessage.Params](#protowire.NotifyTxsConfirmationChangedRequstMessage.Params) - [NotifyTxsConfirmationChangedResponseMessage](#protowire.NotifyTxsConfirmationChangedResponseMessage) - - [TxsConfirmationChangedNotficationMessage](#protowire.TxsConfirmationChangedNotficationMessage) - - [TxsConfirmationChangedNotficationMessage.Pending](#protowire.TxsConfirmationChangedNotficationMessage.Pending) - - [TxsConfirmationChangedNotficationMessage.Confirmed](#protowire.TxsConfirmationChangedNotficationMessage.Confirmed) + - [TxsConfirmationChangedNotificationMessage](#protowire.TxsConfirmationChangedNotificationMessage) - [StopNotifyTxsConfirmationChangedRequestMessage](#protowire.StopNotifyTxsConfirmationChangedRequestMessage) - [StopNotifyTxsConfirmationChangedResponseMessage](#protowire.StopNotifyTxsConfirmationChangedResponseMessage) - [StartNotifyTxsConfirmationChangedRequestMessage](#protowire.StartNotifyTxsConfirmationChangedRequestMessage) - [StartNotifyTxsConfirmationChangedResponseMessage](#protowire.StartNotifyTxsConfirmationChangedResponseMessage) - - [ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage](#protowire.ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage) - - [ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage](#protowire.ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage) + - [ModifyNotifyTxsConfirmationChangedParamsRequestMessage](#protowire.ModifyNotifyTxsConfirmationChangedParamsRequestMessage) + - [ModifyNotifyTxsConfirmationChangedParamsResponseMessage](#protowire.ModifyNotifyTxsConfirmationChangedParamsResponseMessage) - [TxEntryByAddress](#protowire.TxEntryByAddress) - - [NotifyTxListenerRequestMessage](#protowire.NotifyTxListenerRequestMessage) - - [NotifyTxListenerResponseMessage](#protowire.NotifyTxListenerResponseMessage) - - [StopNotifyTxListenerRequestMessage](#protowire.StopNotifyTxListenerRequestMessage) - - [StopNotifyTxListenerResponseMessage](#protowire.StopNotifyTxListenerResponseMessage) - - [StartNotifyTxListenerRequestMessage](#protowire.StartNotifyTxListenerRequestMessage) - - [StartNotifyTxListenerResponseMessage](#protowire.StartNotifyTxListenerResponseMessage) - - [ChangeNotifyTxListenerRequiredConfirmationsRequestMessage](#protowire.ChangeNotifyTxListenerRequiredConfirmationsRequestMessage) - - [ChangeNotifyTxListenerRequiredConfirmationsResponseMessage](#protowire.ChangeNotifyTxListenerRequiredConfirmationsResponseMessage) - - [TxListenerNotificationMessage](#protowire.TxListenerNotificationMessage) - - [TxListenerNotificationMessage.Pending](#protowire.TxListenerNotificationMessage.Pending) - - [TxListenerNotificationMessage.Confirmed](#protowire.TxListenerNotificationMessage.Confirmed) + - [TxEntriesByAddresses](#protowire.TxEntriesByAddresses) + - [NotifyAddressesTxsRequestMessage](#protowire.NotifyAddressesTxsRequestMessage) + - [NotifyAddressesTxsRequestMessage.Params](#protowire.NotifyAddressesTxsRequestMessage.Params) + - [NotifyAddressesTxsResponseMessage](#protowire.NotifyAddressesTxsResponseMessage) + - [StopNotifyAddressesTxsRequestMessage](#protowire.StopNotifyAddressesTxsRequestMessage) + - [StopNotifyAddressesTxsResponseMessage](#protowire.StopNotifyAddressesTxsResponseMessage) + - [StartNotifyAddressesTxsRequestMessage](#protowire.StartNotifyAddressesTxsRequestMessage) + - [StartNotifyAddressesTxsResponseMessage](#protowire.StartNotifyAddressesTxsResponseMessage) + - [ModifyNotifyAddressesTxsParamsRequestMessage](#protowire.ModifyNotifyAddressesTxsParamsRequestMessage) + - [ModifyNotifyAddressesTxsParamsResponseMessage](#protowire.ModifyNotifyAddressesTxsParamsResponseMessage) + - [AddressesTxsNotificationMessage](#protowire.AddressesTxsNotificationMessage) - [SubmitBlockResponseMessage.RejectReason](#protowire.SubmitBlockResponseMessage.RejectReason) @@ -1990,7 +1989,7 @@ See NotifyNewBlockTemplateRequestMessage ### GetAcceptingBlockHashesOfTxsRequestMessage - +Kaspad most be started with the `--txindex` flag for this Request to work. | Field | Type | Label | Description | @@ -2021,7 +2020,7 @@ See NotifyNewBlockTemplateRequestMessage ### GetAcceptingBlockOfTxRequestMessage - +Kaspad most be started with the `--txindex` flag for this Request to work. | Field | Type | Label | Description | @@ -2053,7 +2052,7 @@ See NotifyNewBlockTemplateRequestMessage ### GetAcceptingBlocksOfTxsRequestMessage - +Kaspad most be started with the `--txindex` flag for this Request to work. | Field | Type | Label | Description | @@ -2085,7 +2084,7 @@ See NotifyNewBlockTemplateRequestMessage ### GetIncludingBlockHashOfTxRequestMessage - +Kaspad most be started with the `--txindex` flag for this Request to work. | Field | Type | Label | Description | @@ -2116,7 +2115,7 @@ See NotifyNewBlockTemplateRequestMessage ### GetIncludingBlockHashesOfTxsRequestMessage - +Kaspad most be started with the `--txindex` flag for this Request to work. | Field | Type | Label | Description | @@ -2147,7 +2146,7 @@ See NotifyNewBlockTemplateRequestMessage ### GetIncludingBlockOfTxRequestMessage - +Kaspad most be started with the `--txindex` flag for this Request to work. | Field | Type | Label | Description | @@ -2179,7 +2178,7 @@ See NotifyNewBlockTemplateRequestMessage ### GetIncludingBlocksOfTxsRequestMessage - +Kaspad most be started with the `--txindex` flag for this Request to work. | Field | Type | Label | Description | @@ -2211,7 +2210,7 @@ See NotifyNewBlockTemplateRequestMessage ### GetTxRequestMessage - +Kaspad most be started with the `--txindex` flag for this Request to work. | Field | Type | Label | Description | @@ -2242,7 +2241,7 @@ See NotifyNewBlockTemplateRequestMessage ### GetTxsRequestMessage - +Kaspad most be started with the `--txindex` flag for this Request to work. | Field | Type | Label | Description | @@ -2273,7 +2272,7 @@ See NotifyNewBlockTemplateRequestMessage ### GetTxConfirmationsRequestMessage - +Kaspad most be started with the `--txindex` flag for this Request to work. | Field | Type | Label | Description | @@ -2304,7 +2303,7 @@ See NotifyNewBlockTemplateRequestMessage ### GetTxsConfirmationsRequestMessage - +Kaspad most be started with the `--txindex` flag for this Request to work. | Field | Type | Label | Description | @@ -2335,71 +2334,59 @@ See NotifyNewBlockTemplateRequestMessage ### NotifyTxsConfirmationChangedRequstMessage - +NotifyTxsConfirmationChangedRequstMessage is a listener that registers confirmations from supplied TxIDs +Kaspad most be started with the `--txindex` flag for this Request to work. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| TxIDs | [string](#string) | repeated | | -| requiredConfirmations | [uint32](#uint32) | | | -| includePending | [bool](#bool) | | | - - - - - - - - -### NotifyTxsConfirmationChangedResponseMessage - +| TxIDs | [string](#string) | repeated | initial TxIds to listen for when regestering for notifications | +| params | [NotifyTxsConfirmationChangedRequstMessage.Params](#protowire.NotifyTxsConfirmationChangedRequstMessage.Params) | | | - + -### TxsConfirmationChangedNotficationMessage +### NotifyTxsConfirmationChangedRequstMessage.Params | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| pending | [TxsConfirmationChangedNotficationMessage.Pending](#protowire.TxsConfirmationChangedNotficationMessage.Pending) | repeated | | -| confirmed | [TxsConfirmationChangedNotficationMessage.Confirmed](#protowire.TxsConfirmationChangedNotficationMessage.Confirmed) | repeated | | -| error | [RPCError](#protowire.RPCError) | | | - - +| requiredConfirmations | [uint32](#uint32) | | number of confirmations until a transaction is considered confirmed | +| includePending | [bool](#bool) | | weather to notify confirmation changes during pre-Confirmed states | - - -### TxsConfirmationChangedNotficationMessage.Pending + -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| txIDConfirmationsPairs | [RpcTxIDConfirmationsPair](#protowire.RpcTxIDConfirmationsPair) | repeated | | +### NotifyTxsConfirmationChangedResponseMessage - -### TxsConfirmationChangedNotficationMessage.Confirmed + +### TxsConfirmationChangedNotificationMessage +TxsConfirmationChangedNotificationMessage is the notification about txs pertaining to specified TxIDs | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| txIDConfirmationsPairs | [RpcTxIDConfirmationsPair](#protowire.RpcTxIDConfirmationsPair) | repeated | | +| requiredConfirmations | [uint32](#uint32) | | the required confirmations set when notification was sent | +| pending | [RpcTxIDConfirmationsPair](#protowire.RpcTxIDConfirmationsPair) | repeated | RpcTxIDConfirmationsPairs which have entered the virtual chain but not passed the required confirmations | +| confirmed | [RpcTxIDConfirmationsPair](#protowire.RpcTxIDConfirmationsPair) | repeated | RpcTxIDConfirmationsPairs which have entered the virtual chain and passed the required confirmations | +| unconfirmedTxIds | [string](#string) | repeated | TxIds which were not confirmed within the required confirmations. | +| error | [RPCError](#protowire.RPCError) | | | @@ -2409,7 +2396,7 @@ See NotifyNewBlockTemplateRequestMessage ### StopNotifyTxsConfirmationChangedRequestMessage - +most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work | Field | Type | Label | Description | @@ -2427,6 +2414,11 @@ See NotifyNewBlockTemplateRequestMessage +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [RPCError](#protowire.RPCError) | | | + + @@ -2434,7 +2426,8 @@ See NotifyNewBlockTemplateRequestMessage ### StartNotifyTxsConfirmationChangedRequestMessage - +StartNotifyTxsConfirmationChangedRequestMessage starts listening for Transaction confirmations with the specified TxIDs +Most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work | Field | Type | Label | Description | @@ -2452,30 +2445,42 @@ See NotifyNewBlockTemplateRequestMessage +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [RPCError](#protowire.RPCError) | | | - -### ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage + + +### ModifyNotifyTxsConfirmationChangedParamsRequestMessage +ModifyNotifyTxsConfirmationChangedParamsRequestMessage modfies the params of a registered `NotifyTxsConfirmationChangedRequstMessage` +most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | requiredConfirmations | [uint32](#uint32) | | | +| includePending | [bool](#bool) | | | + + - +### ModifyNotifyTxsConfirmationChangedParamsResponseMessage -### ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [RPCError](#protowire.RPCError) | | | + @@ -2498,62 +2503,76 @@ See NotifyNewBlockTemplateRequestMessage - + -### NotifyTxListenerRequestMessage +### TxEntriesByAddresses | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| addresses | [string](#string) | repeated | | -| requiredConfirmations | [uint32](#uint32) | | | -| includePending | [bool](#bool) | | | +| sent | [TxEntryByAddress](#protowire.TxEntryByAddress) | repeated | | +| received | [TxEntryByAddress](#protowire.TxEntryByAddress) | repeated | | - + -### NotifyTxListenerResponseMessage +### NotifyAddressesTxsRequestMessage +NotifyAddressesTxsChangedRequestMessage Listens for Txs pertaining to specified addresses according to the params specified +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| addresses | [string](#string) | repeated | initial addresses to listen for Tx changes when regestering for notifications | +| params | [NotifyAddressesTxsRequestMessage.Params](#protowire.NotifyAddressesTxsRequestMessage.Params) | | | + - + -### StopNotifyTxListenerRequestMessage +### NotifyAddressesTxsRequestMessage.Params | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| addresses | [string](#string) | repeated | | +| requiredConfirmations | [uint32](#uint32) | | number of confirmations until a transaction is considered confirmed | +| includePending | [bool](#bool) | | whether to notify confirmation changes during pre-Confirmed states | +| includeSending | [bool](#bool) | | whether to listen on addresses sending txs | +| includeReceiving | [bool](#bool) | | whether to listen on addresses reciving txs | + + - +### NotifyAddressesTxsResponseMessage -### StopNotifyTxListenerResponseMessage +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [RPCError](#protowire.RPCError) | | | - -### StartNotifyTxListenerRequestMessage + +### StopNotifyAddressesTxsRequestMessage +StopNotifyAddressesTxsRequestMessage stops listening for Txs pertaining to specified addresses +Most be registered to NotifyAddressTxChangedRequestMessage for this command to work | Field | Type | Label | Description | @@ -2565,84 +2584,98 @@ See NotifyNewBlockTemplateRequestMessage - + + +### StopNotifyAddressesTxsResponseMessage -### StartNotifyTxListenerResponseMessage +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [RPCError](#protowire.RPCError) | | | - -### ChangeNotifyTxListenerRequiredConfirmationsRequestMessage + +### StartNotifyAddressesTxsRequestMessage +StartNotifyAddressesTxsRequestMessage starts listening for Txs pertaining to specified addresses +Most be registered to NotifyAddressTxChangedRequestMessage for this command to work | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| requiredConfirmations | [uint32](#uint32) | | | +| addresses | [string](#string) | repeated | | + + - +### StartNotifyAddressesTxsResponseMessage -### ChangeNotifyTxListenerRequiredConfirmationsResponseMessage +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [RPCError](#protowire.RPCError) | | | - -### TxListenerNotificationMessage + +### ModifyNotifyAddressesTxsParamsRequestMessage +ModifyNotifyAddressesTxsParamsRequestMessage modifies the params used for a regesitered `NotifyAddressesTxsRequest` +Most be registered to NotifyAddressTxChangedRequestMessage for this command to work | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| pending | [TxListenerNotificationMessage.Pending](#protowire.TxListenerNotificationMessage.Pending) | | | -| confirmed | [TxListenerNotificationMessage.Confirmed](#protowire.TxListenerNotificationMessage.Confirmed) | | | +| requiredConfirmations | [uint32](#uint32) | | | +| includePending | [bool](#bool) | | | +| includeSending | [bool](#bool) | | | +| includeReceiving | [bool](#bool) | | | - + -### TxListenerNotificationMessage.Pending +### ModifyNotifyAddressesTxsParamsResponseMessage | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| sent | [TxEntryByAddress](#protowire.TxEntryByAddress) | repeated | | -| received | [TxEntryByAddress](#protowire.TxEntryByAddress) | repeated | | - +| error | [RPCError](#protowire.RPCError) | | | - -### TxListenerNotificationMessage.Confirmed + +### AddressesTxsNotificationMessage +AddressesTxsNotificationMessage is the notification about txs pertaining to specified addresses | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| requiredConfirmations | [uint32](#uint32) | | | -| sent | [TxEntryByAddress](#protowire.TxEntryByAddress) | repeated | | -| received | [TxEntryByAddress](#protowire.TxEntryByAddress) | repeated | | +| requiredConfirmations | [uint32](#uint32) | | the required confirmations set when notification was sent | +| pending | [TxEntriesByAddresses](#protowire.TxEntriesByAddresses) | | TxEntriesByAddresses which have entered the blockdag but not passed the required confirmations | +| confirmed | [TxEntriesByAddresses](#protowire.TxEntriesByAddresses) | | TxEntriesByAddresses which have entered the blockdag and passed the required confirmations | +| unconfirmed | [TxEntriesByAddresses](#protowire.TxEntriesByAddresses) | | TxEntriesByAddresses which have been pending, but removed via a reorg within the number of required confirmations. | diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go index c1a5a053ef..6f123f6974 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go @@ -6380,6 +6380,7 @@ func (x *RpcTxIDBlockPair) GetBlock() *RpcBlock { return nil } +//Kaspad most be started with the `--txindex` flag for this Request to work. type GetAcceptingBlockHashesOfTxsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6482,6 +6483,7 @@ func (x *GetAcceptingBlockHashesOfTxsResponseMessage) GetError() *RPCError { return nil } +//Kaspad most be started with the `--txindex` flag for this Request to work. type GetAcceptingBlockOfTxRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6592,6 +6594,7 @@ func (x *GetAcceptingBlockOfTxResponseMessage) GetError() *RPCError { return nil } +//Kaspad most be started with the `--txindex` flag for this Request to work. type GetAcceptingBlocksOfTxsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6702,6 +6705,7 @@ func (x *GetAcceptingBlocksOfTxsResponseMessage) GetError() *RPCError { return nil } +//Kaspad most be started with the `--txindex` flag for this Request to work. type GetIncludingBlockHashOfTxRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6804,6 +6808,7 @@ func (x *GetIncludingBlockHashOfTxResponseMessage) GetError() *RPCError { return nil } +//Kaspad most be started with the `--txindex` flag for this Request to work. type GetIncludingBlockHashesOfTxsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6906,6 +6911,7 @@ func (x *GetIncludingBlockHashesOfTxsResponseMessage) GetError() *RPCError { return nil } +//Kaspad most be started with the `--txindex` flag for this Request to work. type GetIncludingBlockOfTxRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7016,6 +7022,7 @@ func (x *GetIncludingBlockOfTxResponseMessage) GetError() *RPCError { return nil } +//Kaspad most be started with the `--txindex` flag for this Request to work. type GetIncludingBlocksOfTxsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7126,6 +7133,7 @@ func (x *GetIncludingBlocksOfTxsResponseMessage) GetError() *RPCError { return nil } +//Kaspad most be started with the `--txindex` flag for this Request to work. type GetTxRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7228,6 +7236,7 @@ func (x *GetTxResponseMessage) GetError() *RPCError { return nil } +//Kaspad most be started with the `--txindex` flag for this Request to work. type GetTxsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7330,6 +7339,7 @@ func (x *GetTxsResponseMessage) GetError() *RPCError { return nil } +//Kaspad most be started with the `--txindex` flag for this Request to work. type GetTxConfirmationsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7432,6 +7442,7 @@ func (x *GetTxConfirmationsResponseMessage) GetError() *RPCError { return nil } +//Kaspad most be started with the `--txindex` flag for this Request to work. type GetTxsConfirmationsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7534,14 +7545,15 @@ func (x *GetTxsConfirmationsResponseMessage) GetError() *RPCError { return nil } +// NotifyTxsConfirmationChangedRequstMessage is a listener that registers confirmations from supplied TxIDs +// Kaspad most be started with the `--txindex` flag for this Request to work. type NotifyTxsConfirmationChangedRequstMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxIDs []string `protobuf:"bytes,1,rep,name=TxIDs,proto3" json:"TxIDs,omitempty"` - RequiredConfirmations uint32 `protobuf:"varint,2,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` - IncludePending bool `protobuf:"varint,3,opt,name=includePending,proto3" json:"includePending,omitempty"` + TxIDs []string `protobuf:"bytes,1,rep,name=TxIDs,proto3" json:"TxIDs,omitempty"` //initial TxIds to listen for when regestering for notifications + Params *NotifyTxsConfirmationChangedRequstMessage_Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` } func (x *NotifyTxsConfirmationChangedRequstMessage) Reset() { @@ -7583,18 +7595,11 @@ func (x *NotifyTxsConfirmationChangedRequstMessage) GetTxIDs() []string { return nil } -func (x *NotifyTxsConfirmationChangedRequstMessage) GetRequiredConfirmations() uint32 { +func (x *NotifyTxsConfirmationChangedRequstMessage) GetParams() *NotifyTxsConfirmationChangedRequstMessage_Params { if x != nil { - return x.RequiredConfirmations + return x.Params } - return 0 -} - -func (x *NotifyTxsConfirmationChangedRequstMessage) GetIncludePending() bool { - if x != nil { - return x.IncludePending - } - return false + return nil } type NotifyTxsConfirmationChangedResponseMessage struct { @@ -7635,18 +7640,21 @@ func (*NotifyTxsConfirmationChangedResponseMessage) Descriptor() ([]byte, []int) return file_rpc_proto_rawDescGZIP(), []int{136} } -type TxsConfirmationChangedNotficationMessage struct { +// TxsConfirmationChangedNotificationMessage is the notification about txs pertaining to specified TxIDs +type TxsConfirmationChangedNotificationMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pending []*TxsConfirmationChangedNotficationMessage_Pending `protobuf:"bytes,1,rep,name=pending,proto3" json:"pending,omitempty"` - Confirmed []*TxsConfirmationChangedNotficationMessage_Confirmed `protobuf:"bytes,2,rep,name=confirmed,proto3" json:"confirmed,omitempty"` - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` + RequiredConfirmations uint32 `protobuf:"varint,1,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` //the required confirmations set when notification was sent + Pending []*RpcTxIDConfirmationsPair `protobuf:"bytes,2,rep,name=pending,proto3" json:"pending,omitempty"` // RpcTxIDConfirmationsPairs which have entered the virtual chain but not passed the required confirmations + Confirmed []*RpcTxIDConfirmationsPair `protobuf:"bytes,3,rep,name=confirmed,proto3" json:"confirmed,omitempty"` // RpcTxIDConfirmationsPairs which have entered the virtual chain and passed the required confirmations + UnconfirmedTxIds []string `protobuf:"bytes,4,rep,name=unconfirmedTxIds,proto3" json:"unconfirmedTxIds,omitempty"` // TxIds which were not confirmed within the required confirmations. + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } -func (x *TxsConfirmationChangedNotficationMessage) Reset() { - *x = TxsConfirmationChangedNotficationMessage{} +func (x *TxsConfirmationChangedNotificationMessage) Reset() { + *x = TxsConfirmationChangedNotificationMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[137] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7654,13 +7662,13 @@ func (x *TxsConfirmationChangedNotficationMessage) Reset() { } } -func (x *TxsConfirmationChangedNotficationMessage) String() string { +func (x *TxsConfirmationChangedNotificationMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TxsConfirmationChangedNotficationMessage) ProtoMessage() {} +func (*TxsConfirmationChangedNotificationMessage) ProtoMessage() {} -func (x *TxsConfirmationChangedNotficationMessage) ProtoReflect() protoreflect.Message { +func (x *TxsConfirmationChangedNotificationMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[137] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7672,32 +7680,47 @@ func (x *TxsConfirmationChangedNotficationMessage) ProtoReflect() protoreflect.M return mi.MessageOf(x) } -// Deprecated: Use TxsConfirmationChangedNotficationMessage.ProtoReflect.Descriptor instead. -func (*TxsConfirmationChangedNotficationMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use TxsConfirmationChangedNotificationMessage.ProtoReflect.Descriptor instead. +func (*TxsConfirmationChangedNotificationMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{137} } -func (x *TxsConfirmationChangedNotficationMessage) GetPending() []*TxsConfirmationChangedNotficationMessage_Pending { +func (x *TxsConfirmationChangedNotificationMessage) GetRequiredConfirmations() uint32 { + if x != nil { + return x.RequiredConfirmations + } + return 0 +} + +func (x *TxsConfirmationChangedNotificationMessage) GetPending() []*RpcTxIDConfirmationsPair { if x != nil { return x.Pending } return nil } -func (x *TxsConfirmationChangedNotficationMessage) GetConfirmed() []*TxsConfirmationChangedNotficationMessage_Confirmed { +func (x *TxsConfirmationChangedNotificationMessage) GetConfirmed() []*RpcTxIDConfirmationsPair { if x != nil { return x.Confirmed } return nil } -func (x *TxsConfirmationChangedNotficationMessage) GetError() *RPCError { +func (x *TxsConfirmationChangedNotificationMessage) GetUnconfirmedTxIds() []string { + if x != nil { + return x.UnconfirmedTxIds + } + return nil +} + +func (x *TxsConfirmationChangedNotificationMessage) GetError() *RPCError { if x != nil { return x.Error } return nil } +// most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work type StopNotifyTxsConfirmationChangedRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7749,6 +7772,8 @@ type StopNotifyTxsConfirmationChangedResponseMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } func (x *StopNotifyTxsConfirmationChangedResponseMessage) Reset() { @@ -7783,6 +7808,15 @@ func (*StopNotifyTxsConfirmationChangedResponseMessage) Descriptor() ([]byte, [] return file_rpc_proto_rawDescGZIP(), []int{139} } +func (x *StopNotifyTxsConfirmationChangedResponseMessage) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + +// StartNotifyTxsConfirmationChangedRequestMessage starts listening for Transaction confirmations with the specified TxIDs +// Most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work type StartNotifyTxsConfirmationChangedRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7834,6 +7868,8 @@ type StartNotifyTxsConfirmationChangedResponseMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } func (x *StartNotifyTxsConfirmationChangedResponseMessage) Reset() { @@ -7868,16 +7904,26 @@ func (*StartNotifyTxsConfirmationChangedResponseMessage) Descriptor() ([]byte, [ return file_rpc_proto_rawDescGZIP(), []int{141} } -type ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage struct { +func (x *StartNotifyTxsConfirmationChangedResponseMessage) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + +// ModifyNotifyTxsConfirmationChangedParamsRequestMessage modfies the params of a registered `NotifyTxsConfirmationChangedRequstMessage` +// most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work +type ModifyNotifyTxsConfirmationChangedParamsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields RequiredConfirmations uint32 `protobuf:"varint,1,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` + IncludePending bool `protobuf:"varint,2,opt,name=includePending,proto3" json:"includePending,omitempty"` } -func (x *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage) Reset() { - *x = ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage{} +func (x *ModifyNotifyTxsConfirmationChangedParamsRequestMessage) Reset() { + *x = ModifyNotifyTxsConfirmationChangedParamsRequestMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[142] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7885,13 +7931,13 @@ func (x *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage) } } -func (x *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage) String() string { +func (x *ModifyNotifyTxsConfirmationChangedParamsRequestMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage) ProtoMessage() {} +func (*ModifyNotifyTxsConfirmationChangedParamsRequestMessage) ProtoMessage() {} -func (x *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage) ProtoReflect() protoreflect.Message { +func (x *ModifyNotifyTxsConfirmationChangedParamsRequestMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[142] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7903,26 +7949,35 @@ func (x *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage) return mi.MessageOf(x) } -// Deprecated: Use ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage.ProtoReflect.Descriptor instead. -func (*ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use ModifyNotifyTxsConfirmationChangedParamsRequestMessage.ProtoReflect.Descriptor instead. +func (*ModifyNotifyTxsConfirmationChangedParamsRequestMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{142} } -func (x *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage) GetRequiredConfirmations() uint32 { +func (x *ModifyNotifyTxsConfirmationChangedParamsRequestMessage) GetRequiredConfirmations() uint32 { if x != nil { return x.RequiredConfirmations } return 0 } -type ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage struct { +func (x *ModifyNotifyTxsConfirmationChangedParamsRequestMessage) GetIncludePending() bool { + if x != nil { + return x.IncludePending + } + return false +} + +type ModifyNotifyTxsConfirmationChangedParamsResponseMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } -func (x *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage) Reset() { - *x = ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage{} +func (x *ModifyNotifyTxsConfirmationChangedParamsResponseMessage) Reset() { + *x = ModifyNotifyTxsConfirmationChangedParamsResponseMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[143] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7930,13 +7985,13 @@ func (x *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage) } } -func (x *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage) String() string { +func (x *ModifyNotifyTxsConfirmationChangedParamsResponseMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage) ProtoMessage() {} +func (*ModifyNotifyTxsConfirmationChangedParamsResponseMessage) ProtoMessage() {} -func (x *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage) ProtoReflect() protoreflect.Message { +func (x *ModifyNotifyTxsConfirmationChangedParamsResponseMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[143] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7948,11 +8003,18 @@ func (x *ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage) return mi.MessageOf(x) } -// Deprecated: Use ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage.ProtoReflect.Descriptor instead. -func (*ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use ModifyNotifyTxsConfirmationChangedParamsResponseMessage.ProtoReflect.Descriptor instead. +func (*ModifyNotifyTxsConfirmationChangedParamsResponseMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{143} } +func (x *ModifyNotifyTxsConfirmationChangedParamsResponseMessage) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + type TxEntryByAddress struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -8016,18 +8078,17 @@ func (x *TxEntryByAddress) GetConfirmations() uint32 { return 0 } -type NotifyTxListenerRequestMessage struct { +type TxEntriesByAddresses struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` - RequiredConfirmations uint32 `protobuf:"varint,2,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` - IncludePending bool `protobuf:"varint,3,opt,name=includePending,proto3" json:"includePending,omitempty"` + Sent []*TxEntryByAddress `protobuf:"bytes,1,rep,name=sent,proto3" json:"sent,omitempty"` + Received []*TxEntryByAddress `protobuf:"bytes,2,rep,name=received,proto3" json:"received,omitempty"` } -func (x *NotifyTxListenerRequestMessage) Reset() { - *x = NotifyTxListenerRequestMessage{} +func (x *TxEntriesByAddresses) Reset() { + *x = TxEntriesByAddresses{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[145] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8035,13 +8096,13 @@ func (x *NotifyTxListenerRequestMessage) Reset() { } } -func (x *NotifyTxListenerRequestMessage) String() string { +func (x *TxEntriesByAddresses) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NotifyTxListenerRequestMessage) ProtoMessage() {} +func (*TxEntriesByAddresses) ProtoMessage() {} -func (x *NotifyTxListenerRequestMessage) ProtoReflect() protoreflect.Message { +func (x *TxEntriesByAddresses) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[145] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8053,40 +8114,37 @@ func (x *NotifyTxListenerRequestMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NotifyTxListenerRequestMessage.ProtoReflect.Descriptor instead. -func (*NotifyTxListenerRequestMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use TxEntriesByAddresses.ProtoReflect.Descriptor instead. +func (*TxEntriesByAddresses) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{145} } -func (x *NotifyTxListenerRequestMessage) GetAddresses() []string { +func (x *TxEntriesByAddresses) GetSent() []*TxEntryByAddress { if x != nil { - return x.Addresses + return x.Sent } return nil } -func (x *NotifyTxListenerRequestMessage) GetRequiredConfirmations() uint32 { +func (x *TxEntriesByAddresses) GetReceived() []*TxEntryByAddress { if x != nil { - return x.RequiredConfirmations - } - return 0 -} - -func (x *NotifyTxListenerRequestMessage) GetIncludePending() bool { - if x != nil { - return x.IncludePending + return x.Received } - return false + return nil } -type NotifyTxListenerResponseMessage struct { +// NotifyAddressesTxsChangedRequestMessage Listens for Txs pertaining to specified addresses according to the params specified +type NotifyAddressesTxsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` //initial addresses to listen for Tx changes when regestering for notifications + Params *NotifyAddressesTxsRequestMessage_Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` } -func (x *NotifyTxListenerResponseMessage) Reset() { - *x = NotifyTxListenerResponseMessage{} +func (x *NotifyAddressesTxsRequestMessage) Reset() { + *x = NotifyAddressesTxsRequestMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[146] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8094,13 +8152,13 @@ func (x *NotifyTxListenerResponseMessage) Reset() { } } -func (x *NotifyTxListenerResponseMessage) String() string { +func (x *NotifyAddressesTxsRequestMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NotifyTxListenerResponseMessage) ProtoMessage() {} +func (*NotifyAddressesTxsRequestMessage) ProtoMessage() {} -func (x *NotifyTxListenerResponseMessage) ProtoReflect() protoreflect.Message { +func (x *NotifyAddressesTxsRequestMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[146] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8112,21 +8170,35 @@ func (x *NotifyTxListenerResponseMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NotifyTxListenerResponseMessage.ProtoReflect.Descriptor instead. -func (*NotifyTxListenerResponseMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use NotifyAddressesTxsRequestMessage.ProtoReflect.Descriptor instead. +func (*NotifyAddressesTxsRequestMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{146} } -type StopNotifyTxListenerRequestMessage struct { +func (x *NotifyAddressesTxsRequestMessage) GetAddresses() []string { + if x != nil { + return x.Addresses + } + return nil +} + +func (x *NotifyAddressesTxsRequestMessage) GetParams() *NotifyAddressesTxsRequestMessage_Params { + if x != nil { + return x.Params + } + return nil +} + +type NotifyAddressesTxsResponseMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } -func (x *StopNotifyTxListenerRequestMessage) Reset() { - *x = StopNotifyTxListenerRequestMessage{} +func (x *NotifyAddressesTxsResponseMessage) Reset() { + *x = NotifyAddressesTxsResponseMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[147] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8134,13 +8206,13 @@ func (x *StopNotifyTxListenerRequestMessage) Reset() { } } -func (x *StopNotifyTxListenerRequestMessage) String() string { +func (x *NotifyAddressesTxsResponseMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StopNotifyTxListenerRequestMessage) ProtoMessage() {} +func (*NotifyAddressesTxsResponseMessage) ProtoMessage() {} -func (x *StopNotifyTxListenerRequestMessage) ProtoReflect() protoreflect.Message { +func (x *NotifyAddressesTxsResponseMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[147] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8152,26 +8224,30 @@ func (x *StopNotifyTxListenerRequestMessage) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use StopNotifyTxListenerRequestMessage.ProtoReflect.Descriptor instead. -func (*StopNotifyTxListenerRequestMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use NotifyAddressesTxsResponseMessage.ProtoReflect.Descriptor instead. +func (*NotifyAddressesTxsResponseMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{147} } -func (x *StopNotifyTxListenerRequestMessage) GetAddresses() []string { +func (x *NotifyAddressesTxsResponseMessage) GetError() *RPCError { if x != nil { - return x.Addresses + return x.Error } return nil } -type StopNotifyTxListenerResponseMessage struct { +// StopNotifyAddressesTxsRequestMessage stops listening for Txs pertaining to specified addresses +// Most be registered to NotifyAddressTxChangedRequestMessage for this command to work +type StopNotifyAddressesTxsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` } -func (x *StopNotifyTxListenerResponseMessage) Reset() { - *x = StopNotifyTxListenerResponseMessage{} +func (x *StopNotifyAddressesTxsRequestMessage) Reset() { + *x = StopNotifyAddressesTxsRequestMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[148] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8179,13 +8255,13 @@ func (x *StopNotifyTxListenerResponseMessage) Reset() { } } -func (x *StopNotifyTxListenerResponseMessage) String() string { +func (x *StopNotifyAddressesTxsRequestMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StopNotifyTxListenerResponseMessage) ProtoMessage() {} +func (*StopNotifyAddressesTxsRequestMessage) ProtoMessage() {} -func (x *StopNotifyTxListenerResponseMessage) ProtoReflect() protoreflect.Message { +func (x *StopNotifyAddressesTxsRequestMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[148] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8197,21 +8273,28 @@ func (x *StopNotifyTxListenerResponseMessage) ProtoReflect() protoreflect.Messag return mi.MessageOf(x) } -// Deprecated: Use StopNotifyTxListenerResponseMessage.ProtoReflect.Descriptor instead. -func (*StopNotifyTxListenerResponseMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use StopNotifyAddressesTxsRequestMessage.ProtoReflect.Descriptor instead. +func (*StopNotifyAddressesTxsRequestMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{148} } -type StartNotifyTxListenerRequestMessage struct { +func (x *StopNotifyAddressesTxsRequestMessage) GetAddresses() []string { + if x != nil { + return x.Addresses + } + return nil +} + +type StopNotifyAddressesTxsResponseMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } -func (x *StartNotifyTxListenerRequestMessage) Reset() { - *x = StartNotifyTxListenerRequestMessage{} +func (x *StopNotifyAddressesTxsResponseMessage) Reset() { + *x = StopNotifyAddressesTxsResponseMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[149] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8219,13 +8302,13 @@ func (x *StartNotifyTxListenerRequestMessage) Reset() { } } -func (x *StartNotifyTxListenerRequestMessage) String() string { +func (x *StopNotifyAddressesTxsResponseMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StartNotifyTxListenerRequestMessage) ProtoMessage() {} +func (*StopNotifyAddressesTxsResponseMessage) ProtoMessage() {} -func (x *StartNotifyTxListenerRequestMessage) ProtoReflect() protoreflect.Message { +func (x *StopNotifyAddressesTxsResponseMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[149] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8237,26 +8320,30 @@ func (x *StartNotifyTxListenerRequestMessage) ProtoReflect() protoreflect.Messag return mi.MessageOf(x) } -// Deprecated: Use StartNotifyTxListenerRequestMessage.ProtoReflect.Descriptor instead. -func (*StartNotifyTxListenerRequestMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use StopNotifyAddressesTxsResponseMessage.ProtoReflect.Descriptor instead. +func (*StopNotifyAddressesTxsResponseMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{149} } -func (x *StartNotifyTxListenerRequestMessage) GetAddresses() []string { +func (x *StopNotifyAddressesTxsResponseMessage) GetError() *RPCError { if x != nil { - return x.Addresses + return x.Error } return nil } -type StartNotifyTxListenerResponseMessage struct { +// StartNotifyAddressesTxsRequestMessage starts listening for Txs pertaining to specified addresses +// Most be registered to NotifyAddressTxChangedRequestMessage for this command to work +type StartNotifyAddressesTxsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` } -func (x *StartNotifyTxListenerResponseMessage) Reset() { - *x = StartNotifyTxListenerResponseMessage{} +func (x *StartNotifyAddressesTxsRequestMessage) Reset() { + *x = StartNotifyAddressesTxsRequestMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[150] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8264,13 +8351,13 @@ func (x *StartNotifyTxListenerResponseMessage) Reset() { } } -func (x *StartNotifyTxListenerResponseMessage) String() string { +func (x *StartNotifyAddressesTxsRequestMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StartNotifyTxListenerResponseMessage) ProtoMessage() {} +func (*StartNotifyAddressesTxsRequestMessage) ProtoMessage() {} -func (x *StartNotifyTxListenerResponseMessage) ProtoReflect() protoreflect.Message { +func (x *StartNotifyAddressesTxsRequestMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[150] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8282,21 +8369,28 @@ func (x *StartNotifyTxListenerResponseMessage) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use StartNotifyTxListenerResponseMessage.ProtoReflect.Descriptor instead. -func (*StartNotifyTxListenerResponseMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use StartNotifyAddressesTxsRequestMessage.ProtoReflect.Descriptor instead. +func (*StartNotifyAddressesTxsRequestMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{150} } -type ChangeNotifyTxListenerRequiredConfirmationsRequestMessage struct { +func (x *StartNotifyAddressesTxsRequestMessage) GetAddresses() []string { + if x != nil { + return x.Addresses + } + return nil +} + +type StartNotifyAddressesTxsResponseMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RequiredConfirmations uint32 `protobuf:"varint,1,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } -func (x *ChangeNotifyTxListenerRequiredConfirmationsRequestMessage) Reset() { - *x = ChangeNotifyTxListenerRequiredConfirmationsRequestMessage{} +func (x *StartNotifyAddressesTxsResponseMessage) Reset() { + *x = StartNotifyAddressesTxsResponseMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[151] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8304,13 +8398,13 @@ func (x *ChangeNotifyTxListenerRequiredConfirmationsRequestMessage) Reset() { } } -func (x *ChangeNotifyTxListenerRequiredConfirmationsRequestMessage) String() string { +func (x *StartNotifyAddressesTxsResponseMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ChangeNotifyTxListenerRequiredConfirmationsRequestMessage) ProtoMessage() {} +func (*StartNotifyAddressesTxsResponseMessage) ProtoMessage() {} -func (x *ChangeNotifyTxListenerRequiredConfirmationsRequestMessage) ProtoReflect() protoreflect.Message { +func (x *StartNotifyAddressesTxsResponseMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[151] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8322,26 +8416,33 @@ func (x *ChangeNotifyTxListenerRequiredConfirmationsRequestMessage) ProtoReflect return mi.MessageOf(x) } -// Deprecated: Use ChangeNotifyTxListenerRequiredConfirmationsRequestMessage.ProtoReflect.Descriptor instead. -func (*ChangeNotifyTxListenerRequiredConfirmationsRequestMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use StartNotifyAddressesTxsResponseMessage.ProtoReflect.Descriptor instead. +func (*StartNotifyAddressesTxsResponseMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{151} } -func (x *ChangeNotifyTxListenerRequiredConfirmationsRequestMessage) GetRequiredConfirmations() uint32 { +func (x *StartNotifyAddressesTxsResponseMessage) GetError() *RPCError { if x != nil { - return x.RequiredConfirmations + return x.Error } - return 0 + return nil } -type ChangeNotifyTxListenerRequiredConfirmationsResponseMessage struct { +// ModifyNotifyAddressesTxsParamsRequestMessage modifies the params used for a regesitered `NotifyAddressesTxsRequest` +// Most be registered to NotifyAddressTxChangedRequestMessage for this command to work +type ModifyNotifyAddressesTxsParamsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + RequiredConfirmations uint32 `protobuf:"varint,1,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` + IncludePending bool `protobuf:"varint,3,opt,name=includePending,proto3" json:"includePending,omitempty"` + IncludeSending bool `protobuf:"varint,4,opt,name=includeSending,proto3" json:"includeSending,omitempty"` + IncludeReceiving bool `protobuf:"varint,5,opt,name=includeReceiving,proto3" json:"includeReceiving,omitempty"` } -func (x *ChangeNotifyTxListenerRequiredConfirmationsResponseMessage) Reset() { - *x = ChangeNotifyTxListenerRequiredConfirmationsResponseMessage{} +func (x *ModifyNotifyAddressesTxsParamsRequestMessage) Reset() { + *x = ModifyNotifyAddressesTxsParamsRequestMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[152] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8349,13 +8450,13 @@ func (x *ChangeNotifyTxListenerRequiredConfirmationsResponseMessage) Reset() { } } -func (x *ChangeNotifyTxListenerRequiredConfirmationsResponseMessage) String() string { +func (x *ModifyNotifyAddressesTxsParamsRequestMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ChangeNotifyTxListenerRequiredConfirmationsResponseMessage) ProtoMessage() {} +func (*ModifyNotifyAddressesTxsParamsRequestMessage) ProtoMessage() {} -func (x *ChangeNotifyTxListenerRequiredConfirmationsResponseMessage) ProtoReflect() protoreflect.Message { +func (x *ModifyNotifyAddressesTxsParamsRequestMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[152] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8367,22 +8468,49 @@ func (x *ChangeNotifyTxListenerRequiredConfirmationsResponseMessage) ProtoReflec return mi.MessageOf(x) } -// Deprecated: Use ChangeNotifyTxListenerRequiredConfirmationsResponseMessage.ProtoReflect.Descriptor instead. -func (*ChangeNotifyTxListenerRequiredConfirmationsResponseMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use ModifyNotifyAddressesTxsParamsRequestMessage.ProtoReflect.Descriptor instead. +func (*ModifyNotifyAddressesTxsParamsRequestMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{152} } -type TxListenerNotificationMessage struct { +func (x *ModifyNotifyAddressesTxsParamsRequestMessage) GetRequiredConfirmations() uint32 { + if x != nil { + return x.RequiredConfirmations + } + return 0 +} + +func (x *ModifyNotifyAddressesTxsParamsRequestMessage) GetIncludePending() bool { + if x != nil { + return x.IncludePending + } + return false +} + +func (x *ModifyNotifyAddressesTxsParamsRequestMessage) GetIncludeSending() bool { + if x != nil { + return x.IncludeSending + } + return false +} + +func (x *ModifyNotifyAddressesTxsParamsRequestMessage) GetIncludeReceiving() bool { + if x != nil { + return x.IncludeReceiving + } + return false +} + +type ModifyNotifyAddressesTxsParamsResponseMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pending *TxListenerNotificationMessage_Pending `protobuf:"bytes,1,opt,name=pending,proto3" json:"pending,omitempty"` - Confirmed *TxListenerNotificationMessage_Confirmed `protobuf:"bytes,2,opt,name=confirmed,proto3" json:"confirmed,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } -func (x *TxListenerNotificationMessage) Reset() { - *x = TxListenerNotificationMessage{} +func (x *ModifyNotifyAddressesTxsParamsResponseMessage) Reset() { + *x = ModifyNotifyAddressesTxsParamsResponseMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[153] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8390,13 +8518,13 @@ func (x *TxListenerNotificationMessage) Reset() { } } -func (x *TxListenerNotificationMessage) String() string { +func (x *ModifyNotifyAddressesTxsParamsResponseMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TxListenerNotificationMessage) ProtoMessage() {} +func (*ModifyNotifyAddressesTxsParamsResponseMessage) ProtoMessage() {} -func (x *TxListenerNotificationMessage) ProtoReflect() protoreflect.Message { +func (x *ModifyNotifyAddressesTxsParamsResponseMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[153] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8408,35 +8536,32 @@ func (x *TxListenerNotificationMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TxListenerNotificationMessage.ProtoReflect.Descriptor instead. -func (*TxListenerNotificationMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use ModifyNotifyAddressesTxsParamsResponseMessage.ProtoReflect.Descriptor instead. +func (*ModifyNotifyAddressesTxsParamsResponseMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{153} } -func (x *TxListenerNotificationMessage) GetPending() *TxListenerNotificationMessage_Pending { +func (x *ModifyNotifyAddressesTxsParamsResponseMessage) GetError() *RPCError { if x != nil { - return x.Pending - } - return nil -} - -func (x *TxListenerNotificationMessage) GetConfirmed() *TxListenerNotificationMessage_Confirmed { - if x != nil { - return x.Confirmed + return x.Error } return nil } -type TxsConfirmationChangedNotficationMessage_Pending struct { +// AddressesTxsNotificationMessage is the notification about txs pertaining to specified addresses +type AddressesTxsNotificationMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxIDConfirmationsPairs []*RpcTxIDConfirmationsPair `protobuf:"bytes,1,rep,name=txIDConfirmationsPairs,proto3" json:"txIDConfirmationsPairs,omitempty"` + RequiredConfirmations uint32 `protobuf:"varint,1,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` //the required confirmations set when notification was sent + Pending *TxEntriesByAddresses `protobuf:"bytes,2,opt,name=pending,proto3" json:"pending,omitempty"` // TxEntriesByAddresses which have entered the blockdag but not passed the required confirmations + Confirmed *TxEntriesByAddresses `protobuf:"bytes,3,opt,name=confirmed,proto3" json:"confirmed,omitempty"` // TxEntriesByAddresses which have entered the blockdag and passed the required confirmations + Unconfirmed *TxEntriesByAddresses `protobuf:"bytes,4,opt,name=unconfirmed,proto3" json:"unconfirmed,omitempty"` // TxEntriesByAddresses which have been pending, but removed via a reorg within the number of required confirmations. } -func (x *TxsConfirmationChangedNotficationMessage_Pending) Reset() { - *x = TxsConfirmationChangedNotficationMessage_Pending{} +func (x *AddressesTxsNotificationMessage) Reset() { + *x = AddressesTxsNotificationMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[154] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8444,13 +8569,13 @@ func (x *TxsConfirmationChangedNotficationMessage_Pending) Reset() { } } -func (x *TxsConfirmationChangedNotficationMessage_Pending) String() string { +func (x *AddressesTxsNotificationMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TxsConfirmationChangedNotficationMessage_Pending) ProtoMessage() {} +func (*AddressesTxsNotificationMessage) ProtoMessage() {} -func (x *TxsConfirmationChangedNotficationMessage_Pending) ProtoReflect() protoreflect.Message { +func (x *AddressesTxsNotificationMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[154] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -8462,91 +8587,65 @@ func (x *TxsConfirmationChangedNotficationMessage_Pending) ProtoReflect() protor return mi.MessageOf(x) } -// Deprecated: Use TxsConfirmationChangedNotficationMessage_Pending.ProtoReflect.Descriptor instead. -func (*TxsConfirmationChangedNotficationMessage_Pending) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{137, 0} +// Deprecated: Use AddressesTxsNotificationMessage.ProtoReflect.Descriptor instead. +func (*AddressesTxsNotificationMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{154} } -func (x *TxsConfirmationChangedNotficationMessage_Pending) GetTxIDConfirmationsPairs() []*RpcTxIDConfirmationsPair { +func (x *AddressesTxsNotificationMessage) GetRequiredConfirmations() uint32 { if x != nil { - return x.TxIDConfirmationsPairs + return x.RequiredConfirmations } - return nil -} - -type TxsConfirmationChangedNotficationMessage_Confirmed struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TxIDConfirmationsPairs []*RpcTxIDConfirmationsPair `protobuf:"bytes,1,rep,name=txIDConfirmationsPairs,proto3" json:"txIDConfirmationsPairs,omitempty"` + return 0 } -func (x *TxsConfirmationChangedNotficationMessage_Confirmed) Reset() { - *x = TxsConfirmationChangedNotficationMessage_Confirmed{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[155] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *AddressesTxsNotificationMessage) GetPending() *TxEntriesByAddresses { + if x != nil { + return x.Pending } + return nil } -func (x *TxsConfirmationChangedNotficationMessage_Confirmed) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TxsConfirmationChangedNotficationMessage_Confirmed) ProtoMessage() {} - -func (x *TxsConfirmationChangedNotficationMessage_Confirmed) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[155] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *AddressesTxsNotificationMessage) GetConfirmed() *TxEntriesByAddresses { + if x != nil { + return x.Confirmed } - return mi.MessageOf(x) -} - -// Deprecated: Use TxsConfirmationChangedNotficationMessage_Confirmed.ProtoReflect.Descriptor instead. -func (*TxsConfirmationChangedNotficationMessage_Confirmed) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{137, 1} + return nil } -func (x *TxsConfirmationChangedNotficationMessage_Confirmed) GetTxIDConfirmationsPairs() []*RpcTxIDConfirmationsPair { +func (x *AddressesTxsNotificationMessage) GetUnconfirmed() *TxEntriesByAddresses { if x != nil { - return x.TxIDConfirmationsPairs + return x.Unconfirmed } return nil } -type TxListenerNotificationMessage_Pending struct { +type NotifyTxsConfirmationChangedRequstMessage_Params struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Sent []*TxEntryByAddress `protobuf:"bytes,1,rep,name=sent,proto3" json:"sent,omitempty"` - Received []*TxEntryByAddress `protobuf:"bytes,2,rep,name=received,proto3" json:"received,omitempty"` + RequiredConfirmations uint32 `protobuf:"varint,1,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` // number of confirmations until a transaction is considered confirmed + IncludePending bool `protobuf:"varint,2,opt,name=includePending,proto3" json:"includePending,omitempty"` // weather to notify confirmation changes during pre-Confirmed states } -func (x *TxListenerNotificationMessage_Pending) Reset() { - *x = TxListenerNotificationMessage_Pending{} +func (x *NotifyTxsConfirmationChangedRequstMessage_Params) Reset() { + *x = NotifyTxsConfirmationChangedRequstMessage_Params{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[156] + mi := &file_rpc_proto_msgTypes[155] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TxListenerNotificationMessage_Pending) String() string { +func (x *NotifyTxsConfirmationChangedRequstMessage_Params) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TxListenerNotificationMessage_Pending) ProtoMessage() {} +func (*NotifyTxsConfirmationChangedRequstMessage_Params) ProtoMessage() {} -func (x *TxListenerNotificationMessage_Pending) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[156] +func (x *NotifyTxsConfirmationChangedRequstMessage_Params) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[155] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8557,52 +8656,53 @@ func (x *TxListenerNotificationMessage_Pending) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use TxListenerNotificationMessage_Pending.ProtoReflect.Descriptor instead. -func (*TxListenerNotificationMessage_Pending) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{153, 0} +// Deprecated: Use NotifyTxsConfirmationChangedRequstMessage_Params.ProtoReflect.Descriptor instead. +func (*NotifyTxsConfirmationChangedRequstMessage_Params) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{135, 0} } -func (x *TxListenerNotificationMessage_Pending) GetSent() []*TxEntryByAddress { +func (x *NotifyTxsConfirmationChangedRequstMessage_Params) GetRequiredConfirmations() uint32 { if x != nil { - return x.Sent + return x.RequiredConfirmations } - return nil + return 0 } -func (x *TxListenerNotificationMessage_Pending) GetReceived() []*TxEntryByAddress { +func (x *NotifyTxsConfirmationChangedRequstMessage_Params) GetIncludePending() bool { if x != nil { - return x.Received + return x.IncludePending } - return nil + return false } -type TxListenerNotificationMessage_Confirmed struct { +type NotifyAddressesTxsRequestMessage_Params struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RequiredConfirmations uint32 `protobuf:"varint,1,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` - Sent []*TxEntryByAddress `protobuf:"bytes,2,rep,name=sent,proto3" json:"sent,omitempty"` - Received []*TxEntryByAddress `protobuf:"bytes,3,rep,name=received,proto3" json:"received,omitempty"` + RequiredConfirmations uint32 `protobuf:"varint,2,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` // number of confirmations until a transaction is considered confirmed + IncludePending bool `protobuf:"varint,3,opt,name=includePending,proto3" json:"includePending,omitempty"` //whether to notify confirmation changes during pre-Confirmed states + IncludeSending bool `protobuf:"varint,4,opt,name=includeSending,proto3" json:"includeSending,omitempty"` //whether to listen on addresses sending txs + IncludeReceiving bool `protobuf:"varint,5,opt,name=includeReceiving,proto3" json:"includeReceiving,omitempty"` //whether to listen on addresses reciving txs } -func (x *TxListenerNotificationMessage_Confirmed) Reset() { - *x = TxListenerNotificationMessage_Confirmed{} +func (x *NotifyAddressesTxsRequestMessage_Params) Reset() { + *x = NotifyAddressesTxsRequestMessage_Params{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[157] + mi := &file_rpc_proto_msgTypes[156] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TxListenerNotificationMessage_Confirmed) String() string { +func (x *NotifyAddressesTxsRequestMessage_Params) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TxListenerNotificationMessage_Confirmed) ProtoMessage() {} +func (*NotifyAddressesTxsRequestMessage_Params) ProtoMessage() {} -func (x *TxListenerNotificationMessage_Confirmed) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[157] +func (x *NotifyAddressesTxsRequestMessage_Params) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[156] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8613,30 +8713,37 @@ func (x *TxListenerNotificationMessage_Confirmed) ProtoReflect() protoreflect.Me return mi.MessageOf(x) } -// Deprecated: Use TxListenerNotificationMessage_Confirmed.ProtoReflect.Descriptor instead. -func (*TxListenerNotificationMessage_Confirmed) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{153, 1} +// Deprecated: Use NotifyAddressesTxsRequestMessage_Params.ProtoReflect.Descriptor instead. +func (*NotifyAddressesTxsRequestMessage_Params) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{146, 0} } -func (x *TxListenerNotificationMessage_Confirmed) GetRequiredConfirmations() uint32 { +func (x *NotifyAddressesTxsRequestMessage_Params) GetRequiredConfirmations() uint32 { if x != nil { return x.RequiredConfirmations } return 0 } -func (x *TxListenerNotificationMessage_Confirmed) GetSent() []*TxEntryByAddress { +func (x *NotifyAddressesTxsRequestMessage_Params) GetIncludePending() bool { if x != nil { - return x.Sent + return x.IncludePending } - return nil + return false } -func (x *TxListenerNotificationMessage_Confirmed) GetReceived() []*TxEntryByAddress { +func (x *NotifyAddressesTxsRequestMessage_Params) GetIncludeSending() bool { if x != nil { - return x.Received + return x.IncludeSending } - return nil + return false +} + +func (x *NotifyAddressesTxsRequestMessage_Params) GetIncludeReceiving() bool { + if x != nil { + return x.IncludeReceiving + } + return false } var File_rpc_proto protoreflect.FileDescriptor @@ -9619,154 +9726,183 @@ var file_rpc_proto_rawDesc = []byte{ 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x9f, 0x01, 0x0a, 0x29, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xfe, 0x01, 0x0a, 0x29, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x2d, 0x0a, 0x2b, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xdc, 0x03, 0x0a, 0x28, 0x54, 0x78, 0x73, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x4e, 0x6f, 0x74, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x55, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x5b, 0x0a, 0x09, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, + 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x12, 0x53, 0x0a, 0x06, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x66, + 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, + 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x2d, 0x0a, 0x2b, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xbb, 0x02, 0x0a, 0x29, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x4e, 0x6f, 0x74, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x52, 0x09, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x07, 0x70, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, + 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, + 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x75, + 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x1a, 0x66, 0x0a, 0x07, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x5b, - 0x0a, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, - 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, - 0x61, 0x69, 0x72, 0x52, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x1a, 0x68, 0x0a, 0x09, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x5b, 0x0a, 0x16, 0x74, 0x78, 0x49, 0x44, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, - 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x16, 0x74, - 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x50, 0x61, 0x69, 0x72, 0x73, 0x22, 0x46, 0x0a, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x22, 0x31, 0x0a, - 0x2f, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0x47, 0x0a, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, - 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x22, 0x32, 0x0a, 0x30, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x7d, 0x0a, - 0x45, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x48, 0x0a, 0x46, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, + 0x72, 0x6f, 0x72, 0x22, 0x46, 0x0a, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x22, 0x5d, 0x0a, 0x2f, 0x53, + 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x47, 0x0a, 0x2f, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, + 0x49, 0x44, 0x73, 0x22, 0x5e, 0x0a, 0x30, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0x96, 0x01, 0x0a, 0x36, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, + 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x65, 0x0a, 0x37, + 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x66, 0x0a, 0x10, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x9c, - 0x01, 0x0a, 0x1e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, - 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x21, 0x0a, - 0x1f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0x42, 0x0a, 0x22, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, - 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x22, 0x25, 0x0a, 0x23, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x43, 0x0a, 0x23, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x22, 0x26, 0x0a, 0x24, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, - 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x71, 0x0a, 0x39, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3c, 0x0a, 0x3a, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x4c, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xe0, 0x03, 0x0a, 0x1d, 0x54, 0x78, - 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4a, 0x0a, 0x07, 0x70, - 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x07, - 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x50, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, - 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x52, 0x09, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x1a, 0x73, 0x0a, 0x07, 0x50, 0x65, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, + 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0x66, 0x0a, 0x10, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x14, + 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x1a, 0xab, - 0x01, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x15, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x04, 0x73, - 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x42, 0x26, 0x5a, 0x24, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, - 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x22, 0xc9, + 0x02, 0x0a, 0x20, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x12, 0x4a, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0xba, 0x01, + 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, + 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2a, + 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, + 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x22, 0x4f, 0x0a, 0x21, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x44, 0x0a, 0x24, 0x53, + 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x22, 0x53, 0x0a, 0x25, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x45, 0x0a, 0x25, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x54, 0x0a, + 0x26, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0xe0, 0x01, 0x0a, 0x2c, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x22, 0x5b, 0x0a, 0x2d, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, + 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0x94, 0x02, 0x0a, 0x1f, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x39, 0x0a, + 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, + 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, + 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x3d, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, + 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x09, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, + 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x0b, 0x75, + 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, + 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9782,167 +9918,166 @@ func file_rpc_proto_rawDescGZIP() []byte { } var file_rpc_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 158) +var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 157) var file_rpc_proto_goTypes = []interface{}{ (SubmitBlockResponseMessage_RejectReason)(0), // 0: protowire.SubmitBlockResponseMessage.RejectReason - (*RPCError)(nil), // 1: protowire.RPCError - (*RpcBlock)(nil), // 2: protowire.RpcBlock - (*RpcBlockHeader)(nil), // 3: protowire.RpcBlockHeader - (*RpcBlockLevelParents)(nil), // 4: protowire.RpcBlockLevelParents - (*RpcBlockVerboseData)(nil), // 5: protowire.RpcBlockVerboseData - (*RpcTransaction)(nil), // 6: protowire.RpcTransaction - (*RpcTransactionInput)(nil), // 7: protowire.RpcTransactionInput - (*RpcScriptPublicKey)(nil), // 8: protowire.RpcScriptPublicKey - (*RpcTransactionOutput)(nil), // 9: protowire.RpcTransactionOutput - (*RpcOutpoint)(nil), // 10: protowire.RpcOutpoint - (*RpcUtxoEntry)(nil), // 11: protowire.RpcUtxoEntry - (*RpcTransactionVerboseData)(nil), // 12: protowire.RpcTransactionVerboseData - (*RpcTransactionInputVerboseData)(nil), // 13: protowire.RpcTransactionInputVerboseData - (*RpcTransactionOutputVerboseData)(nil), // 14: protowire.RpcTransactionOutputVerboseData - (*GetCurrentNetworkRequestMessage)(nil), // 15: protowire.GetCurrentNetworkRequestMessage - (*GetCurrentNetworkResponseMessage)(nil), // 16: protowire.GetCurrentNetworkResponseMessage - (*SubmitBlockRequestMessage)(nil), // 17: protowire.SubmitBlockRequestMessage - (*SubmitBlockResponseMessage)(nil), // 18: protowire.SubmitBlockResponseMessage - (*GetBlockTemplateRequestMessage)(nil), // 19: protowire.GetBlockTemplateRequestMessage - (*GetBlockTemplateResponseMessage)(nil), // 20: protowire.GetBlockTemplateResponseMessage - (*NotifyBlockAddedRequestMessage)(nil), // 21: protowire.NotifyBlockAddedRequestMessage - (*NotifyBlockAddedResponseMessage)(nil), // 22: protowire.NotifyBlockAddedResponseMessage - (*BlockAddedNotificationMessage)(nil), // 23: protowire.BlockAddedNotificationMessage - (*GetPeerAddressesRequestMessage)(nil), // 24: protowire.GetPeerAddressesRequestMessage - (*GetPeerAddressesResponseMessage)(nil), // 25: protowire.GetPeerAddressesResponseMessage - (*GetPeerAddressesKnownAddressMessage)(nil), // 26: protowire.GetPeerAddressesKnownAddressMessage - (*GetSelectedTipHashRequestMessage)(nil), // 27: protowire.GetSelectedTipHashRequestMessage - (*GetSelectedTipHashResponseMessage)(nil), // 28: protowire.GetSelectedTipHashResponseMessage - (*GetMempoolEntryRequestMessage)(nil), // 29: protowire.GetMempoolEntryRequestMessage - (*GetMempoolEntryResponseMessage)(nil), // 30: protowire.GetMempoolEntryResponseMessage - (*GetMempoolEntriesRequestMessage)(nil), // 31: protowire.GetMempoolEntriesRequestMessage - (*GetMempoolEntriesResponseMessage)(nil), // 32: protowire.GetMempoolEntriesResponseMessage - (*MempoolEntry)(nil), // 33: protowire.MempoolEntry - (*GetConnectedPeerInfoRequestMessage)(nil), // 34: protowire.GetConnectedPeerInfoRequestMessage - (*GetConnectedPeerInfoResponseMessage)(nil), // 35: protowire.GetConnectedPeerInfoResponseMessage - (*GetConnectedPeerInfoMessage)(nil), // 36: protowire.GetConnectedPeerInfoMessage - (*AddPeerRequestMessage)(nil), // 37: protowire.AddPeerRequestMessage - (*AddPeerResponseMessage)(nil), // 38: protowire.AddPeerResponseMessage - (*SubmitTransactionRequestMessage)(nil), // 39: protowire.SubmitTransactionRequestMessage - (*SubmitTransactionResponseMessage)(nil), // 40: protowire.SubmitTransactionResponseMessage - (*NotifyVirtualSelectedParentChainChangedRequestMessage)(nil), // 41: protowire.NotifyVirtualSelectedParentChainChangedRequestMessage - (*NotifyVirtualSelectedParentChainChangedResponseMessage)(nil), // 42: protowire.NotifyVirtualSelectedParentChainChangedResponseMessage - (*VirtualSelectedParentChainChangedNotificationMessage)(nil), // 43: protowire.VirtualSelectedParentChainChangedNotificationMessage - (*GetBlockRequestMessage)(nil), // 44: protowire.GetBlockRequestMessage - (*GetBlockResponseMessage)(nil), // 45: protowire.GetBlockResponseMessage - (*GetSubnetworkRequestMessage)(nil), // 46: protowire.GetSubnetworkRequestMessage - (*GetSubnetworkResponseMessage)(nil), // 47: protowire.GetSubnetworkResponseMessage - (*GetVirtualSelectedParentChainFromBlockRequestMessage)(nil), // 48: protowire.GetVirtualSelectedParentChainFromBlockRequestMessage - (*AcceptedTransactionIds)(nil), // 49: protowire.AcceptedTransactionIds - (*GetVirtualSelectedParentChainFromBlockResponseMessage)(nil), // 50: protowire.GetVirtualSelectedParentChainFromBlockResponseMessage - (*GetBlocksRequestMessage)(nil), // 51: protowire.GetBlocksRequestMessage - (*GetBlocksResponseMessage)(nil), // 52: protowire.GetBlocksResponseMessage - (*GetBlockCountRequestMessage)(nil), // 53: protowire.GetBlockCountRequestMessage - (*GetBlockCountResponseMessage)(nil), // 54: protowire.GetBlockCountResponseMessage - (*GetBlockDagInfoRequestMessage)(nil), // 55: protowire.GetBlockDagInfoRequestMessage - (*GetBlockDagInfoResponseMessage)(nil), // 56: protowire.GetBlockDagInfoResponseMessage - (*ResolveFinalityConflictRequestMessage)(nil), // 57: protowire.ResolveFinalityConflictRequestMessage - (*ResolveFinalityConflictResponseMessage)(nil), // 58: protowire.ResolveFinalityConflictResponseMessage - (*NotifyFinalityConflictsRequestMessage)(nil), // 59: protowire.NotifyFinalityConflictsRequestMessage - (*NotifyFinalityConflictsResponseMessage)(nil), // 60: protowire.NotifyFinalityConflictsResponseMessage - (*FinalityConflictNotificationMessage)(nil), // 61: protowire.FinalityConflictNotificationMessage - (*FinalityConflictResolvedNotificationMessage)(nil), // 62: protowire.FinalityConflictResolvedNotificationMessage - (*ShutDownRequestMessage)(nil), // 63: protowire.ShutDownRequestMessage - (*ShutDownResponseMessage)(nil), // 64: protowire.ShutDownResponseMessage - (*GetHeadersRequestMessage)(nil), // 65: protowire.GetHeadersRequestMessage - (*GetHeadersResponseMessage)(nil), // 66: protowire.GetHeadersResponseMessage - (*NotifyUtxosChangedRequestMessage)(nil), // 67: protowire.NotifyUtxosChangedRequestMessage - (*NotifyUtxosChangedResponseMessage)(nil), // 68: protowire.NotifyUtxosChangedResponseMessage - (*UtxosChangedNotificationMessage)(nil), // 69: protowire.UtxosChangedNotificationMessage - (*UtxosByAddressesEntry)(nil), // 70: protowire.UtxosByAddressesEntry - (*StopNotifyingUtxosChangedRequestMessage)(nil), // 71: protowire.StopNotifyingUtxosChangedRequestMessage - (*StopNotifyingUtxosChangedResponseMessage)(nil), // 72: protowire.StopNotifyingUtxosChangedResponseMessage - (*GetUtxosByAddressesRequestMessage)(nil), // 73: protowire.GetUtxosByAddressesRequestMessage - (*GetUtxosByAddressesResponseMessage)(nil), // 74: protowire.GetUtxosByAddressesResponseMessage - (*GetBalanceByAddressRequestMessage)(nil), // 75: protowire.GetBalanceByAddressRequestMessage - (*GetBalanceByAddressResponseMessage)(nil), // 76: protowire.GetBalanceByAddressResponseMessage - (*GetBalancesByAddressesRequestMessage)(nil), // 77: protowire.GetBalancesByAddressesRequestMessage - (*BalancesByAddressEntry)(nil), // 78: protowire.BalancesByAddressEntry - (*GetBalancesByAddressesResponseMessage)(nil), // 79: protowire.GetBalancesByAddressesResponseMessage - (*GetVirtualSelectedParentBlueScoreRequestMessage)(nil), // 80: protowire.GetVirtualSelectedParentBlueScoreRequestMessage - (*GetVirtualSelectedParentBlueScoreResponseMessage)(nil), // 81: protowire.GetVirtualSelectedParentBlueScoreResponseMessage - (*NotifyVirtualSelectedParentBlueScoreChangedRequestMessage)(nil), // 82: protowire.NotifyVirtualSelectedParentBlueScoreChangedRequestMessage - (*NotifyVirtualSelectedParentBlueScoreChangedResponseMessage)(nil), // 83: protowire.NotifyVirtualSelectedParentBlueScoreChangedResponseMessage - (*VirtualSelectedParentBlueScoreChangedNotificationMessage)(nil), // 84: protowire.VirtualSelectedParentBlueScoreChangedNotificationMessage - (*NotifyVirtualDaaScoreChangedRequestMessage)(nil), // 85: protowire.NotifyVirtualDaaScoreChangedRequestMessage - (*NotifyVirtualDaaScoreChangedResponseMessage)(nil), // 86: protowire.NotifyVirtualDaaScoreChangedResponseMessage - (*VirtualDaaScoreChangedNotificationMessage)(nil), // 87: protowire.VirtualDaaScoreChangedNotificationMessage - (*NotifyPruningPointUTXOSetOverrideRequestMessage)(nil), // 88: protowire.NotifyPruningPointUTXOSetOverrideRequestMessage - (*NotifyPruningPointUTXOSetOverrideResponseMessage)(nil), // 89: protowire.NotifyPruningPointUTXOSetOverrideResponseMessage - (*PruningPointUTXOSetOverrideNotificationMessage)(nil), // 90: protowire.PruningPointUTXOSetOverrideNotificationMessage - (*StopNotifyingPruningPointUTXOSetOverrideRequestMessage)(nil), // 91: protowire.StopNotifyingPruningPointUTXOSetOverrideRequestMessage - (*StopNotifyingPruningPointUTXOSetOverrideResponseMessage)(nil), // 92: protowire.StopNotifyingPruningPointUTXOSetOverrideResponseMessage - (*BanRequestMessage)(nil), // 93: protowire.BanRequestMessage - (*BanResponseMessage)(nil), // 94: protowire.BanResponseMessage - (*UnbanRequestMessage)(nil), // 95: protowire.UnbanRequestMessage - (*UnbanResponseMessage)(nil), // 96: protowire.UnbanResponseMessage - (*GetInfoRequestMessage)(nil), // 97: protowire.GetInfoRequestMessage - (*GetInfoResponseMessage)(nil), // 98: protowire.GetInfoResponseMessage - (*GetAcceptingBlockHashOfTxRequestMessage)(nil), // 99: protowire.GetAcceptingBlockHashOfTxRequestMessage - (*GetAcceptingBlockHashOfTxResponseMessage)(nil), // 100: protowire.GetAcceptingBlockHashOfTxResponseMessage - (*EstimateNetworkHashesPerSecondRequestMessage)(nil), // 101: protowire.EstimateNetworkHashesPerSecondRequestMessage - (*EstimateNetworkHashesPerSecondResponseMessage)(nil), // 102: protowire.EstimateNetworkHashesPerSecondResponseMessage - (*NotifyNewBlockTemplateRequestMessage)(nil), // 103: protowire.NotifyNewBlockTemplateRequestMessage - (*NotifyNewBlockTemplateResponseMessage)(nil), // 104: protowire.NotifyNewBlockTemplateResponseMessage - (*NewBlockTemplateNotificationMessage)(nil), // 105: protowire.NewBlockTemplateNotificationMessage - (*MempoolEntryByAddress)(nil), // 106: protowire.MempoolEntryByAddress - (*GetMempoolEntriesByAddressesRequestMessage)(nil), // 107: protowire.GetMempoolEntriesByAddressesRequestMessage - (*GetMempoolEntriesByAddressesResponseMessage)(nil), // 108: protowire.GetMempoolEntriesByAddressesResponseMessage - (*GetCoinSupplyRequestMessage)(nil), // 109: protowire.GetCoinSupplyRequestMessage - (*GetCoinSupplyResponseMessage)(nil), // 110: protowire.GetCoinSupplyResponseMessage - (*RpcTxIDConfirmationsPair)(nil), // 111: protowire.RpcTxIDConfirmationsPair - (*RpcTxIDBlockHashPair)(nil), // 112: protowire.RpcTxIDBlockHashPair - (*RpcTxIDBlockPair)(nil), // 113: protowire.RpcTxIDBlockPair - (*GetAcceptingBlockHashesOfTxsRequestMessage)(nil), // 114: protowire.GetAcceptingBlockHashesOfTxsRequestMessage - (*GetAcceptingBlockHashesOfTxsResponseMessage)(nil), // 115: protowire.GetAcceptingBlockHashesOfTxsResponseMessage - (*GetAcceptingBlockOfTxRequestMessage)(nil), // 116: protowire.GetAcceptingBlockOfTxRequestMessage - (*GetAcceptingBlockOfTxResponseMessage)(nil), // 117: protowire.GetAcceptingBlockOfTxResponseMessage - (*GetAcceptingBlocksOfTxsRequestMessage)(nil), // 118: protowire.GetAcceptingBlocksOfTxsRequestMessage - (*GetAcceptingBlocksOfTxsResponseMessage)(nil), // 119: protowire.GetAcceptingBlocksOfTxsResponseMessage - (*GetIncludingBlockHashOfTxRequestMessage)(nil), // 120: protowire.GetIncludingBlockHashOfTxRequestMessage - (*GetIncludingBlockHashOfTxResponseMessage)(nil), // 121: protowire.GetIncludingBlockHashOfTxResponseMessage - (*GetIncludingBlockHashesOfTxsRequestMessage)(nil), // 122: protowire.GetIncludingBlockHashesOfTxsRequestMessage - (*GetIncludingBlockHashesOfTxsResponseMessage)(nil), // 123: protowire.GetIncludingBlockHashesOfTxsResponseMessage - (*GetIncludingBlockOfTxRequestMessage)(nil), // 124: protowire.GetIncludingBlockOfTxRequestMessage - (*GetIncludingBlockOfTxResponseMessage)(nil), // 125: protowire.GetIncludingBlockOfTxResponseMessage - (*GetIncludingBlocksOfTxsRequestMessage)(nil), // 126: protowire.GetIncludingBlocksOfTxsRequestMessage - (*GetIncludingBlocksOfTxsResponseMessage)(nil), // 127: protowire.GetIncludingBlocksOfTxsResponseMessage - (*GetTxRequestMessage)(nil), // 128: protowire.GetTxRequestMessage - (*GetTxResponseMessage)(nil), // 129: protowire.GetTxResponseMessage - (*GetTxsRequestMessage)(nil), // 130: protowire.GetTxsRequestMessage - (*GetTxsResponseMessage)(nil), // 131: protowire.GetTxsResponseMessage - (*GetTxConfirmationsRequestMessage)(nil), // 132: protowire.GetTxConfirmationsRequestMessage - (*GetTxConfirmationsResponseMessage)(nil), // 133: protowire.GetTxConfirmationsResponseMessage - (*GetTxsConfirmationsRequestMessage)(nil), // 134: protowire.GetTxsConfirmationsRequestMessage - (*GetTxsConfirmationsResponseMessage)(nil), // 135: protowire.GetTxsConfirmationsResponseMessage - (*NotifyTxsConfirmationChangedRequstMessage)(nil), // 136: protowire.NotifyTxsConfirmationChangedRequstMessage - (*NotifyTxsConfirmationChangedResponseMessage)(nil), // 137: protowire.NotifyTxsConfirmationChangedResponseMessage - (*TxsConfirmationChangedNotficationMessage)(nil), // 138: protowire.TxsConfirmationChangedNotficationMessage - (*StopNotifyTxsConfirmationChangedRequestMessage)(nil), // 139: protowire.StopNotifyTxsConfirmationChangedRequestMessage - (*StopNotifyTxsConfirmationChangedResponseMessage)(nil), // 140: protowire.StopNotifyTxsConfirmationChangedResponseMessage - (*StartNotifyTxsConfirmationChangedRequestMessage)(nil), // 141: protowire.StartNotifyTxsConfirmationChangedRequestMessage - (*StartNotifyTxsConfirmationChangedResponseMessage)(nil), // 142: protowire.StartNotifyTxsConfirmationChangedResponseMessage - (*ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage)(nil), // 143: protowire.ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage - (*ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage)(nil), // 144: protowire.ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage - (*TxEntryByAddress)(nil), // 145: protowire.TxEntryByAddress - (*NotifyTxListenerRequestMessage)(nil), // 146: protowire.NotifyTxListenerRequestMessage - (*NotifyTxListenerResponseMessage)(nil), // 147: protowire.NotifyTxListenerResponseMessage - (*StopNotifyTxListenerRequestMessage)(nil), // 148: protowire.StopNotifyTxListenerRequestMessage - (*StopNotifyTxListenerResponseMessage)(nil), // 149: protowire.StopNotifyTxListenerResponseMessage - (*StartNotifyTxListenerRequestMessage)(nil), // 150: protowire.StartNotifyTxListenerRequestMessage - (*StartNotifyTxListenerResponseMessage)(nil), // 151: protowire.StartNotifyTxListenerResponseMessage - (*ChangeNotifyTxListenerRequiredConfirmationsRequestMessage)(nil), // 152: protowire.ChangeNotifyTxListenerRequiredConfirmationsRequestMessage - (*ChangeNotifyTxListenerRequiredConfirmationsResponseMessage)(nil), // 153: protowire.ChangeNotifyTxListenerRequiredConfirmationsResponseMessage - (*TxListenerNotificationMessage)(nil), // 154: protowire.TxListenerNotificationMessage - (*TxsConfirmationChangedNotficationMessage_Pending)(nil), // 155: protowire.TxsConfirmationChangedNotficationMessage.Pending - (*TxsConfirmationChangedNotficationMessage_Confirmed)(nil), // 156: protowire.TxsConfirmationChangedNotficationMessage.Confirmed - (*TxListenerNotificationMessage_Pending)(nil), // 157: protowire.TxListenerNotificationMessage.Pending - (*TxListenerNotificationMessage_Confirmed)(nil), // 158: protowire.TxListenerNotificationMessage.Confirmed + (*RPCError)(nil), // 1: protowire.RPCError + (*RpcBlock)(nil), // 2: protowire.RpcBlock + (*RpcBlockHeader)(nil), // 3: protowire.RpcBlockHeader + (*RpcBlockLevelParents)(nil), // 4: protowire.RpcBlockLevelParents + (*RpcBlockVerboseData)(nil), // 5: protowire.RpcBlockVerboseData + (*RpcTransaction)(nil), // 6: protowire.RpcTransaction + (*RpcTransactionInput)(nil), // 7: protowire.RpcTransactionInput + (*RpcScriptPublicKey)(nil), // 8: protowire.RpcScriptPublicKey + (*RpcTransactionOutput)(nil), // 9: protowire.RpcTransactionOutput + (*RpcOutpoint)(nil), // 10: protowire.RpcOutpoint + (*RpcUtxoEntry)(nil), // 11: protowire.RpcUtxoEntry + (*RpcTransactionVerboseData)(nil), // 12: protowire.RpcTransactionVerboseData + (*RpcTransactionInputVerboseData)(nil), // 13: protowire.RpcTransactionInputVerboseData + (*RpcTransactionOutputVerboseData)(nil), // 14: protowire.RpcTransactionOutputVerboseData + (*GetCurrentNetworkRequestMessage)(nil), // 15: protowire.GetCurrentNetworkRequestMessage + (*GetCurrentNetworkResponseMessage)(nil), // 16: protowire.GetCurrentNetworkResponseMessage + (*SubmitBlockRequestMessage)(nil), // 17: protowire.SubmitBlockRequestMessage + (*SubmitBlockResponseMessage)(nil), // 18: protowire.SubmitBlockResponseMessage + (*GetBlockTemplateRequestMessage)(nil), // 19: protowire.GetBlockTemplateRequestMessage + (*GetBlockTemplateResponseMessage)(nil), // 20: protowire.GetBlockTemplateResponseMessage + (*NotifyBlockAddedRequestMessage)(nil), // 21: protowire.NotifyBlockAddedRequestMessage + (*NotifyBlockAddedResponseMessage)(nil), // 22: protowire.NotifyBlockAddedResponseMessage + (*BlockAddedNotificationMessage)(nil), // 23: protowire.BlockAddedNotificationMessage + (*GetPeerAddressesRequestMessage)(nil), // 24: protowire.GetPeerAddressesRequestMessage + (*GetPeerAddressesResponseMessage)(nil), // 25: protowire.GetPeerAddressesResponseMessage + (*GetPeerAddressesKnownAddressMessage)(nil), // 26: protowire.GetPeerAddressesKnownAddressMessage + (*GetSelectedTipHashRequestMessage)(nil), // 27: protowire.GetSelectedTipHashRequestMessage + (*GetSelectedTipHashResponseMessage)(nil), // 28: protowire.GetSelectedTipHashResponseMessage + (*GetMempoolEntryRequestMessage)(nil), // 29: protowire.GetMempoolEntryRequestMessage + (*GetMempoolEntryResponseMessage)(nil), // 30: protowire.GetMempoolEntryResponseMessage + (*GetMempoolEntriesRequestMessage)(nil), // 31: protowire.GetMempoolEntriesRequestMessage + (*GetMempoolEntriesResponseMessage)(nil), // 32: protowire.GetMempoolEntriesResponseMessage + (*MempoolEntry)(nil), // 33: protowire.MempoolEntry + (*GetConnectedPeerInfoRequestMessage)(nil), // 34: protowire.GetConnectedPeerInfoRequestMessage + (*GetConnectedPeerInfoResponseMessage)(nil), // 35: protowire.GetConnectedPeerInfoResponseMessage + (*GetConnectedPeerInfoMessage)(nil), // 36: protowire.GetConnectedPeerInfoMessage + (*AddPeerRequestMessage)(nil), // 37: protowire.AddPeerRequestMessage + (*AddPeerResponseMessage)(nil), // 38: protowire.AddPeerResponseMessage + (*SubmitTransactionRequestMessage)(nil), // 39: protowire.SubmitTransactionRequestMessage + (*SubmitTransactionResponseMessage)(nil), // 40: protowire.SubmitTransactionResponseMessage + (*NotifyVirtualSelectedParentChainChangedRequestMessage)(nil), // 41: protowire.NotifyVirtualSelectedParentChainChangedRequestMessage + (*NotifyVirtualSelectedParentChainChangedResponseMessage)(nil), // 42: protowire.NotifyVirtualSelectedParentChainChangedResponseMessage + (*VirtualSelectedParentChainChangedNotificationMessage)(nil), // 43: protowire.VirtualSelectedParentChainChangedNotificationMessage + (*GetBlockRequestMessage)(nil), // 44: protowire.GetBlockRequestMessage + (*GetBlockResponseMessage)(nil), // 45: protowire.GetBlockResponseMessage + (*GetSubnetworkRequestMessage)(nil), // 46: protowire.GetSubnetworkRequestMessage + (*GetSubnetworkResponseMessage)(nil), // 47: protowire.GetSubnetworkResponseMessage + (*GetVirtualSelectedParentChainFromBlockRequestMessage)(nil), // 48: protowire.GetVirtualSelectedParentChainFromBlockRequestMessage + (*AcceptedTransactionIds)(nil), // 49: protowire.AcceptedTransactionIds + (*GetVirtualSelectedParentChainFromBlockResponseMessage)(nil), // 50: protowire.GetVirtualSelectedParentChainFromBlockResponseMessage + (*GetBlocksRequestMessage)(nil), // 51: protowire.GetBlocksRequestMessage + (*GetBlocksResponseMessage)(nil), // 52: protowire.GetBlocksResponseMessage + (*GetBlockCountRequestMessage)(nil), // 53: protowire.GetBlockCountRequestMessage + (*GetBlockCountResponseMessage)(nil), // 54: protowire.GetBlockCountResponseMessage + (*GetBlockDagInfoRequestMessage)(nil), // 55: protowire.GetBlockDagInfoRequestMessage + (*GetBlockDagInfoResponseMessage)(nil), // 56: protowire.GetBlockDagInfoResponseMessage + (*ResolveFinalityConflictRequestMessage)(nil), // 57: protowire.ResolveFinalityConflictRequestMessage + (*ResolveFinalityConflictResponseMessage)(nil), // 58: protowire.ResolveFinalityConflictResponseMessage + (*NotifyFinalityConflictsRequestMessage)(nil), // 59: protowire.NotifyFinalityConflictsRequestMessage + (*NotifyFinalityConflictsResponseMessage)(nil), // 60: protowire.NotifyFinalityConflictsResponseMessage + (*FinalityConflictNotificationMessage)(nil), // 61: protowire.FinalityConflictNotificationMessage + (*FinalityConflictResolvedNotificationMessage)(nil), // 62: protowire.FinalityConflictResolvedNotificationMessage + (*ShutDownRequestMessage)(nil), // 63: protowire.ShutDownRequestMessage + (*ShutDownResponseMessage)(nil), // 64: protowire.ShutDownResponseMessage + (*GetHeadersRequestMessage)(nil), // 65: protowire.GetHeadersRequestMessage + (*GetHeadersResponseMessage)(nil), // 66: protowire.GetHeadersResponseMessage + (*NotifyUtxosChangedRequestMessage)(nil), // 67: protowire.NotifyUtxosChangedRequestMessage + (*NotifyUtxosChangedResponseMessage)(nil), // 68: protowire.NotifyUtxosChangedResponseMessage + (*UtxosChangedNotificationMessage)(nil), // 69: protowire.UtxosChangedNotificationMessage + (*UtxosByAddressesEntry)(nil), // 70: protowire.UtxosByAddressesEntry + (*StopNotifyingUtxosChangedRequestMessage)(nil), // 71: protowire.StopNotifyingUtxosChangedRequestMessage + (*StopNotifyingUtxosChangedResponseMessage)(nil), // 72: protowire.StopNotifyingUtxosChangedResponseMessage + (*GetUtxosByAddressesRequestMessage)(nil), // 73: protowire.GetUtxosByAddressesRequestMessage + (*GetUtxosByAddressesResponseMessage)(nil), // 74: protowire.GetUtxosByAddressesResponseMessage + (*GetBalanceByAddressRequestMessage)(nil), // 75: protowire.GetBalanceByAddressRequestMessage + (*GetBalanceByAddressResponseMessage)(nil), // 76: protowire.GetBalanceByAddressResponseMessage + (*GetBalancesByAddressesRequestMessage)(nil), // 77: protowire.GetBalancesByAddressesRequestMessage + (*BalancesByAddressEntry)(nil), // 78: protowire.BalancesByAddressEntry + (*GetBalancesByAddressesResponseMessage)(nil), // 79: protowire.GetBalancesByAddressesResponseMessage + (*GetVirtualSelectedParentBlueScoreRequestMessage)(nil), // 80: protowire.GetVirtualSelectedParentBlueScoreRequestMessage + (*GetVirtualSelectedParentBlueScoreResponseMessage)(nil), // 81: protowire.GetVirtualSelectedParentBlueScoreResponseMessage + (*NotifyVirtualSelectedParentBlueScoreChangedRequestMessage)(nil), // 82: protowire.NotifyVirtualSelectedParentBlueScoreChangedRequestMessage + (*NotifyVirtualSelectedParentBlueScoreChangedResponseMessage)(nil), // 83: protowire.NotifyVirtualSelectedParentBlueScoreChangedResponseMessage + (*VirtualSelectedParentBlueScoreChangedNotificationMessage)(nil), // 84: protowire.VirtualSelectedParentBlueScoreChangedNotificationMessage + (*NotifyVirtualDaaScoreChangedRequestMessage)(nil), // 85: protowire.NotifyVirtualDaaScoreChangedRequestMessage + (*NotifyVirtualDaaScoreChangedResponseMessage)(nil), // 86: protowire.NotifyVirtualDaaScoreChangedResponseMessage + (*VirtualDaaScoreChangedNotificationMessage)(nil), // 87: protowire.VirtualDaaScoreChangedNotificationMessage + (*NotifyPruningPointUTXOSetOverrideRequestMessage)(nil), // 88: protowire.NotifyPruningPointUTXOSetOverrideRequestMessage + (*NotifyPruningPointUTXOSetOverrideResponseMessage)(nil), // 89: protowire.NotifyPruningPointUTXOSetOverrideResponseMessage + (*PruningPointUTXOSetOverrideNotificationMessage)(nil), // 90: protowire.PruningPointUTXOSetOverrideNotificationMessage + (*StopNotifyingPruningPointUTXOSetOverrideRequestMessage)(nil), // 91: protowire.StopNotifyingPruningPointUTXOSetOverrideRequestMessage + (*StopNotifyingPruningPointUTXOSetOverrideResponseMessage)(nil), // 92: protowire.StopNotifyingPruningPointUTXOSetOverrideResponseMessage + (*BanRequestMessage)(nil), // 93: protowire.BanRequestMessage + (*BanResponseMessage)(nil), // 94: protowire.BanResponseMessage + (*UnbanRequestMessage)(nil), // 95: protowire.UnbanRequestMessage + (*UnbanResponseMessage)(nil), // 96: protowire.UnbanResponseMessage + (*GetInfoRequestMessage)(nil), // 97: protowire.GetInfoRequestMessage + (*GetInfoResponseMessage)(nil), // 98: protowire.GetInfoResponseMessage + (*GetAcceptingBlockHashOfTxRequestMessage)(nil), // 99: protowire.GetAcceptingBlockHashOfTxRequestMessage + (*GetAcceptingBlockHashOfTxResponseMessage)(nil), // 100: protowire.GetAcceptingBlockHashOfTxResponseMessage + (*EstimateNetworkHashesPerSecondRequestMessage)(nil), // 101: protowire.EstimateNetworkHashesPerSecondRequestMessage + (*EstimateNetworkHashesPerSecondResponseMessage)(nil), // 102: protowire.EstimateNetworkHashesPerSecondResponseMessage + (*NotifyNewBlockTemplateRequestMessage)(nil), // 103: protowire.NotifyNewBlockTemplateRequestMessage + (*NotifyNewBlockTemplateResponseMessage)(nil), // 104: protowire.NotifyNewBlockTemplateResponseMessage + (*NewBlockTemplateNotificationMessage)(nil), // 105: protowire.NewBlockTemplateNotificationMessage + (*MempoolEntryByAddress)(nil), // 106: protowire.MempoolEntryByAddress + (*GetMempoolEntriesByAddressesRequestMessage)(nil), // 107: protowire.GetMempoolEntriesByAddressesRequestMessage + (*GetMempoolEntriesByAddressesResponseMessage)(nil), // 108: protowire.GetMempoolEntriesByAddressesResponseMessage + (*GetCoinSupplyRequestMessage)(nil), // 109: protowire.GetCoinSupplyRequestMessage + (*GetCoinSupplyResponseMessage)(nil), // 110: protowire.GetCoinSupplyResponseMessage + (*RpcTxIDConfirmationsPair)(nil), // 111: protowire.RpcTxIDConfirmationsPair + (*RpcTxIDBlockHashPair)(nil), // 112: protowire.RpcTxIDBlockHashPair + (*RpcTxIDBlockPair)(nil), // 113: protowire.RpcTxIDBlockPair + (*GetAcceptingBlockHashesOfTxsRequestMessage)(nil), // 114: protowire.GetAcceptingBlockHashesOfTxsRequestMessage + (*GetAcceptingBlockHashesOfTxsResponseMessage)(nil), // 115: protowire.GetAcceptingBlockHashesOfTxsResponseMessage + (*GetAcceptingBlockOfTxRequestMessage)(nil), // 116: protowire.GetAcceptingBlockOfTxRequestMessage + (*GetAcceptingBlockOfTxResponseMessage)(nil), // 117: protowire.GetAcceptingBlockOfTxResponseMessage + (*GetAcceptingBlocksOfTxsRequestMessage)(nil), // 118: protowire.GetAcceptingBlocksOfTxsRequestMessage + (*GetAcceptingBlocksOfTxsResponseMessage)(nil), // 119: protowire.GetAcceptingBlocksOfTxsResponseMessage + (*GetIncludingBlockHashOfTxRequestMessage)(nil), // 120: protowire.GetIncludingBlockHashOfTxRequestMessage + (*GetIncludingBlockHashOfTxResponseMessage)(nil), // 121: protowire.GetIncludingBlockHashOfTxResponseMessage + (*GetIncludingBlockHashesOfTxsRequestMessage)(nil), // 122: protowire.GetIncludingBlockHashesOfTxsRequestMessage + (*GetIncludingBlockHashesOfTxsResponseMessage)(nil), // 123: protowire.GetIncludingBlockHashesOfTxsResponseMessage + (*GetIncludingBlockOfTxRequestMessage)(nil), // 124: protowire.GetIncludingBlockOfTxRequestMessage + (*GetIncludingBlockOfTxResponseMessage)(nil), // 125: protowire.GetIncludingBlockOfTxResponseMessage + (*GetIncludingBlocksOfTxsRequestMessage)(nil), // 126: protowire.GetIncludingBlocksOfTxsRequestMessage + (*GetIncludingBlocksOfTxsResponseMessage)(nil), // 127: protowire.GetIncludingBlocksOfTxsResponseMessage + (*GetTxRequestMessage)(nil), // 128: protowire.GetTxRequestMessage + (*GetTxResponseMessage)(nil), // 129: protowire.GetTxResponseMessage + (*GetTxsRequestMessage)(nil), // 130: protowire.GetTxsRequestMessage + (*GetTxsResponseMessage)(nil), // 131: protowire.GetTxsResponseMessage + (*GetTxConfirmationsRequestMessage)(nil), // 132: protowire.GetTxConfirmationsRequestMessage + (*GetTxConfirmationsResponseMessage)(nil), // 133: protowire.GetTxConfirmationsResponseMessage + (*GetTxsConfirmationsRequestMessage)(nil), // 134: protowire.GetTxsConfirmationsRequestMessage + (*GetTxsConfirmationsResponseMessage)(nil), // 135: protowire.GetTxsConfirmationsResponseMessage + (*NotifyTxsConfirmationChangedRequstMessage)(nil), // 136: protowire.NotifyTxsConfirmationChangedRequstMessage + (*NotifyTxsConfirmationChangedResponseMessage)(nil), // 137: protowire.NotifyTxsConfirmationChangedResponseMessage + (*TxsConfirmationChangedNotificationMessage)(nil), // 138: protowire.TxsConfirmationChangedNotificationMessage + (*StopNotifyTxsConfirmationChangedRequestMessage)(nil), // 139: protowire.StopNotifyTxsConfirmationChangedRequestMessage + (*StopNotifyTxsConfirmationChangedResponseMessage)(nil), // 140: protowire.StopNotifyTxsConfirmationChangedResponseMessage + (*StartNotifyTxsConfirmationChangedRequestMessage)(nil), // 141: protowire.StartNotifyTxsConfirmationChangedRequestMessage + (*StartNotifyTxsConfirmationChangedResponseMessage)(nil), // 142: protowire.StartNotifyTxsConfirmationChangedResponseMessage + (*ModifyNotifyTxsConfirmationChangedParamsRequestMessage)(nil), // 143: protowire.ModifyNotifyTxsConfirmationChangedParamsRequestMessage + (*ModifyNotifyTxsConfirmationChangedParamsResponseMessage)(nil), // 144: protowire.ModifyNotifyTxsConfirmationChangedParamsResponseMessage + (*TxEntryByAddress)(nil), // 145: protowire.TxEntryByAddress + (*TxEntriesByAddresses)(nil), // 146: protowire.TxEntriesByAddresses + (*NotifyAddressesTxsRequestMessage)(nil), // 147: protowire.NotifyAddressesTxsRequestMessage + (*NotifyAddressesTxsResponseMessage)(nil), // 148: protowire.NotifyAddressesTxsResponseMessage + (*StopNotifyAddressesTxsRequestMessage)(nil), // 149: protowire.StopNotifyAddressesTxsRequestMessage + (*StopNotifyAddressesTxsResponseMessage)(nil), // 150: protowire.StopNotifyAddressesTxsResponseMessage + (*StartNotifyAddressesTxsRequestMessage)(nil), // 151: protowire.StartNotifyAddressesTxsRequestMessage + (*StartNotifyAddressesTxsResponseMessage)(nil), // 152: protowire.StartNotifyAddressesTxsResponseMessage + (*ModifyNotifyAddressesTxsParamsRequestMessage)(nil), // 153: protowire.ModifyNotifyAddressesTxsParamsRequestMessage + (*ModifyNotifyAddressesTxsParamsResponseMessage)(nil), // 154: protowire.ModifyNotifyAddressesTxsParamsResponseMessage + (*AddressesTxsNotificationMessage)(nil), // 155: protowire.AddressesTxsNotificationMessage + (*NotifyTxsConfirmationChangedRequstMessage_Params)(nil), // 156: protowire.NotifyTxsConfirmationChangedRequstMessage.Params + (*NotifyAddressesTxsRequestMessage_Params)(nil), // 157: protowire.NotifyAddressesTxsRequestMessage.Params } var file_rpc_proto_depIdxs = []int32{ 3, // 0: protowire.RpcBlock.header:type_name -> protowire.RpcBlockHeader @@ -10043,22 +10178,28 @@ var file_rpc_proto_depIdxs = []int32{ 1, // 95: protowire.GetTxConfirmationsResponseMessage.error:type_name -> protowire.RPCError 111, // 96: protowire.GetTxsConfirmationsResponseMessage.txIDConfirmationsPairs:type_name -> protowire.RpcTxIDConfirmationsPair 1, // 97: protowire.GetTxsConfirmationsResponseMessage.error:type_name -> protowire.RPCError - 155, // 98: protowire.TxsConfirmationChangedNotficationMessage.pending:type_name -> protowire.TxsConfirmationChangedNotficationMessage.Pending - 156, // 99: protowire.TxsConfirmationChangedNotficationMessage.confirmed:type_name -> protowire.TxsConfirmationChangedNotficationMessage.Confirmed - 1, // 100: protowire.TxsConfirmationChangedNotficationMessage.error:type_name -> protowire.RPCError - 157, // 101: protowire.TxListenerNotificationMessage.pending:type_name -> protowire.TxListenerNotificationMessage.Pending - 158, // 102: protowire.TxListenerNotificationMessage.confirmed:type_name -> protowire.TxListenerNotificationMessage.Confirmed - 111, // 103: protowire.TxsConfirmationChangedNotficationMessage.Pending.txIDConfirmationsPairs:type_name -> protowire.RpcTxIDConfirmationsPair - 111, // 104: protowire.TxsConfirmationChangedNotficationMessage.Confirmed.txIDConfirmationsPairs:type_name -> protowire.RpcTxIDConfirmationsPair - 145, // 105: protowire.TxListenerNotificationMessage.Pending.sent:type_name -> protowire.TxEntryByAddress - 145, // 106: protowire.TxListenerNotificationMessage.Pending.received:type_name -> protowire.TxEntryByAddress - 145, // 107: protowire.TxListenerNotificationMessage.Confirmed.sent:type_name -> protowire.TxEntryByAddress - 145, // 108: protowire.TxListenerNotificationMessage.Confirmed.received:type_name -> protowire.TxEntryByAddress - 109, // [109:109] is the sub-list for method output_type - 109, // [109:109] is the sub-list for method input_type - 109, // [109:109] is the sub-list for extension type_name - 109, // [109:109] is the sub-list for extension extendee - 0, // [0:109] is the sub-list for field type_name + 156, // 98: protowire.NotifyTxsConfirmationChangedRequstMessage.params:type_name -> protowire.NotifyTxsConfirmationChangedRequstMessage.Params + 111, // 99: protowire.TxsConfirmationChangedNotificationMessage.pending:type_name -> protowire.RpcTxIDConfirmationsPair + 111, // 100: protowire.TxsConfirmationChangedNotificationMessage.confirmed:type_name -> protowire.RpcTxIDConfirmationsPair + 1, // 101: protowire.TxsConfirmationChangedNotificationMessage.error:type_name -> protowire.RPCError + 1, // 102: protowire.StopNotifyTxsConfirmationChangedResponseMessage.error:type_name -> protowire.RPCError + 1, // 103: protowire.StartNotifyTxsConfirmationChangedResponseMessage.error:type_name -> protowire.RPCError + 1, // 104: protowire.ModifyNotifyTxsConfirmationChangedParamsResponseMessage.error:type_name -> protowire.RPCError + 145, // 105: protowire.TxEntriesByAddresses.sent:type_name -> protowire.TxEntryByAddress + 145, // 106: protowire.TxEntriesByAddresses.received:type_name -> protowire.TxEntryByAddress + 157, // 107: protowire.NotifyAddressesTxsRequestMessage.params:type_name -> protowire.NotifyAddressesTxsRequestMessage.Params + 1, // 108: protowire.NotifyAddressesTxsResponseMessage.error:type_name -> protowire.RPCError + 1, // 109: protowire.StopNotifyAddressesTxsResponseMessage.error:type_name -> protowire.RPCError + 1, // 110: protowire.StartNotifyAddressesTxsResponseMessage.error:type_name -> protowire.RPCError + 1, // 111: protowire.ModifyNotifyAddressesTxsParamsResponseMessage.error:type_name -> protowire.RPCError + 146, // 112: protowire.AddressesTxsNotificationMessage.pending:type_name -> protowire.TxEntriesByAddresses + 146, // 113: protowire.AddressesTxsNotificationMessage.confirmed:type_name -> protowire.TxEntriesByAddresses + 146, // 114: protowire.AddressesTxsNotificationMessage.unconfirmed:type_name -> protowire.TxEntriesByAddresses + 115, // [115:115] is the sub-list for method output_type + 115, // [115:115] is the sub-list for method input_type + 115, // [115:115] is the sub-list for extension type_name + 115, // [115:115] is the sub-list for extension extendee + 0, // [0:115] is the sub-list for field type_name } func init() { file_rpc_proto_init() } @@ -11712,7 +11853,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[137].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TxsConfirmationChangedNotficationMessage); i { + switch v := v.(*TxsConfirmationChangedNotificationMessage); i { case 0: return &v.state case 1: @@ -11772,7 +11913,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[142].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage); i { + switch v := v.(*ModifyNotifyTxsConfirmationChangedParamsRequestMessage); i { case 0: return &v.state case 1: @@ -11784,7 +11925,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[143].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage); i { + switch v := v.(*ModifyNotifyTxsConfirmationChangedParamsResponseMessage); i { case 0: return &v.state case 1: @@ -11808,7 +11949,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[145].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyTxListenerRequestMessage); i { + switch v := v.(*TxEntriesByAddresses); i { case 0: return &v.state case 1: @@ -11820,7 +11961,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[146].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyTxListenerResponseMessage); i { + switch v := v.(*NotifyAddressesTxsRequestMessage); i { case 0: return &v.state case 1: @@ -11832,7 +11973,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[147].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopNotifyTxListenerRequestMessage); i { + switch v := v.(*NotifyAddressesTxsResponseMessage); i { case 0: return &v.state case 1: @@ -11844,7 +11985,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[148].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopNotifyTxListenerResponseMessage); i { + switch v := v.(*StopNotifyAddressesTxsRequestMessage); i { case 0: return &v.state case 1: @@ -11856,7 +11997,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[149].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartNotifyTxListenerRequestMessage); i { + switch v := v.(*StopNotifyAddressesTxsResponseMessage); i { case 0: return &v.state case 1: @@ -11868,7 +12009,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[150].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartNotifyTxListenerResponseMessage); i { + switch v := v.(*StartNotifyAddressesTxsRequestMessage); i { case 0: return &v.state case 1: @@ -11880,7 +12021,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[151].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangeNotifyTxListenerRequiredConfirmationsRequestMessage); i { + switch v := v.(*StartNotifyAddressesTxsResponseMessage); i { case 0: return &v.state case 1: @@ -11892,7 +12033,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[152].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangeNotifyTxListenerRequiredConfirmationsResponseMessage); i { + switch v := v.(*ModifyNotifyAddressesTxsParamsRequestMessage); i { case 0: return &v.state case 1: @@ -11904,7 +12045,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[153].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TxListenerNotificationMessage); i { + switch v := v.(*ModifyNotifyAddressesTxsParamsResponseMessage); i { case 0: return &v.state case 1: @@ -11916,7 +12057,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[154].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TxsConfirmationChangedNotficationMessage_Pending); i { + switch v := v.(*AddressesTxsNotificationMessage); i { case 0: return &v.state case 1: @@ -11928,7 +12069,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[155].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TxsConfirmationChangedNotficationMessage_Confirmed); i { + switch v := v.(*NotifyTxsConfirmationChangedRequstMessage_Params); i { case 0: return &v.state case 1: @@ -11940,19 +12081,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[156].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TxListenerNotificationMessage_Pending); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[157].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TxListenerNotificationMessage_Confirmed); i { + switch v := v.(*NotifyAddressesTxsRequestMessage_Params); i { case 0: return &v.state case 1: @@ -11970,7 +12099,7 @@ func file_rpc_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_rpc_proto_rawDesc, NumEnums: 1, - NumMessages: 158, + NumMessages: 157, NumExtensions: 0, NumServices: 0, }, diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto index 4017843729..105bb5e43c 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto @@ -749,16 +749,17 @@ message RpcTxIDBlockPair { RpcBlock block = 2; } +//Kaspad most be started with the `--txindex` flag for this Request to work. message GetAcceptingBlockHashesOfTxsRequestMessage{ repeated string txIDs = 1; } - message GetAcceptingBlockHashesOfTxsResponseMessage{ repeated RpcTxIDBlockHashPair txIDBlockHashPairs = 1; RPCError error = 1000; } +//Kaspad most be started with the `--txindex` flag for this Request to work. message GetAcceptingBlockOfTxRequestMessage{ string txID = 1; bool includeTransactions = 2; @@ -770,6 +771,7 @@ message GetAcceptingBlockOfTxResponseMessage{ RPCError error = 1000; } +//Kaspad most be started with the `--txindex` flag for this Request to work. message GetAcceptingBlocksOfTxsRequestMessage{ repeated string txIDs = 1; bool includeTransactions = 2; @@ -781,6 +783,7 @@ message GetAcceptingBlocksOfTxsResponseMessage{ RPCError error = 1000; } +//Kaspad most be started with the `--txindex` flag for this Request to work. message GetIncludingBlockHashOfTxRequestMessage{ string txID = 1; } @@ -791,6 +794,8 @@ message GetIncludingBlockHashOfTxResponseMessage{ RPCError error = 1000; } + +//Kaspad most be started with the `--txindex` flag for this Request to work. message GetIncludingBlockHashesOfTxsRequestMessage{ repeated string txIDs = 1; } @@ -801,6 +806,8 @@ message GetIncludingBlockHashesOfTxsResponseMessage{ RPCError error = 1000; } + +//Kaspad most be started with the `--txindex` flag for this Request to work. message GetIncludingBlockOfTxRequestMessage{ string txID = 1; bool includeTransactions = 2; @@ -812,6 +819,8 @@ message GetIncludingBlockOfTxResponseMessage{ RPCError error = 1000; } + +//Kaspad most be started with the `--txindex` flag for this Request to work. message GetIncludingBlocksOfTxsRequestMessage{ repeated string txIDs = 1; bool includeTransactions = 2; @@ -823,6 +832,7 @@ message GetIncludingBlocksOfTxsResponseMessage{ RPCError error = 1000; } +//Kaspad most be started with the `--txindex` flag for this Request to work. message GetTxRequestMessage{ string txID = 1; } @@ -834,6 +844,7 @@ message GetTxResponseMessage{ RPCError error = 1000; } +//Kaspad most be started with the `--txindex` flag for this Request to work. message GetTxsRequestMessage{ repeated string txIDs = 1; } @@ -845,6 +856,7 @@ message GetTxsResponseMessage{ RPCError error = 1000; } +//Kaspad most be started with the `--txindex` flag for this Request to work. message GetTxConfirmationsRequestMessage{ string txID = 1; } @@ -855,6 +867,7 @@ message GetTxConfirmationsResponseMessage{ RPCError error = 1000; } +//Kaspad most be started with the `--txindex` flag for this Request to work. message GetTxsConfirmationsRequestMessage{ repeated string txIDs = 1; } @@ -865,51 +878,61 @@ message GetTxsConfirmationsResponseMessage{ RPCError error = 1000; } +// NotifyTxsConfirmationChangedRequstMessage is a listener that registers confirmations from supplied TxIDs +// Kaspad most be started with the `--txindex` flag for this Request to work. message NotifyTxsConfirmationChangedRequstMessage{ - repeated string TxIDs = 1; - uint32 requiredConfirmations = 2; - bool includePending = 3; + repeated string TxIDs = 1; //initial TxIds to listen for when regestering for notifications + message Params { + uint32 requiredConfirmations = 1; // number of confirmations until a transaction is considered confirmed + bool includePending = 2; // weather to notify confirmation changes during pre-Confirmed states + } + Params params = 2; } message NotifyTxsConfirmationChangedResponseMessage{ } -message TxsConfirmationChangedNotficationMessage{ - message Pending{ - repeated RpcTxIDConfirmationsPair txIDConfirmationsPairs = 1; - } - message Confirmed{ - repeated RpcTxIDConfirmationsPair txIDConfirmationsPairs = 1; - } - repeated Pending pending = 1; - repeated Confirmed confirmed = 2; +// TxsConfirmationChangedNotificationMessage is the notification about txs pertaining to specified TxIDs +message TxsConfirmationChangedNotificationMessage{ + uint32 requiredConfirmations = 1; //the required confirmations set when notification was sent + repeated RpcTxIDConfirmationsPair pending = 2; // RpcTxIDConfirmationsPairs which have entered the virtual chain but not passed the required confirmations + repeated RpcTxIDConfirmationsPair confirmed = 3; // RpcTxIDConfirmationsPairs which have entered the virtual chain and passed the required confirmations + repeated string unconfirmedTxIds = 4; // TxIds which were not confirmed within the required confirmations. RPCError error = 1000; } +// most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work message StopNotifyTxsConfirmationChangedRequestMessage{ repeated string TxIDs = 1; } message StopNotifyTxsConfirmationChangedResponseMessage{ + RPCError error = 1000; } +// StartNotifyTxsConfirmationChangedRequestMessage starts listening for Transaction confirmations with the specified TxIDs +// Most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work message StartNotifyTxsConfirmationChangedRequestMessage{ repeated string TxIDs = 1; } message StartNotifyTxsConfirmationChangedResponseMessage{ - + + RPCError error = 1000; } -message ChangeNotifyTxsConfirmationChangedRequiredConfirmationsRequestMessage{ +// ModifyNotifyTxsConfirmationChangedParamsRequestMessage modfies the params of a registered `NotifyTxsConfirmationChangedRequstMessage` +// most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work +message ModifyNotifyTxsConfirmationChangedParamsRequestMessage{ uint32 requiredConfirmations = 1; + bool includePending = 2; } -message ChangeNotifyTxsConfirmationChangedRequiredConfirmationsResponseMessage{ - +message ModifyNotifyTxsConfirmationChangedParamsResponseMessage{ + RPCError error = 1000; } message TxEntryByAddress{ @@ -918,51 +941,68 @@ message TxEntryByAddress{ uint32 confirmations = 3; } -message NotifyTxListenerRequestMessage{ - repeated string addresses = 1; - uint32 requiredConfirmations = 2; - bool includePending = 3; -} +message TxEntriesByAddresses{ + repeated TxEntryByAddress sent = 1; + repeated TxEntryByAddress received = 2; + } -message NotifyTxListenerResponseMessage{ +// NotifyAddressesTxsChangedRequestMessage Listens for Txs pertaining to specified addresses according to the params specified +message NotifyAddressesTxsRequestMessage{ + repeated string addresses = 1; //initial addresses to listen for Tx changes when regestering for notifications + message Params { + uint32 requiredConfirmations = 2; // number of confirmations until a transaction is considered confirmed + bool includePending = 3; //whether to notify confirmation changes during pre-Confirmed states + bool includeSending = 4; //whether to listen on addresses sending txs + bool includeReceiving = 5; //whether to listen on addresses reciving txs + } + Params params = 2; +} +message NotifyAddressesTxsResponseMessage{ + + RPCError error = 1000; } -message StopNotifyTxListenerRequestMessage{ +// StopNotifyAddressesTxsRequestMessage stops listening for Txs pertaining to specified addresses +// Most be registered to NotifyAddressTxChangedRequestMessage for this command to work +message StopNotifyAddressesTxsRequestMessage{ repeated string addresses = 1; } -message StopNotifyTxListenerResponseMessage{ - +message StopNotifyAddressesTxsResponseMessage{ + + RPCError error = 1000; } -message StartNotifyTxListenerRequestMessage{ +// StartNotifyAddressesTxsRequestMessage starts listening for Txs pertaining to specified addresses +// Most be registered to NotifyAddressTxChangedRequestMessage for this command to work +message StartNotifyAddressesTxsRequestMessage{ repeated string addresses = 1; } -message StartNotifyTxListenerResponseMessage{ - +message StartNotifyAddressesTxsResponseMessage{ + + RPCError error = 1000; } - -message ChangeNotifyTxListenerRequiredConfirmationsRequestMessage{ +// ModifyNotifyAddressesTxsParamsRequestMessage modifies the params used for a regesitered `NotifyAddressesTxsRequest` +// Most be registered to NotifyAddressTxChangedRequestMessage for this command to work +message ModifyNotifyAddressesTxsParamsRequestMessage{ uint32 requiredConfirmations = 1; + bool includePending = 3; + bool includeSending = 4; + bool includeReceiving = 5; } -message ChangeNotifyTxListenerRequiredConfirmationsResponseMessage{ +message ModifyNotifyAddressesTxsParamsResponseMessage{ + RPCError error = 1000; } -message TxListenerNotificationMessage{ - message Pending{ - repeated TxEntryByAddress sent = 1; - repeated TxEntryByAddress received = 2; - } - message Confirmed{ - uint32 requiredConfirmations = 1; - repeated TxEntryByAddress sent = 2; - repeated TxEntryByAddress received = 3; - } - Pending pending = 1; - Confirmed confirmed = 2; +// AddressesTxsNotificationMessage is the notification about txs pertaining to specified addresses +message AddressesTxsNotificationMessage{ + uint32 requiredConfirmations = 1; //the required confirmations set when notification was sent + TxEntriesByAddresses pending = 2; // TxEntriesByAddresses which have entered the blockdag but not passed the required confirmations + TxEntriesByAddresses confirmed = 3; // TxEntriesByAddresses which have entered the blockdag and passed the required confirmations + TxEntriesByAddresses unconfirmed = 4; // TxEntriesByAddresses which have been pending, but removed via a reorg within the number of required confirmations. } \ No newline at end of file diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_addresses_txs_params.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_addresses_txs_params.go new file mode 100644 index 0000000000..e69de29bb2 diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_txs_confirmation_changed_params.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_txs_confirmation_changed_params.go new file mode 100644 index 0000000000..e69de29bb2 diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go new file mode 100644 index 0000000000..e69de29bb2 diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_txs_confirmation_changed.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_txs_confirmation_changed.go new file mode 100644 index 0000000000..e69de29bb2 diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_start_notify_addresses_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_start_notify_addresses_txs.go new file mode 100644 index 0000000000..e69de29bb2 diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_start_notify_txs_confirmation_changed.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_start_notify_txs_confirmation_changed.go new file mode 100644 index 0000000000..e69de29bb2 diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_stop_notify_addresses_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_stop_notify_addresses_txs.go new file mode 100644 index 0000000000..e69de29bb2 diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_stop_notify_txs_confirmation_changed.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_stop_notify_txs_confirmation_changed.go new file mode 100644 index 0000000000..e69de29bb2 From 1f8fe53e73fa9e63682881280529e0e36d4ce7e1 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Sat, 15 Oct 2022 23:26:52 +0200 Subject: [PATCH 35/47] add listener converters. --- .../grpcserver/protowire/messages.pb.go | 353 ++++++----- .../grpcserver/protowire/messages.proto | 6 +- .../server/grpcserver/protowire/rpc.md | 43 +- .../server/grpcserver/protowire/rpc.pb.go | 588 +++++++----------- .../server/grpcserver/protowire/rpc.proto | 23 +- .../rpc_modify_addresses_txs_params.go | 0 .../rpc_modify_notify_addresses_txs_params.go | 53 ++ ..._notify_txs_confirmation_changed_params.go | 49 ++ ..._modify_txs_confirmation_changed_params.go | 0 .../protowire/rpc_notify_addresses_txs.go | 216 +++++++ .../rpc_notify_txs_confirmation_changed.go | 124 ++++ .../rpc_start_notify_addresses_txs.go | 47 ++ ...c_start_notify_txs_confirmation_changed.go | 47 ++ .../rpc_stop_notify_addresses_txs.go | 47 ++ ...pc_stop_notify_txs_confirmation_changed.go | 47 ++ 15 files changed, 1061 insertions(+), 582 deletions(-) delete mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_addresses_txs_params.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notify_addresses_txs_params.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notify_txs_confirmation_changed_params.go delete mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_txs_confirmation_changed_params.go diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go index 8a57ead4b4..fcb35dd456 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go @@ -189,8 +189,8 @@ type KaspadMessage struct { // *KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsRequest // *KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsResponse // *KaspadMessage_TxsConfirmationChangedNotification - // *KaspadMessage_NotifyNotifyAddressesTxsRequest - // *KaspadMessage_NotifyNotifyAddressesTxsResponse + // *KaspadMessage_NotifyAddressesTxsRequest + // *KaspadMessage_NotifyAddressesTxsResponse // *KaspadMessage_StopNotifyAddressesTxsRequest // *KaspadMessage_StopNotifyAddressesTxsResponse // *KaspadMessage_StartNotifyAddressesTxsRequest @@ -1318,7 +1318,7 @@ func (x *KaspadMessage) GetGetTxsConfirmationsResponse() *GetTxsConfirmationsRes return nil } -func (x *KaspadMessage) GetNotifyTxsConfirmationChangedRequst() *NotifyTxsConfirmationChangedRequstMessage { +func (x *KaspadMessage) GetNotifyTxsConfirmationChangedRequst() *NotifyTxsConfirmationChangedRequestMessage { if x, ok := x.GetPayload().(*KaspadMessage_NotifyTxsConfirmationChangedRequst); ok { return x.NotifyTxsConfirmationChangedRequst } @@ -1381,16 +1381,16 @@ func (x *KaspadMessage) GetTxsConfirmationChangedNotification() *TxsConfirmation return nil } -func (x *KaspadMessage) GetNotifyNotifyAddressesTxsRequest() *NotifyAddressesTxsRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_NotifyNotifyAddressesTxsRequest); ok { - return x.NotifyNotifyAddressesTxsRequest +func (x *KaspadMessage) GetNotifyAddressesTxsRequest() *NotifyAddressesTxsRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_NotifyAddressesTxsRequest); ok { + return x.NotifyAddressesTxsRequest } return nil } -func (x *KaspadMessage) GetNotifyNotifyAddressesTxsResponse() *NotifyAddressesTxsResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_NotifyNotifyAddressesTxsResponse); ok { - return x.NotifyNotifyAddressesTxsResponse +func (x *KaspadMessage) GetNotifyAddressesTxsResponse() *NotifyAddressesTxsResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_NotifyAddressesTxsResponse); ok { + return x.NotifyAddressesTxsResponse } return nil } @@ -2065,7 +2065,7 @@ type KaspadMessage_GetTxsConfirmationsResponse struct { } type KaspadMessage_NotifyTxsConfirmationChangedRequst struct { - NotifyTxsConfirmationChangedRequst *NotifyTxsConfirmationChangedRequstMessage `protobuf:"bytes,1112,opt,name=notifyTxsConfirmationChangedRequst,proto3,oneof"` + NotifyTxsConfirmationChangedRequst *NotifyTxsConfirmationChangedRequestMessage `protobuf:"bytes,1112,opt,name=notifyTxsConfirmationChangedRequst,proto3,oneof"` } type KaspadMessage_NotifyTxsConfirmationChangedResponse struct { @@ -2100,12 +2100,12 @@ type KaspadMessage_TxsConfirmationChangedNotification struct { TxsConfirmationChangedNotification *TxsConfirmationChangedNotificationMessage `protobuf:"bytes,1120,opt,name=txsConfirmationChangedNotification,proto3,oneof"` } -type KaspadMessage_NotifyNotifyAddressesTxsRequest struct { - NotifyNotifyAddressesTxsRequest *NotifyAddressesTxsRequestMessage `protobuf:"bytes,1121,opt,name=notifyNotifyAddressesTxsRequest,proto3,oneof"` +type KaspadMessage_NotifyAddressesTxsRequest struct { + NotifyAddressesTxsRequest *NotifyAddressesTxsRequestMessage `protobuf:"bytes,1121,opt,name=notifyAddressesTxsRequest,proto3,oneof"` } -type KaspadMessage_NotifyNotifyAddressesTxsResponse struct { - NotifyNotifyAddressesTxsResponse *NotifyAddressesTxsResponseMessage `protobuf:"bytes,1122,opt,name=notifyNotifyAddressesTxsResponse,proto3,oneof"` +type KaspadMessage_NotifyAddressesTxsResponse struct { + NotifyAddressesTxsResponse *NotifyAddressesTxsResponseMessage `protobuf:"bytes,1122,opt,name=notifyAddressesTxsResponse,proto3,oneof"` } type KaspadMessage_StopNotifyAddressesTxsRequest struct { @@ -2462,9 +2462,9 @@ func (*KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsResponse) isKaspadM func (*KaspadMessage_TxsConfirmationChangedNotification) isKaspadMessage_Payload() {} -func (*KaspadMessage_NotifyNotifyAddressesTxsRequest) isKaspadMessage_Payload() {} +func (*KaspadMessage_NotifyAddressesTxsRequest) isKaspadMessage_Payload() {} -func (*KaspadMessage_NotifyNotifyAddressesTxsResponse) isKaspadMessage_Payload() {} +func (*KaspadMessage_NotifyAddressesTxsResponse) isKaspadMessage_Payload() {} func (*KaspadMessage_StopNotifyAddressesTxsRequest) isKaspadMessage_Payload() {} @@ -2486,7 +2486,7 @@ var file_messages_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x1a, 0x09, 0x70, 0x32, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x09, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xcf, 0x97, 0x01, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, + 0x6f, 0x22, 0xb8, 0x97, 0x01, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4d, 0x65, 0x73, @@ -3539,180 +3539,179 @@ var file_messages_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x87, 0x01, 0x0a, 0x22, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, + 0x65, 0x12, 0x88, 0x01, 0x0a, 0x22, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x73, 0x74, 0x18, 0xd8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, + 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, + 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x73, 0x74, 0x12, 0x8d, 0x01, 0x0a, + 0x24, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xd9, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x73, 0x74, 0x12, 0x8d, 0x01, 0x0a, 0x24, - 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xd9, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x24, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x24, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x96, 0x01, 0x0a, 0x27, - 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xda, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x27, 0x73, 0x74, 0x6f, - 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x99, 0x01, 0x0a, 0x28, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, + 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x96, 0x01, 0x0a, + 0x27, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xda, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x39, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x27, 0x73, 0x74, + 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x99, 0x01, 0x0a, 0x28, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0xdb, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x28, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0xdb, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, - 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x28, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x99, 0x01, 0x0a, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x65, 0x12, 0x99, 0x01, 0x0a, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xdc, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xdc, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, - 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x9c, 0x01, 0x0a, - 0x29, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xdd, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x29, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x9c, 0x01, + 0x0a, 0x29, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xae, 0x01, 0x0a, 0x2f, - 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, - 0xde, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, - 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2f, 0x6d, 0x6f, 0x64, - 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xb1, 0x01, 0x0a, + 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xdd, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x29, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, + 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xae, 0x01, 0x0a, + 0x2f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x18, 0xde, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2f, 0x6d, 0x6f, + 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xb1, 0x01, + 0x0a, 0x30, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, + 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0xdf, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x30, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0xdf, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x30, - 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, + 0x65, 0x12, 0x87, 0x01, 0x0a, 0x22, 0x74, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe0, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x87, 0x01, 0x0a, 0x22, 0x74, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe0, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x73, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, 0x74, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x78, 0x0a, 0x1f, 0x6e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xe1, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x1f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x7b, 0x0a, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xe2, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, + 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, 0x74, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6c, 0x0a, 0x19, 0x6e, + 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xe1, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x78, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0xe3, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x73, 0x74, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, + 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, + 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6f, 0x0a, 0x1a, 0x6e, 0x6f, 0x74, + 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xe2, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, + 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, + 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7b, 0x0a, 0x1e, 0x73, + 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xe3, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xe4, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xe5, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x7b, 0x0a, 0x1e, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7e, 0x0a, 0x1f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xe4, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xe6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x1f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x90, 0x01, 0x0a, 0x25, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, - 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, - 0xe7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x25, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x1e, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0xe5, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7e, + 0x0a, 0x1f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0xe6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1f, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x90, + 0x01, 0x0a, 0x25, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x93, 0x01, 0x0a, 0x26, 0x6d, 0x6f, 0x64, - 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x18, 0xe8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x26, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, - 0x0a, 0x18, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe9, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x18, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x32, 0x50, 0x0a, 0x03, 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0x50, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, - 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, - 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xe7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x37, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x69, + 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x25, 0x6d, 0x6f, 0x64, 0x69, + 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x93, 0x01, 0x0a, 0x26, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xe8, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x26, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x18, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0xe9, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x54, 0x78, 0x73, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x32, 0x50, 0x0a, + 0x03, 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, + 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, + 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, + 0x50, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, + 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, + 0x01, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -3883,7 +3882,7 @@ var file_messages_proto_goTypes = []interface{}{ (*GetTxConfirmationsResponseMessage)(nil), // 151: protowire.GetTxConfirmationsResponseMessage (*GetTxsConfirmationsRequestMessage)(nil), // 152: protowire.GetTxsConfirmationsRequestMessage (*GetTxsConfirmationsResponseMessage)(nil), // 153: protowire.GetTxsConfirmationsResponseMessage - (*NotifyTxsConfirmationChangedRequstMessage)(nil), // 154: protowire.NotifyTxsConfirmationChangedRequstMessage + (*NotifyTxsConfirmationChangedRequestMessage)(nil), // 154: protowire.NotifyTxsConfirmationChangedRequestMessage (*NotifyTxsConfirmationChangedResponseMessage)(nil), // 155: protowire.NotifyTxsConfirmationChangedResponseMessage (*StopNotifyTxsConfirmationChangedRequestMessage)(nil), // 156: protowire.StopNotifyTxsConfirmationChangedRequestMessage (*StopNotifyTxsConfirmationChangedResponseMessage)(nil), // 157: protowire.StopNotifyTxsConfirmationChangedResponseMessage @@ -4057,7 +4056,7 @@ var file_messages_proto_depIdxs = []int32{ 151, // 151: protowire.KaspadMessage.getTxConfirmationsResponse:type_name -> protowire.GetTxConfirmationsResponseMessage 152, // 152: protowire.KaspadMessage.getTxsConfirmationsRequest:type_name -> protowire.GetTxsConfirmationsRequestMessage 153, // 153: protowire.KaspadMessage.getTxsConfirmationsResponse:type_name -> protowire.GetTxsConfirmationsResponseMessage - 154, // 154: protowire.KaspadMessage.notifyTxsConfirmationChangedRequst:type_name -> protowire.NotifyTxsConfirmationChangedRequstMessage + 154, // 154: protowire.KaspadMessage.notifyTxsConfirmationChangedRequst:type_name -> protowire.NotifyTxsConfirmationChangedRequestMessage 155, // 155: protowire.KaspadMessage.notifyTxsConfirmationChangedResponse:type_name -> protowire.NotifyTxsConfirmationChangedResponseMessage 156, // 156: protowire.KaspadMessage.stopNotifyTxsConfirmationChangedRequest:type_name -> protowire.StopNotifyTxsConfirmationChangedRequestMessage 157, // 157: protowire.KaspadMessage.stopNotifyTxsConfirmationChangedResponse:type_name -> protowire.StopNotifyTxsConfirmationChangedResponseMessage @@ -4066,8 +4065,8 @@ var file_messages_proto_depIdxs = []int32{ 160, // 160: protowire.KaspadMessage.modifyNotifyTxsConfirmationChangedParamsRequest:type_name -> protowire.ModifyNotifyTxsConfirmationChangedParamsRequestMessage 161, // 161: protowire.KaspadMessage.modifyNotifyTxsConfirmationChangedParamsResponse:type_name -> protowire.ModifyNotifyTxsConfirmationChangedParamsResponseMessage 162, // 162: protowire.KaspadMessage.txsConfirmationChangedNotification:type_name -> protowire.TxsConfirmationChangedNotificationMessage - 163, // 163: protowire.KaspadMessage.notifyNotifyAddressesTxsRequest:type_name -> protowire.NotifyAddressesTxsRequestMessage - 164, // 164: protowire.KaspadMessage.notifyNotifyAddressesTxsResponse:type_name -> protowire.NotifyAddressesTxsResponseMessage + 163, // 163: protowire.KaspadMessage.notifyAddressesTxsRequest:type_name -> protowire.NotifyAddressesTxsRequestMessage + 164, // 164: protowire.KaspadMessage.notifyAddressesTxsResponse:type_name -> protowire.NotifyAddressesTxsResponseMessage 165, // 165: protowire.KaspadMessage.stopNotifyAddressesTxsRequest:type_name -> protowire.StopNotifyAddressesTxsRequestMessage 166, // 166: protowire.KaspadMessage.stopNotifyAddressesTxsResponse:type_name -> protowire.StopNotifyAddressesTxsResponseMessage 167, // 167: protowire.KaspadMessage.startNotifyAddressesTxsRequest:type_name -> protowire.StartNotifyAddressesTxsRequestMessage @@ -4271,8 +4270,8 @@ func file_messages_proto_init() { (*KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsRequest)(nil), (*KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsResponse)(nil), (*KaspadMessage_TxsConfirmationChangedNotification)(nil), - (*KaspadMessage_NotifyNotifyAddressesTxsRequest)(nil), - (*KaspadMessage_NotifyNotifyAddressesTxsResponse)(nil), + (*KaspadMessage_NotifyAddressesTxsRequest)(nil), + (*KaspadMessage_NotifyAddressesTxsResponse)(nil), (*KaspadMessage_StopNotifyAddressesTxsRequest)(nil), (*KaspadMessage_StopNotifyAddressesTxsResponse)(nil), (*KaspadMessage_StartNotifyAddressesTxsRequest)(nil), diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto index 62faf400ba..15eb22eea9 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto @@ -164,7 +164,7 @@ message KaspadMessage { GetTxConfirmationsResponseMessage getTxConfirmationsResponse = 1109; GetTxsConfirmationsRequestMessage getTxsConfirmationsRequest = 1110; GetTxsConfirmationsResponseMessage getTxsConfirmationsResponse = 1111; - NotifyTxsConfirmationChangedRequstMessage notifyTxsConfirmationChangedRequst = 1112; + NotifyTxsConfirmationChangedRequestMessage notifyTxsConfirmationChangedRequst = 1112; NotifyTxsConfirmationChangedResponseMessage notifyTxsConfirmationChangedResponse = 1113; StopNotifyTxsConfirmationChangedRequestMessage stopNotifyTxsConfirmationChangedRequest = 1114; StopNotifyTxsConfirmationChangedResponseMessage stopNotifyTxsConfirmationChangedResponse = 1115; @@ -173,8 +173,8 @@ message KaspadMessage { ModifyNotifyTxsConfirmationChangedParamsRequestMessage modifyNotifyTxsConfirmationChangedParamsRequest = 1118; ModifyNotifyTxsConfirmationChangedParamsResponseMessage modifyNotifyTxsConfirmationChangedParamsResponse = 1119; TxsConfirmationChangedNotificationMessage txsConfirmationChangedNotification = 1120; - NotifyAddressesTxsRequestMessage notifyNotifyAddressesTxsRequest = 1121; - NotifyAddressesTxsResponseMessage notifyNotifyAddressesTxsResponse = 1122; + NotifyAddressesTxsRequestMessage notifyAddressesTxsRequest = 1121; + NotifyAddressesTxsResponseMessage notifyAddressesTxsResponse = 1122; StopNotifyAddressesTxsRequestMessage stopNotifyAddressesTxsRequest = 1123; StopNotifyAddressesTxsResponseMessage stopNotifyAddressesTxsResponse = 1124; StartNotifyAddressesTxsRequestMessage startNotifyAddressesTxsRequest = 1125; diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md index 8d1efef70f..7eedc4b94c 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md @@ -139,8 +139,7 @@ - [GetTxConfirmationsResponseMessage](#protowire.GetTxConfirmationsResponseMessage) - [GetTxsConfirmationsRequestMessage](#protowire.GetTxsConfirmationsRequestMessage) - [GetTxsConfirmationsResponseMessage](#protowire.GetTxsConfirmationsResponseMessage) - - [NotifyTxsConfirmationChangedRequstMessage](#protowire.NotifyTxsConfirmationChangedRequstMessage) - - [NotifyTxsConfirmationChangedRequstMessage.Params](#protowire.NotifyTxsConfirmationChangedRequstMessage.Params) + - [NotifyTxsConfirmationChangedRequestMessage](#protowire.NotifyTxsConfirmationChangedRequestMessage) - [NotifyTxsConfirmationChangedResponseMessage](#protowire.NotifyTxsConfirmationChangedResponseMessage) - [TxsConfirmationChangedNotificationMessage](#protowire.TxsConfirmationChangedNotificationMessage) - [StopNotifyTxsConfirmationChangedRequestMessage](#protowire.StopNotifyTxsConfirmationChangedRequestMessage) @@ -152,7 +151,6 @@ - [TxEntryByAddress](#protowire.TxEntryByAddress) - [TxEntriesByAddresses](#protowire.TxEntriesByAddresses) - [NotifyAddressesTxsRequestMessage](#protowire.NotifyAddressesTxsRequestMessage) - - [NotifyAddressesTxsRequestMessage.Params](#protowire.NotifyAddressesTxsRequestMessage.Params) - [NotifyAddressesTxsResponseMessage](#protowire.NotifyAddressesTxsResponseMessage) - [StopNotifyAddressesTxsRequestMessage](#protowire.StopNotifyAddressesTxsRequestMessage) - [StopNotifyAddressesTxsResponseMessage](#protowire.StopNotifyAddressesTxsResponseMessage) @@ -2331,9 +2329,9 @@ Kaspad most be started with the `--txindex` flag for this Request to work. - + -### NotifyTxsConfirmationChangedRequstMessage +### NotifyTxsConfirmationChangedRequestMessage NotifyTxsConfirmationChangedRequstMessage is a listener that registers confirmations from supplied TxIDs Kaspad most be started with the `--txindex` flag for this Request to work. @@ -2341,21 +2339,6 @@ Kaspad most be started with the `--txindex` flag for this Request to work. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | TxIDs | [string](#string) | repeated | initial TxIds to listen for when regestering for notifications | -| params | [NotifyTxsConfirmationChangedRequstMessage.Params](#protowire.NotifyTxsConfirmationChangedRequstMessage.Params) | | | - - - - - - - - -### NotifyTxsConfirmationChangedRequstMessage.Params - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | | requiredConfirmations | [uint32](#uint32) | | number of confirmations until a transaction is considered confirmed | | includePending | [bool](#bool) | | weather to notify confirmation changes during pre-Confirmed states | @@ -2370,6 +2353,11 @@ Kaspad most be started with the `--txindex` flag for this Request to work. +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [RPCError](#protowire.RPCError) | | | + + @@ -2528,21 +2516,6 @@ NotifyAddressesTxsChangedRequestMessage Listens for Txs pertaining to specified | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | addresses | [string](#string) | repeated | initial addresses to listen for Tx changes when regestering for notifications | -| params | [NotifyAddressesTxsRequestMessage.Params](#protowire.NotifyAddressesTxsRequestMessage.Params) | | | - - - - - - - - -### NotifyAddressesTxsRequestMessage.Params - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | | requiredConfirmations | [uint32](#uint32) | | number of confirmations until a transaction is considered confirmed | | includePending | [bool](#bool) | | whether to notify confirmation changes during pre-Confirmed states | | includeSending | [bool](#bool) | | whether to listen on addresses sending txs | diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go index 6f123f6974..68d105c815 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go @@ -7547,17 +7547,18 @@ func (x *GetTxsConfirmationsResponseMessage) GetError() *RPCError { // NotifyTxsConfirmationChangedRequstMessage is a listener that registers confirmations from supplied TxIDs // Kaspad most be started with the `--txindex` flag for this Request to work. -type NotifyTxsConfirmationChangedRequstMessage struct { +type NotifyTxsConfirmationChangedRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxIDs []string `protobuf:"bytes,1,rep,name=TxIDs,proto3" json:"TxIDs,omitempty"` //initial TxIds to listen for when regestering for notifications - Params *NotifyTxsConfirmationChangedRequstMessage_Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` + TxIDs []string `protobuf:"bytes,1,rep,name=TxIDs,proto3" json:"TxIDs,omitempty"` //initial TxIds to listen for when regestering for notifications + RequiredConfirmations uint32 `protobuf:"varint,2,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` // number of confirmations until a transaction is considered confirmed + IncludePending bool `protobuf:"varint,3,opt,name=includePending,proto3" json:"includePending,omitempty"` // weather to notify confirmation changes during pre-Confirmed states } -func (x *NotifyTxsConfirmationChangedRequstMessage) Reset() { - *x = NotifyTxsConfirmationChangedRequstMessage{} +func (x *NotifyTxsConfirmationChangedRequestMessage) Reset() { + *x = NotifyTxsConfirmationChangedRequestMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[135] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7565,13 +7566,13 @@ func (x *NotifyTxsConfirmationChangedRequstMessage) Reset() { } } -func (x *NotifyTxsConfirmationChangedRequstMessage) String() string { +func (x *NotifyTxsConfirmationChangedRequestMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NotifyTxsConfirmationChangedRequstMessage) ProtoMessage() {} +func (*NotifyTxsConfirmationChangedRequestMessage) ProtoMessage() {} -func (x *NotifyTxsConfirmationChangedRequstMessage) ProtoReflect() protoreflect.Message { +func (x *NotifyTxsConfirmationChangedRequestMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[135] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7583,29 +7584,38 @@ func (x *NotifyTxsConfirmationChangedRequstMessage) ProtoReflect() protoreflect. return mi.MessageOf(x) } -// Deprecated: Use NotifyTxsConfirmationChangedRequstMessage.ProtoReflect.Descriptor instead. -func (*NotifyTxsConfirmationChangedRequstMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use NotifyTxsConfirmationChangedRequestMessage.ProtoReflect.Descriptor instead. +func (*NotifyTxsConfirmationChangedRequestMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{135} } -func (x *NotifyTxsConfirmationChangedRequstMessage) GetTxIDs() []string { +func (x *NotifyTxsConfirmationChangedRequestMessage) GetTxIDs() []string { if x != nil { return x.TxIDs } return nil } -func (x *NotifyTxsConfirmationChangedRequstMessage) GetParams() *NotifyTxsConfirmationChangedRequstMessage_Params { +func (x *NotifyTxsConfirmationChangedRequestMessage) GetRequiredConfirmations() uint32 { if x != nil { - return x.Params + return x.RequiredConfirmations } - return nil + return 0 +} + +func (x *NotifyTxsConfirmationChangedRequestMessage) GetIncludePending() bool { + if x != nil { + return x.IncludePending + } + return false } type NotifyTxsConfirmationChangedResponseMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } func (x *NotifyTxsConfirmationChangedResponseMessage) Reset() { @@ -7640,6 +7650,13 @@ func (*NotifyTxsConfirmationChangedResponseMessage) Descriptor() ([]byte, []int) return file_rpc_proto_rawDescGZIP(), []int{136} } +func (x *NotifyTxsConfirmationChangedResponseMessage) GetError() *RPCError { + if x != nil { + return x.Error + } + return nil +} + // TxsConfirmationChangedNotificationMessage is the notification about txs pertaining to specified TxIDs type TxsConfirmationChangedNotificationMessage struct { state protoimpl.MessageState @@ -8139,8 +8156,11 @@ type NotifyAddressesTxsRequestMessage struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` //initial addresses to listen for Tx changes when regestering for notifications - Params *NotifyAddressesTxsRequestMessage_Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` + Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` //initial addresses to listen for Tx changes when regestering for notifications + RequiredConfirmations uint32 `protobuf:"varint,2,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` // number of confirmations until a transaction is considered confirmed + IncludePending bool `protobuf:"varint,3,opt,name=includePending,proto3" json:"includePending,omitempty"` //whether to notify confirmation changes during pre-Confirmed states + IncludeSending bool `protobuf:"varint,4,opt,name=includeSending,proto3" json:"includeSending,omitempty"` //whether to listen on addresses sending txs + IncludeReceiving bool `protobuf:"varint,5,opt,name=includeReceiving,proto3" json:"includeReceiving,omitempty"` //whether to listen on addresses reciving txs } func (x *NotifyAddressesTxsRequestMessage) Reset() { @@ -8182,11 +8202,32 @@ func (x *NotifyAddressesTxsRequestMessage) GetAddresses() []string { return nil } -func (x *NotifyAddressesTxsRequestMessage) GetParams() *NotifyAddressesTxsRequestMessage_Params { +func (x *NotifyAddressesTxsRequestMessage) GetRequiredConfirmations() uint32 { if x != nil { - return x.Params + return x.RequiredConfirmations } - return nil + return 0 +} + +func (x *NotifyAddressesTxsRequestMessage) GetIncludePending() bool { + if x != nil { + return x.IncludePending + } + return false +} + +func (x *NotifyAddressesTxsRequestMessage) GetIncludeSending() bool { + if x != nil { + return x.IncludeSending + } + return false +} + +func (x *NotifyAddressesTxsRequestMessage) GetIncludeReceiving() bool { + if x != nil { + return x.IncludeReceiving + } + return false } type NotifyAddressesTxsResponseMessage struct { @@ -8620,132 +8661,6 @@ func (x *AddressesTxsNotificationMessage) GetUnconfirmed() *TxEntriesByAddresses return nil } -type NotifyTxsConfirmationChangedRequstMessage_Params struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequiredConfirmations uint32 `protobuf:"varint,1,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` // number of confirmations until a transaction is considered confirmed - IncludePending bool `protobuf:"varint,2,opt,name=includePending,proto3" json:"includePending,omitempty"` // weather to notify confirmation changes during pre-Confirmed states -} - -func (x *NotifyTxsConfirmationChangedRequstMessage_Params) Reset() { - *x = NotifyTxsConfirmationChangedRequstMessage_Params{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[155] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NotifyTxsConfirmationChangedRequstMessage_Params) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NotifyTxsConfirmationChangedRequstMessage_Params) ProtoMessage() {} - -func (x *NotifyTxsConfirmationChangedRequstMessage_Params) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[155] - 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 NotifyTxsConfirmationChangedRequstMessage_Params.ProtoReflect.Descriptor instead. -func (*NotifyTxsConfirmationChangedRequstMessage_Params) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{135, 0} -} - -func (x *NotifyTxsConfirmationChangedRequstMessage_Params) GetRequiredConfirmations() uint32 { - if x != nil { - return x.RequiredConfirmations - } - return 0 -} - -func (x *NotifyTxsConfirmationChangedRequstMessage_Params) GetIncludePending() bool { - if x != nil { - return x.IncludePending - } - return false -} - -type NotifyAddressesTxsRequestMessage_Params struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequiredConfirmations uint32 `protobuf:"varint,2,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` // number of confirmations until a transaction is considered confirmed - IncludePending bool `protobuf:"varint,3,opt,name=includePending,proto3" json:"includePending,omitempty"` //whether to notify confirmation changes during pre-Confirmed states - IncludeSending bool `protobuf:"varint,4,opt,name=includeSending,proto3" json:"includeSending,omitempty"` //whether to listen on addresses sending txs - IncludeReceiving bool `protobuf:"varint,5,opt,name=includeReceiving,proto3" json:"includeReceiving,omitempty"` //whether to listen on addresses reciving txs -} - -func (x *NotifyAddressesTxsRequestMessage_Params) Reset() { - *x = NotifyAddressesTxsRequestMessage_Params{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[156] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NotifyAddressesTxsRequestMessage_Params) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NotifyAddressesTxsRequestMessage_Params) ProtoMessage() {} - -func (x *NotifyAddressesTxsRequestMessage_Params) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[156] - 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 NotifyAddressesTxsRequestMessage_Params.ProtoReflect.Descriptor instead. -func (*NotifyAddressesTxsRequestMessage_Params) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{146, 0} -} - -func (x *NotifyAddressesTxsRequestMessage_Params) GetRequiredConfirmations() uint32 { - if x != nil { - return x.RequiredConfirmations - } - return 0 -} - -func (x *NotifyAddressesTxsRequestMessage_Params) GetIncludePending() bool { - if x != nil { - return x.IncludePending - } - return false -} - -func (x *NotifyAddressesTxsRequestMessage_Params) GetIncludeSending() bool { - if x != nil { - return x.IncludeSending - } - return false -} - -func (x *NotifyAddressesTxsRequestMessage_Params) GetIncludeReceiving() bool { - if x != nil { - return x.IncludeReceiving - } - return false -} - var File_rpc_proto protoreflect.FileDescriptor var file_rpc_proto_rawDesc = []byte{ @@ -9726,183 +9641,175 @@ var file_rpc_proto_rawDesc = []byte{ 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xfe, 0x01, 0x0a, 0x29, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xa0, 0x01, 0x0a, 0x2a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x59, 0x0a, 0x2b, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0xbb, 0x02, 0x0a, 0x29, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x07, 0x70, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x09, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x75, 0x6e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x10, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, + 0x54, 0x78, 0x49, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x46, 0x0a, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, + 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x12, 0x53, 0x0a, 0x06, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x66, - 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, - 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, - 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x2d, 0x0a, 0x2b, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x22, 0x5d, 0x0a, 0x2f, 0x53, 0x74, 0x6f, + 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x47, 0x0a, 0x2f, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, + 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, + 0x73, 0x22, 0x5e, 0x0a, 0x30, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xbb, 0x02, 0x0a, 0x29, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x96, 0x01, 0x0a, 0x36, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x65, 0x0a, 0x37, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x07, 0x70, 0x65, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, - 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, - 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x75, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x46, 0x0a, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x22, 0x5d, 0x0a, 0x2f, 0x53, - 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x66, 0x0a, 0x10, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x78, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x54, 0x78, + 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x04, 0x73, + 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x22, 0xf2, 0x01, 0x0a, + 0x20, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, + 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x0a, + 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, + 0x67, 0x22, 0x4f, 0x0a, 0x21, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x44, 0x0a, 0x24, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x53, 0x0a, 0x25, 0x53, 0x74, 0x6f, 0x70, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, + 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, + 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x45, 0x0a, + 0x25, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x22, 0x54, 0x0a, 0x26, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x47, 0x0a, 0x2f, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, - 0x49, 0x44, 0x73, 0x22, 0x5e, 0x0a, 0x30, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x96, 0x01, 0x0a, 0x36, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, + 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xe0, 0x01, 0x0a, 0x2c, 0x4d, + 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x22, 0x5b, 0x0a, + 0x2d, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x94, 0x02, 0x0a, 0x1f, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, - 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x65, 0x0a, 0x37, - 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x66, 0x0a, 0x10, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x14, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x39, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, + 0x3d, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, + 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x41, + 0x0a, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, - 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, - 0x04, 0x73, 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x22, 0xc9, - 0x02, 0x0a, 0x20, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x12, 0x4a, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0xba, 0x01, - 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, - 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, - 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2a, - 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, - 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x22, 0x4f, 0x0a, 0x21, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x44, 0x0a, 0x24, 0x53, - 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x22, 0x53, 0x0a, 0x25, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x45, 0x0a, 0x25, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x54, 0x0a, - 0x26, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0xe0, 0x01, 0x0a, 0x2c, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x22, 0x5b, 0x0a, 0x2d, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, - 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x94, 0x02, 0x0a, 0x1f, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x39, 0x0a, - 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, - 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x3d, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x09, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x0b, 0x75, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, - 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x73, 0x65, 0x73, 0x52, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, + 0x64, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -9918,7 +9825,7 @@ func file_rpc_proto_rawDescGZIP() []byte { } var file_rpc_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 157) +var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 155) var file_rpc_proto_goTypes = []interface{}{ (SubmitBlockResponseMessage_RejectReason)(0), // 0: protowire.SubmitBlockResponseMessage.RejectReason (*RPCError)(nil), // 1: protowire.RPCError @@ -10056,7 +9963,7 @@ var file_rpc_proto_goTypes = []interface{}{ (*GetTxConfirmationsResponseMessage)(nil), // 133: protowire.GetTxConfirmationsResponseMessage (*GetTxsConfirmationsRequestMessage)(nil), // 134: protowire.GetTxsConfirmationsRequestMessage (*GetTxsConfirmationsResponseMessage)(nil), // 135: protowire.GetTxsConfirmationsResponseMessage - (*NotifyTxsConfirmationChangedRequstMessage)(nil), // 136: protowire.NotifyTxsConfirmationChangedRequstMessage + (*NotifyTxsConfirmationChangedRequestMessage)(nil), // 136: protowire.NotifyTxsConfirmationChangedRequestMessage (*NotifyTxsConfirmationChangedResponseMessage)(nil), // 137: protowire.NotifyTxsConfirmationChangedResponseMessage (*TxsConfirmationChangedNotificationMessage)(nil), // 138: protowire.TxsConfirmationChangedNotificationMessage (*StopNotifyTxsConfirmationChangedRequestMessage)(nil), // 139: protowire.StopNotifyTxsConfirmationChangedRequestMessage @@ -10076,8 +9983,6 @@ var file_rpc_proto_goTypes = []interface{}{ (*ModifyNotifyAddressesTxsParamsRequestMessage)(nil), // 153: protowire.ModifyNotifyAddressesTxsParamsRequestMessage (*ModifyNotifyAddressesTxsParamsResponseMessage)(nil), // 154: protowire.ModifyNotifyAddressesTxsParamsResponseMessage (*AddressesTxsNotificationMessage)(nil), // 155: protowire.AddressesTxsNotificationMessage - (*NotifyTxsConfirmationChangedRequstMessage_Params)(nil), // 156: protowire.NotifyTxsConfirmationChangedRequstMessage.Params - (*NotifyAddressesTxsRequestMessage_Params)(nil), // 157: protowire.NotifyAddressesTxsRequestMessage.Params } var file_rpc_proto_depIdxs = []int32{ 3, // 0: protowire.RpcBlock.header:type_name -> protowire.RpcBlockHeader @@ -10178,7 +10083,7 @@ var file_rpc_proto_depIdxs = []int32{ 1, // 95: protowire.GetTxConfirmationsResponseMessage.error:type_name -> protowire.RPCError 111, // 96: protowire.GetTxsConfirmationsResponseMessage.txIDConfirmationsPairs:type_name -> protowire.RpcTxIDConfirmationsPair 1, // 97: protowire.GetTxsConfirmationsResponseMessage.error:type_name -> protowire.RPCError - 156, // 98: protowire.NotifyTxsConfirmationChangedRequstMessage.params:type_name -> protowire.NotifyTxsConfirmationChangedRequstMessage.Params + 1, // 98: protowire.NotifyTxsConfirmationChangedResponseMessage.error:type_name -> protowire.RPCError 111, // 99: protowire.TxsConfirmationChangedNotificationMessage.pending:type_name -> protowire.RpcTxIDConfirmationsPair 111, // 100: protowire.TxsConfirmationChangedNotificationMessage.confirmed:type_name -> protowire.RpcTxIDConfirmationsPair 1, // 101: protowire.TxsConfirmationChangedNotificationMessage.error:type_name -> protowire.RPCError @@ -10187,19 +10092,18 @@ var file_rpc_proto_depIdxs = []int32{ 1, // 104: protowire.ModifyNotifyTxsConfirmationChangedParamsResponseMessage.error:type_name -> protowire.RPCError 145, // 105: protowire.TxEntriesByAddresses.sent:type_name -> protowire.TxEntryByAddress 145, // 106: protowire.TxEntriesByAddresses.received:type_name -> protowire.TxEntryByAddress - 157, // 107: protowire.NotifyAddressesTxsRequestMessage.params:type_name -> protowire.NotifyAddressesTxsRequestMessage.Params - 1, // 108: protowire.NotifyAddressesTxsResponseMessage.error:type_name -> protowire.RPCError - 1, // 109: protowire.StopNotifyAddressesTxsResponseMessage.error:type_name -> protowire.RPCError - 1, // 110: protowire.StartNotifyAddressesTxsResponseMessage.error:type_name -> protowire.RPCError - 1, // 111: protowire.ModifyNotifyAddressesTxsParamsResponseMessage.error:type_name -> protowire.RPCError - 146, // 112: protowire.AddressesTxsNotificationMessage.pending:type_name -> protowire.TxEntriesByAddresses - 146, // 113: protowire.AddressesTxsNotificationMessage.confirmed:type_name -> protowire.TxEntriesByAddresses - 146, // 114: protowire.AddressesTxsNotificationMessage.unconfirmed:type_name -> protowire.TxEntriesByAddresses - 115, // [115:115] is the sub-list for method output_type - 115, // [115:115] is the sub-list for method input_type - 115, // [115:115] is the sub-list for extension type_name - 115, // [115:115] is the sub-list for extension extendee - 0, // [0:115] is the sub-list for field type_name + 1, // 107: protowire.NotifyAddressesTxsResponseMessage.error:type_name -> protowire.RPCError + 1, // 108: protowire.StopNotifyAddressesTxsResponseMessage.error:type_name -> protowire.RPCError + 1, // 109: protowire.StartNotifyAddressesTxsResponseMessage.error:type_name -> protowire.RPCError + 1, // 110: protowire.ModifyNotifyAddressesTxsParamsResponseMessage.error:type_name -> protowire.RPCError + 146, // 111: protowire.AddressesTxsNotificationMessage.pending:type_name -> protowire.TxEntriesByAddresses + 146, // 112: protowire.AddressesTxsNotificationMessage.confirmed:type_name -> protowire.TxEntriesByAddresses + 146, // 113: protowire.AddressesTxsNotificationMessage.unconfirmed:type_name -> protowire.TxEntriesByAddresses + 114, // [114:114] is the sub-list for method output_type + 114, // [114:114] is the sub-list for method input_type + 114, // [114:114] is the sub-list for extension type_name + 114, // [114:114] is the sub-list for extension extendee + 0, // [0:114] is the sub-list for field type_name } func init() { file_rpc_proto_init() } @@ -11829,7 +11733,7 @@ func file_rpc_proto_init() { } } file_rpc_proto_msgTypes[135].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyTxsConfirmationChangedRequstMessage); i { + switch v := v.(*NotifyTxsConfirmationChangedRequestMessage); i { case 0: return &v.state case 1: @@ -12068,30 +11972,6 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[155].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyTxsConfirmationChangedRequstMessage_Params); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[156].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyAddressesTxsRequestMessage_Params); 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{ @@ -12099,7 +11979,7 @@ func file_rpc_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_rpc_proto_rawDesc, NumEnums: 1, - NumMessages: 157, + NumMessages: 155, NumExtensions: 0, NumServices: 0, }, diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto index 105bb5e43c..f1e983d658 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto @@ -880,17 +880,17 @@ message GetTxsConfirmationsResponseMessage{ // NotifyTxsConfirmationChangedRequstMessage is a listener that registers confirmations from supplied TxIDs // Kaspad most be started with the `--txindex` flag for this Request to work. -message NotifyTxsConfirmationChangedRequstMessage{ +message NotifyTxsConfirmationChangedRequestMessage{ repeated string TxIDs = 1; //initial TxIds to listen for when regestering for notifications - message Params { - uint32 requiredConfirmations = 1; // number of confirmations until a transaction is considered confirmed - bool includePending = 2; // weather to notify confirmation changes during pre-Confirmed states - } - Params params = 2; + + uint32 requiredConfirmations = 2; // number of confirmations until a transaction is considered confirmed + bool includePending = 3; // weather to notify confirmation changes during pre-Confirmed states + } message NotifyTxsConfirmationChangedResponseMessage{ + RPCError error = 1000; } // TxsConfirmationChangedNotificationMessage is the notification about txs pertaining to specified TxIDs @@ -949,13 +949,10 @@ message TxEntriesByAddresses{ // NotifyAddressesTxsChangedRequestMessage Listens for Txs pertaining to specified addresses according to the params specified message NotifyAddressesTxsRequestMessage{ repeated string addresses = 1; //initial addresses to listen for Tx changes when regestering for notifications - message Params { - uint32 requiredConfirmations = 2; // number of confirmations until a transaction is considered confirmed - bool includePending = 3; //whether to notify confirmation changes during pre-Confirmed states - bool includeSending = 4; //whether to listen on addresses sending txs - bool includeReceiving = 5; //whether to listen on addresses reciving txs - } - Params params = 2; + uint32 requiredConfirmations = 2; // number of confirmations until a transaction is considered confirmed + bool includePending = 3; //whether to notify confirmation changes during pre-Confirmed states + bool includeSending = 4; //whether to listen on addresses sending txs + bool includeReceiving = 5; //whether to listen on addresses reciving txs } message NotifyAddressesTxsResponseMessage{ diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_addresses_txs_params.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_addresses_txs_params.go deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notify_addresses_txs_params.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notify_addresses_txs_params.go new file mode 100644 index 0000000000..11cbe9496c --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notify_addresses_txs_params.go @@ -0,0 +1,53 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_ModifyNotifyAddressesTxsParamsRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_ModifyNotifyAddressesTxsParamsRequest is nil") + } + return x.ModifyNotifyAddressesTxsParamsRequest.toAppMessage() +} + +func (x *KaspadMessage_ModifyNotifyAddressesTxsParamsRequest) fromAppMessage(message *appmessage.ModifyNotifyAddressesTxsParamsRequestMessage) error { + x.ModifyNotifyAddressesTxsParamsRequest = &ModifyNotifyAddressesTxsParamsRequestMessage{ + RequiredConfirmations: message.RequiredConfirmations, + IncludePending: message.IncludePending, + IncludeSending: message.IncludeSending, + IncludeReceiving: message.IncludeReceiving, + } + return nil +} + +func (x *ModifyNotifyAddressesTxsParamsRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "ModifyNotifyAddressesTxsParamsRequestMessage is nil") + } + return &appmessage.ModifyNotifyAddressesTxsParamsRequestMessage{ + RequiredConfirmations: x.RequiredConfirmations, + IncludePending: x.IncludePending, + IncludeSending: x.IncludeSending, + IncludeReceiving: x.IncludeReceiving, + }, nil +} + +func (x *KaspadMessage_ModifyNotifyAddressesTxsParamsResponse) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "ModifyNotifyAddressesTxsParamsResponseMessage is nil") + } + return x.ModifyNotifyAddressesTxsParamsResponse.toAppMessage() +} + +func (x *KaspadMessage_ModifyNotifyAddressesTxsParamsResponse) fromAppMessage(message *appmessage.ModifyNotifyAddressesTxsParamsResponseMessage) error { + var err *RPCError + if message.Error != nil { + err = &RPCError{Message: message.Error.Message} + } + x.ModifyNotifyAddressesTxsParamsResponse = &ModifyNotifytTxsConfirmationChangedParamsResponseMessage{ + Error: err, + } + return nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notify_txs_confirmation_changed_params.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notify_txs_confirmation_changed_params.go new file mode 100644 index 0000000000..afc3cfd1f3 --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notify_txs_confirmation_changed_params.go @@ -0,0 +1,49 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsRequest is nil") + } + return x.ModifyNotifyTxsConfirmationChangedParamsRequest.toAppMessage() +} + +func (x *KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsRequest) fromAppMessage(message *appmessage.ModifyNotifyTxsConfirmationChangedParamsRequestMessage) error { + x.ModifyNotifyTxsConfirmationChangedParamsRequest = &ModifyNotifyTxsConfirmationChangedParamsRequestMessage{ + RequiredConfirmations: message.RequiredConfirmations, + IncludePending: message.IncludePending, + } + return nil +} + +func (x *ModifyNotifyTxsConfirmationChangedParamsRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "ModifyNotifyTxsConfirmationChangedParamsRequestMessage is nil") + } + return &appmessage.ModifyNotifyTxsConfirmationChangedParamsRequestMessage{ + RequiredConfirmations: x.RequiredConfirmations, + IncludePending: x.IncludePending, + }, nil +} + +func (x *KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsResponse) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "ModifyNotifyTxsConfirmationChangedParamsResponseMessage is nil") + } + return x.ModifyNotifyTxsConfirmationChangedParamsResponse.toAppMessage() +} + +func (x *KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsResponse) fromAppMessage(message *appmessage.ModifyNotifyTxsConfirmationChangedParamsResponseMessage) error { + var err *RPCError + if message.Error != nil { + err = &RPCError{Message: message.Error.Message} + } + x.ModifyNotifyTxsConfirmationChangedParamsResponse = &ModifyNotifytTxsConfirmationChangedParamsResponseMessage{ + Error: err, + } + return nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_txs_confirmation_changed_params.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_txs_confirmation_changed_params.go deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go index e69de29bb2..fb9554640e 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go @@ -0,0 +1,216 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) NotifyAddressesTxsParams + +func (x *KaspadMessage_NotifyAddressesTxsRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_NotifyAddressesTxsRequest is nil") + } + return x.NotifyAddressesTxsRequst.toAppMessage() +} + +func (x *KaspadMessage_NotifyAddressesTxsRequest) fromAppMessage(message *appmessage.NotifyAddressesTxsRequstMessage) error { + x.NotifyAddressesTxsRequest = &NotifyAddressesTxsRequstMessage{ + Addresses : message.Addresses, + RequiredConfirmations: message.RequiredConfirmations, + IncludePending: message.IncludePending, + IncludeSending: message.IncludeSending, + IncludeReceiving: message.IncludeReceiving, + } + return nil +} + +func (x *NotifyAddressesTxsRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "NotifyAddressesTxsRequestMessage is nil") + } + return &appmessage.NotifyAddressesTxsRequestMessage{ + Addresses : x.Addresses, + RequiredConfirmations: x.RequiredConfirmations, + IncludePending: x.IncludePending, + IncludeSending: x.IncludeSending, + IncludeReceiving: x.IncludeReceiving, + }, nil +} + +func (x *KaspadMessage_NotifyAddressesTxsResponse) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "NotifyAddressesTxsResponseMessage is nil") + } + return x.NotifyAddressesTxsResponse.toAppMessage() +} + +func (x *KaspadMessage_NotifyAddressesTxsResponse) fromAppMessage(message *appmessage.NotifyAddressesTxsResponseMessage) error { + var err *RPCError + if message.Error != nil { + err = &RPCError{Message: message.Error.Message} + } + x.NotifyAddressesTxsResponse = &NotifyAddressesTxsResponseMessage{ + Error: err, + } + return nil +} + +func (x *NotifyAddressesTxsResponseMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "NotifyAddressesTxsResponseMessage is nil") + } + rpcErr, err := x.Error.toAppMessage() + // Error is an optional field + if err != nil && !errors.Is(err, errorNil) { + return nil, err + } + return &appmessage.NotifyAddressesTxsResponseMessage{ + Error: rpcErr, + }, nil +} + +func (x *KaspadMessage_AddressesTxsNotification) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_AddressesTxsNotification is nil") + } + return x.AddressesTxsNotification.toAppMessage() +} + +func (x *KaspadMessage_AddressesTxsNotification) fromAppMessage(message *appmessage.AddressesTxsNotificationMessage) error { + pending := make([]*TxEntriesByAddresses, len(message.Pending)) + for i, entry := range message.Pending { + entry[i] = &TxEntriesByAddresses{} + entry[i].fromAppMessage(entry) + } + + confirmed := make([]*TxEntriesByAddresses, len(message.Confirmed)) + for i, entry := range message.Confirmed { + entry[i] = &TxEntriesByAddresses{} + entry[i].fromAppMessage(entry) + } + + unconfirmed := make([]*TxEntriesByAddresses, len(message.Unconfirmed)) + for i, entry := range message.Confirmed { + entry[i] = &TxEntriesByAddresses{} + entry[i].fromAppMessage(entry) + } + + x.AddressesTxsNotification = &AddressesTxsNotificationMessage{ + RequiredConfirmations: message.RequiredConfirmations, + Pending: pending, + Confirmed: confirmed, + Unconfirmed: unconfirmed, + } + return nil +} + +func (x *AddressesTxsNotificationMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "AddressesTxsNotificationMessage is nil") + } + pending := make([]*appmessage.TxEntriesByAddresses, len(x.Pending)) + for i, entry := range x.Pending { + entry, err := entry.toAppMessage() + if err != nil { + return nil, err + } + pending[i] = entry + } + + confirmed := make([]*appmessage.TxEntriesByAddresses, len(x.Confirmed)) + for i, entry := range x.Confirmed { + entry, err := entry.toAppMessage() + if err != nil { + return nil, err + } + confirmed[i] = entry + } + + unconfirmed := make([]*appmessage.TxEntriesByAddresses, len(x.Unconfirmed)) + for i, entry := range x.Unconfirmed { + entry, err := entry.toAppMessage() + if err != nil { + return nil, err + } + confirmed[i] = entry + } + + + return &appmessage.AddressesTxsNotificationMessage{ + RequiredConfirmations: x.RequiredConfirmations, + Pending: pending, + Confirmed: confirmed, + Unconfirmed: unconfirmed, + }, nil +} + + +func (x *TxEntriesByAddresses) toAppMessage() (*appmessage.TxEntriesByAddresses, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "TxEntriesByAddresses is nil") + } + + sent := make([]*appmessage.TxEntriesByAddresses, len(x.Sent)) + for i, entry := range x.Sent { + entry, err := entry.toAppMessage() + if err != nil { + return nil, err + } + sent[i] = entry + } + + received := make([]*appmessage.TxEntriesByAddresses, len(x.Received)) + for i, entry := range x.Received { + entry, err := entry.toAppMessage() + if err != nil { + return nil, err + } + sent[i] = entry + } + + + return &appmessage.TxEntriesByAddresses{ + Sent: sent, + Recived: received, + }, nil +} + +func (x *TxEntriesByAddresses) fromAppMessage(message *appmessage.TxEntriesByAddresses) { + + sent := make([]*TxEntryByAddress, len(message.Sent)) + for i, entry := range message.Confirmed { + entry[i] = &TxEntryByAddress{} + entry[i].fromAppMessage(entry) + } + + received := make([]*TxEntryByAddress, len(message.Received)) + for i, entry := range message.Confirmed { + entry[i] = &TxEntryByAddress{} + entry[i].fromAppMessage(entry) + } + + *x = TxEntriesByAddresses{ + Sent: sent, + Received: received, + } +} + +func (x *TxEntryByAddress) toAppMessage() (*appmessage.TxEntryByAddress, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "TxEntryByAddress is nil") + } + + return &appmessage.TxEntryByAddress{ + Address: x.Address, + TxId: x.Address, + Confirmations: x.Address, + }, nil +} + +func (x *TxEntryByAddress) fromAppMessage(message *appmessage.TxEntryByAddress) { + + *x = TxEntryByAddress{ + Address: message.Address, + TxId: message.Address, + Confirmations: message.Address, + } +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_txs_confirmation_changed.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_txs_confirmation_changed.go index e69de29bb2..ea15cdaee5 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_txs_confirmation_changed.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_txs_confirmation_changed.go @@ -0,0 +1,124 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_NotifyTxsConfirmationChangedRequst) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_NotifyTxsConfirmationChangedRequest is nil") + } + return x.NotifyTxsConfirmationChangedRequst.toAppMessage() +} + +func (x *KaspadMessage_NotifyTxsConfirmationChangedRequst) fromAppMessage(message *appmessage.NotifyTxsConfirmationChangedRequstMessage) error { + x.NotifyTxsConfirmationChangedRequst = &NotifyTxsConfirmationChangedRequstMessage{ + TxIDs: message.TxIDs, + RequiredConfirmations: message.RequiredConfirmations, + IncludePending: message.IncludePending, + } + return nil +} + +func (x *NotifyTxsConfirmationChangedRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "NotifyTxsConfirmationChangedRequestMessage is nil") + } + return &appmessage.NotifyTxsConfirmationChangedRequestMessage{ + TxIDs: x.TxIDs, + RequiredConfirmations: x.RequiredConfirmations, + IncludePending: x.IncludePending, + }, nil +} + +func (x *KaspadMessage_NotifyTxsConfirmationChangedResponse) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "NotifyTxsConfirmationChangedResponseMessage is nil") + } + return x.NotifyTxsConfirmationChangedResponse.toAppMessage() +} + +func (x *KaspadMessage_NotifyTxsConfirmationChangedResponse) fromAppMessage(message *appmessage.NotifyTxsConfirmationChangedResponseMessage) error { + var err *RPCError + if message.Error != nil { + err = &RPCError{Message: message.Error.Message} + } + x.NotifyTxsConfirmationChangedResponse = &NotifyTxsConfirmationChangedResponseMessage{ + Error: err, + } + return nil +} + +func (x *NotifyTxsConfirmationChangedResponseMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "NotifyTxsConfirmationChangedResponseMessage is nil") + } + rpcErr, err := x.Error.toAppMessage() + // Error is an optional field + if err != nil && !errors.Is(err, errorNil) { + return nil, err + } + return &appmessage.NotifyTxsConfirmationChangedResponseMessage{ + Error: rpcErr, + }, nil +} + +func (x *KaspadMessage_TxsConfirmationChangedNotification) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_TxsConfirmationChangedNotification is nil") + } + return x.TxsConfirmationChangedNotification.toAppMessage() +} + +func (x *KaspadMessage_TxsConfirmationChangedNotification) fromAppMessage(message *appmessage.TxsConfirmationChangedNotificationMessage) error { + pending := make([]*RpcTxIDConfirmationsPair, len(message.Pending)) + for i, entry := range message.Pending { + pending[i] = &RpcTxIDConfirmationsPair{} + pending[i].fromAppMessage(entry) + } + + confirmed := make([]*RpcTxIDConfirmationsPair, len(message.Confirmed)) + for i, entry := range message.Confirmed { + confirmed[i] = &RpcTxIDConfirmationsPair{} + confirmed[i].fromAppMessage(entry) + } + + x.TxsConfirmationChangedNotification = &TxsConfirmationChangedNotificationMessage{ + RequiredConfirmations: message.RequiredConfirmations, + Pending: pending, + Confirmed: confirmed, + UnconfirmedTxIds: message.UnconfirmedTxIds, + } + return nil +} + +func (x *TxsConfirmationChangedNotificationMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "TxsConfirmationChangedNotificationMessage is nil") + } + pending := make([]*appmessage.TxIDConfirmationsPair, len(x.Pending)) + for i, confirmationPair := range x.Pending { + appConfirmationPair, err := confirmationPair.toAppMessage() + if err != nil { + return nil, err + } + pending[i] = appConfirmationPair + } + + confirmed := make([]*appmessage.TxIDConfirmationsPair, len(x.Confirmed)) + for i, appConfirmationPair := range x.Confirmed { + appConfirmationPair, err := appConfirmationPair.toAppMessage() + if err != nil { + return nil, err + } + confirmed[i] = appConfirmationPair + } + + return &appmessage.TxsConfirmationChangedNotificationMessage{ + RequiredConfirmations: x.RequiredConfirmations, + Pending: pending, + Confirmed: confirmed, + UnconfirmedTxIds: x.UnconfirmedTxIds, + }, nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_start_notify_addresses_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_start_notify_addresses_txs.go index e69de29bb2..b16743bce9 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_start_notify_addresses_txs.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_start_notify_addresses_txs.go @@ -0,0 +1,47 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_StartNotifyAddressesTxsRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_StartNotifyAddressesTxsRequest is nil") + } + return x.StartNotifyAddressesTxsRequest.toAppMessage() +} + +func (x *KaspadMessage_StartNotifyAddressesTxsRequest) fromAppMessage(message *appmessage.StartNotifyAddressesTxsRequestMessage) error { + x.StartNotifyAddressesTxsRequest = &StartNotifyAddressesTxsRequestMessage{ + Addresses: message.Addresses, + } + return nil +} + +func (x *StartNotifyAddressesTxsRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "StartNotifyAddressesTxsRequestMessage is nil") + } + return &appmessage.StartNotifyAddressesTxsRequestMessage{ + Addresses: x.Addresses, + }, nil +} + +func (x *KaspadMessage_StartNotifyAddressesTxsResponse) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "StartNotifyAddressesTxsResponseMessage is nil") + } + return x.StartNotifyAddressesTxsResponse.toAppMessage() +} + +func (x *KaspadMessage_StartNotifyAddressesTxsResponse) fromAppMessage(message *appmessage.StartNotifyAddressesTxsResponseMessage) error { + var err *RPCError + if message.Error != nil { + err = &RPCError{Message: message.Error.Message} + } + x.StartNotifyAddressesTxsResponse = &StartNotifytTxsConfirmationChangedResponseMessage{ + Error: err, + } + return nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_start_notify_txs_confirmation_changed.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_start_notify_txs_confirmation_changed.go index e69de29bb2..10a6718ae0 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_start_notify_txs_confirmation_changed.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_start_notify_txs_confirmation_changed.go @@ -0,0 +1,47 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_StartNotifyTxsConfirmationChangedRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_StartNotifyTxsConfirmationChangedRequest is nil") + } + return x.StartNotifyTxsConfirmationChangedRequest.toAppMessage() +} + +func (x *KaspadMessage_StartNotifyTxsConfirmationChangedRequest) fromAppMessage(message *appmessage.StartNotifyTxsConfirmationChangedRequestMessage) error { + x.StartNotifyTxsConfirmationChangedRequest = &StartNotifyTxsConfirmationChangedRequestMessage{ + TxIDs: message.TxIDs, + } + return nil +} + +func (x *StartNotifyTxsConfirmationChangedRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "StartNotifyTxsConfirmationChangedRequestMessage is nil") + } + return &appmessage.StartNotifyTxsConfirmationChangedRequestMessage{ + TxIDs: x.TxIDs, + }, nil +} + +func (x *KaspadMessage_StartNotifyTxsConfirmationChangedResponse) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "StartNotifyTxsConfirmationChangedResponseMessage is nil") + } + return x.StartNotifyTxsConfirmationChangedResponse.toAppMessage() +} + +func (x *KaspadMessage_StartNotifyTxsConfirmationChangedResponse) fromAppMessage(message *appmessage.StartNotifyTxsConfirmationChangedResponseMessage) error { + var err *RPCError + if message.Error != nil { + err = &RPCError{Message: message.Error.Message} + } + x.StartNotifyTxsConfirmationChangedResponse = &StartNotifytTxsConfirmationChangedResponseMessage{ + Error: err, + } + return nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_stop_notify_addresses_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_stop_notify_addresses_txs.go index e69de29bb2..8e3c1a0d31 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_stop_notify_addresses_txs.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_stop_notify_addresses_txs.go @@ -0,0 +1,47 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_StopNotifyAddressesTxsRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_StopNotifyAddressesTxsRequest is nil") + } + return x.StopNotifyAddressesTxsRequest.toAppMessage() +} + +func (x *KaspadMessage_StopNotifyAddressesTxsRequest) fromAppMessage(message *appmessage.StopNotifyAddressesTxsRequestMessage) error { + x.StopNotifyAddressesTxsRequest = &StopNotifyAddressesTxsRequestMessage{ + Addresses: message.Addresses, + } + return nil +} + +func (x *StopNotifyAddressesTxsRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "StopNotifyAddressesTxsRequestMessage is nil") + } + return &appmessage.StopNotifyAddressesTxsRequestMessage{ + Addresses: x.Addresses, + }, nil +} + +func (x *KaspadMessage_StopNotifyAddressesTxsResponse) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "StopNotifyAddressesTxsResponseMessage is nil") + } + return x.StopNotifyAddressesTxsResponse.toAppMessage() +} + +func (x *KaspadMessage_StopNotifyAddressesTxsResponse) fromAppMessage(message *appmessage.StopNotifyAddressesTxsResponseMessage) error { + var err *RPCError + if message.Error != nil { + err = &RPCError{Message: message.Error.Message} + } + x.StopNotifyAddressesTxsResponse = &StopNotifytTxsConfirmationChangedResponseMessage{ + Error: err, + } + return nil +} \ No newline at end of file diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_stop_notify_txs_confirmation_changed.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_stop_notify_txs_confirmation_changed.go index e69de29bb2..eab04842b9 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_stop_notify_txs_confirmation_changed.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_stop_notify_txs_confirmation_changed.go @@ -0,0 +1,47 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_StopNotifyTxsConfirmationChangedRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_StopNotifyTxsConfirmationChangedRequest is nil") + } + return x.StopNotifyTxsConfirmationChangedRequest.toAppMessage() +} + +func (x *KaspadMessage_StopNotifyTxsConfirmationChangedRequest) fromAppMessage(message *appmessage.StopNotifyTxsConfirmationChangedRequestMessage) error { + x.StopNotifyTxsConfirmationChangedRequest = &StopNotifyTxsConfirmationChangedRequestMessage{ + TxIDs: message.TxIDs, + } + return nil +} + +func (x *StopNotifyTxsConfirmationChangedRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "StopNotifyTxsConfirmationChangedRequestMessage is nil") + } + return &appmessage.StopNotifyTxsConfirmationChangedRequestMessage{ + TxIDs: x.TxIDs, + }, nil +} + +func (x *KaspadMessage_StopNotifyTxsConfirmationChangedResponse) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "StopNotifyTxsConfirmationChangedResponseMessage is nil") + } + return x.StopNotifyTxsConfirmationChangedResponse.toAppMessage() +} + +func (x *KaspadMessage_StopNotifyTxsConfirmationChangedResponse) fromAppMessage(message *appmessage.StopNotifyTxsConfirmationChangedResponseMessage) error { + var err *RPCError + if message.Error != nil { + err = &RPCError{Message: message.Error.Message} + } + x.StopNotifyTxsConfirmationChangedResponse = &StopNotifytTxsConfirmationChangedResponseMessage{ + Error: err, + } + return nil +} \ No newline at end of file From 8875d664de98ef4373aa5176a8327991559284c6 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Sun, 16 Oct 2022 11:11:34 +0200 Subject: [PATCH 36/47] downsize up rpc commands --- app/appmessage/message.go | 44 +- .../rpc_modify_notify_addresses_txs_params.go | 0 ..._notify_txs_confirmation_changed_params.go | 0 app/appmessage/rpc_notify_addresses_txs.go | 1 + .../rpc_notify_txs_confirmation_changed.go | 62 + .../rpc_start_notify_addresses_txs.go | 0 ...c_start_notify_txs_confirmation_changed.go | 0 .../rpc_stop_notify_addresses_txs.go | 0 ...pc_stop_notify_txs_confirmation_changed.go | 0 app/rpc/rpc.go | 9 - .../rpchandlers/get_accepting_block_of_tx.go | 64 - .../get_accepting_blockhash_of_tx.go | 52 - .../get_accepting_blockhashes_of_txs copy.go | 58 - .../get_accepting_blocks_of_txs.go | 68 - .../rpchandlers/get_including_block_of_tx.go | 64 - .../get_including_blockhash_of_tx.go | 52 - .../get_including_blocks_of_txs.go | 69 - app/rpc/rpchandlers/get_tx.go | 80 - app/rpc/rpchandlers/get_tx_confirmations.go | 47 - cmd/kaspactl/commands.go | 11 - .../grpcserver/protowire/messages.pb.go | 2667 +++----- .../grpcserver/protowire/messages.proto | 58 +- .../server/grpcserver/protowire/rpc.md | 429 +- .../server/grpcserver/protowire/rpc.pb.go | 5413 ++++++----------- .../server/grpcserver/protowire/rpc.proto | 168 +- .../rpc_get_accepting_block_of_tx.go | 83 - .../rpc_get_accepting_blockhash_of_tx.go | 70 - .../rpc_get_accepting_blocks_of_txs.go | 121 - .../rpc_get_including_block_of_tx.go | 83 - .../rpc_get_including_blockhash_of_tx.go | 70 - .../rpc_get_including_blockhashes_of_txs.go | 85 - .../rpc_get_including_blocks_of_txs.go | 90 - .../server/grpcserver/protowire/rpc_get_tx.go | 78 - .../protowire/rpc_get_tx_confirmations.go | 71 - .../rpc_modify_notify_addresses_txs_params.go | 53 - ..._notify_txs_confirmation_changed_params.go | 49 - .../rpc_modify_notifying_addresses_txs.go | 53 + ...dify_notifying_txs_confirmation_changed.go | 49 + .../protowire/rpc_notify_addresses_txs.go | 58 +- .../server/grpcserver/protowire/wire.go | 126 - .../rpc_get_accepting_block_of_tx.go | 20 - .../rpc_get_accepting_blockhash_of_tx.go | 20 - .../rpc_get_accepting_blocks_of_txs.go | 20 - .../rpc_get_including_block_of_tx.go | 20 - .../rpc_get_including_blockhash_of_tx.go | 20 - .../rpc_get_including_blockhashes_of_txs.go | 20 - .../rpc_get_including_blocks_of_txs.go | 20 - .../network/rpcclient/rpc_get_tx.go | 20 - .../rpcclient/rpc_get_tx_confirmations.go | 20 - 49 files changed, 3114 insertions(+), 7621 deletions(-) create mode 100644 app/appmessage/rpc_modify_notify_addresses_txs_params.go create mode 100644 app/appmessage/rpc_modify_notify_txs_confirmation_changed_params.go create mode 100644 app/appmessage/rpc_notify_addresses_txs.go create mode 100644 app/appmessage/rpc_notify_txs_confirmation_changed.go rename {infrastructure/network/netadapter/server/grpcserver/protowire => app/appmessage}/rpc_start_notify_addresses_txs.go (100%) rename {infrastructure/network/netadapter/server/grpcserver/protowire => app/appmessage}/rpc_start_notify_txs_confirmation_changed.go (100%) rename {infrastructure/network/netadapter/server/grpcserver/protowire => app/appmessage}/rpc_stop_notify_addresses_txs.go (100%) rename {infrastructure/network/netadapter/server/grpcserver/protowire => app/appmessage}/rpc_stop_notify_txs_confirmation_changed.go (100%) delete mode 100644 app/rpc/rpchandlers/get_accepting_block_of_tx.go delete mode 100644 app/rpc/rpchandlers/get_accepting_blockhash_of_tx.go delete mode 100644 app/rpc/rpchandlers/get_accepting_blockhashes_of_txs copy.go delete mode 100644 app/rpc/rpchandlers/get_accepting_blocks_of_txs.go delete mode 100644 app/rpc/rpchandlers/get_including_block_of_tx.go delete mode 100644 app/rpc/rpchandlers/get_including_blockhash_of_tx.go delete mode 100644 app/rpc/rpchandlers/get_including_blocks_of_txs.go delete mode 100644 app/rpc/rpchandlers/get_tx.go delete mode 100644 app/rpc/rpchandlers/get_tx_confirmations.go delete mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_block_of_tx.go delete mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blockhash_of_tx.go delete mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blocks_of_txs.go delete mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_block_of_tx.go delete mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blockhash_of_tx.go delete mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blockhashes_of_txs.go delete mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blocks_of_txs.go delete mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx.go delete mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx_confirmations.go delete mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notify_addresses_txs_params.go delete mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notify_txs_confirmation_changed_params.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_addresses_txs.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_txs_confirmation_changed.go delete mode 100644 infrastructure/network/rpcclient/rpc_get_accepting_block_of_tx.go delete mode 100644 infrastructure/network/rpcclient/rpc_get_accepting_blockhash_of_tx.go delete mode 100644 infrastructure/network/rpcclient/rpc_get_accepting_blocks_of_txs.go delete mode 100644 infrastructure/network/rpcclient/rpc_get_including_block_of_tx.go delete mode 100644 infrastructure/network/rpcclient/rpc_get_including_blockhash_of_tx.go delete mode 100644 infrastructure/network/rpcclient/rpc_get_including_blockhashes_of_txs.go delete mode 100644 infrastructure/network/rpcclient/rpc_get_including_blocks_of_txs.go delete mode 100644 infrastructure/network/rpcclient/rpc_get_tx.go delete mode 100644 infrastructure/network/rpcclient/rpc_get_tx_confirmations.go diff --git a/app/appmessage/message.go b/app/appmessage/message.go index c227ff7c03..bad7336ba2 100644 --- a/app/appmessage/message.go +++ b/app/appmessage/message.go @@ -163,30 +163,20 @@ const ( CmdGetMempoolEntriesByAddressesResponseMessage CmdGetCoinSupplyRequestMessage CmdGetCoinSupplyResponseMessage - CmdGetAcceptingBlockHashOfTxRequestMessage - CmdGetAcceptingBlockHashOfTxResponseMessage CmdGetAcceptingBlockHashesOfTxsRequestMessage CmdGetAcceptingBlockHashesOfTxsResponseMessage - CmdGetAcceptingBlockOfTxRequestMessage - CmdGetAcceptingBlockOfTxResponseMessage - CmdGetAcceptingBlocksOfTxsRequestMessage - CmdGetAcceptingBlocksOfTxsResponseMessage - CmdGetIncludingBlockHashOfTxRequestMessage - CmdGetIncludingBlockHashOfTxResponseMessage - CmdGetIncludingBlockHashesOfTxsRequestMessage - CmdGetIncludingBlockHashesOfTxsResponseMessage - CmdGetIncludingBlockOfTxRequestMessage - CmdGetIncludingBlockOfTxResponseMessage - CmdGetIncludingBlocksOfTxsRequestMessage - CmdGetIncludingBlocksOfTxsResponseMessage - CmdGetTxRequestMessage - CmdGetTxResponseMessage CmdGetTxsRequestMessage CmdGetTxsResponseMessage - CmdGetTxConfirmationsRequestMessage - CmdGetTxConfirmationsResponseMessage CmdGetTxsConfirmationsRequestMessage CmdGetTxsConfirmationsResponseMessage + CmdNotifyTxsConfirmationChangedRequestMessage + CmdNotifyTxsConfirmationChangedResponseMessage + CmdStartNotifyingTxsConfirmationChangedRequestMessage + CmdStartNotifyingTxsConfirmationChangedResponseMessage + CmdStopNotifyingTxsConfirmationChangedRequestMessage + CmdStopNotifyingTxsConfirmationChangedResponseMessage + CmdModifyNotifyTxsConfirmationChangedParamsRequestMessage + CmdModifyNotifyTxsConfirmationChangedParamsResponseMessage ) // ProtocolMessageCommandToString maps all MessageCommands to their string representation @@ -324,28 +314,10 @@ var RPCMessageCommandToString = map[MessageCommand]string{ CmdGetMempoolEntriesByAddressesResponseMessage: "GetMempoolEntriesByAddressesResponse", CmdGetCoinSupplyRequestMessage: "GetCoinSupplyRequest", CmdGetCoinSupplyResponseMessage: "GetCoinSupplyResponse", - CmdGetAcceptingBlockHashOfTxRequestMessage: "GetAcceptingBlockHashOfTxRequest", - CmdGetAcceptingBlockHashOfTxResponseMessage: "GetAcceptingBlockHashOfTxResponse", CmdGetAcceptingBlockHashesOfTxsRequestMessage: "GetAcceptingBlockHashesOfTxsRequest", CmdGetAcceptingBlockHashesOfTxsResponseMessage: "GetAcceptingBlockHashesOfTxsResponse", - CmdGetAcceptingBlockOfTxRequestMessage: "GetAcceptingBlockOfTxRequest", - CmdGetAcceptingBlockOfTxResponseMessage: "GetAcceptingBlockOfTxResponse", - CmdGetAcceptingBlocksOfTxsRequestMessage: "GetAcceptingBlocksOfTxsRequest", - CmdGetAcceptingBlocksOfTxsResponseMessage: "GetAcceptingBlocksOfTxsResponse", - CmdGetIncludingBlockHashOfTxRequestMessage: "GetIncludingBlockHashOfTxRequest", - CmdGetIncludingBlockHashOfTxResponseMessage: "GetIncludingBlockHashOfTxResponse", - CmdGetIncludingBlockHashesOfTxsRequestMessage: "GetIncludingBlockHashesOfTxsRequest", - CmdGetIncludingBlockHashesOfTxsResponseMessage: "GetIncludingBlockHashesOfTxsResponse", - CmdGetIncludingBlockOfTxRequestMessage: "GetIncludingBlockOfTxRequest", - CmdGetIncludingBlockOfTxResponseMessage: "GetIncludingBlockOfTxResponse", - CmdGetIncludingBlocksOfTxsRequestMessage: "GetIncludingBlocksOfTxsRequest", - CmdGetIncludingBlocksOfTxsResponseMessage: "GetIncludingBlocksOfTxsResponse", - CmdGetTxRequestMessage: "GetTxRequest", - CmdGetTxResponseMessage: "GetTxResponse", CmdGetTxsRequestMessage: "GetTxsRequest", CmdGetTxsResponseMessage: "GetTxsResponse", - CmdGetTxConfirmationsRequestMessage: "GetTxConfirmationsRequest", - CmdGetTxConfirmationsResponseMessage: "GetTxConfirmationsResponse", CmdGetTxsConfirmationsRequestMessage: "GetTxsConfirmationsRequest", CmdGetTxsConfirmationsResponseMessage: "GetTxsConfirmationsResponse", } diff --git a/app/appmessage/rpc_modify_notify_addresses_txs_params.go b/app/appmessage/rpc_modify_notify_addresses_txs_params.go new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/appmessage/rpc_modify_notify_txs_confirmation_changed_params.go b/app/appmessage/rpc_modify_notify_txs_confirmation_changed_params.go new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/appmessage/rpc_notify_addresses_txs.go b/app/appmessage/rpc_notify_addresses_txs.go new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/app/appmessage/rpc_notify_addresses_txs.go @@ -0,0 +1 @@ + diff --git a/app/appmessage/rpc_notify_txs_confirmation_changed.go b/app/appmessage/rpc_notify_txs_confirmation_changed.go new file mode 100644 index 0000000000..f777fa400c --- /dev/null +++ b/app/appmessage/rpc_notify_txs_confirmation_changed.go @@ -0,0 +1,62 @@ +package appmessage + +// NotifyUTXOsChangedRequestMessage is an appmessage corresponding to +// its respective RPC message +type NotifyTxsConfirmationChangedRequstMessage struct { + baseMessage + Addresses []string +} + +// Command returns the protocol command string for the message +func (msg *NotifyUTXOsChangedRequestMessage) Command() MessageCommand { + return CmdNotifyUTXOsChangedRequestMessage +} + +// NewNotifyUTXOsChangedRequestMessage returns a instance of the message +func NewNotifyUTXOsChangedRequestMessage(addresses []string) *NotifyUTXOsChangedRequestMessage { + return &NotifyUTXOsChangedRequestMessage{ + Addresses: addresses, + } +} + +// NotifyUTXOsChangedResponseMessage is an appmessage corresponding to +// its respective RPC message +type NotifyUTXOsChangedResponseMessage struct { + baseMessage + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *NotifyUTXOsChangedResponseMessage) Command() MessageCommand { + return CmdNotifyUTXOsChangedResponseMessage +} + +// NewNotifyUTXOsChangedResponseMessage returns a instance of the message +func NewNotifyTXChangedResponseMessage() *NotifyUTXOsChangedResponseMessage { + return &NotifyUTXOsChangedResponseMessage{} +} + +// UTXOsChangedNotificationMessage is an appmessage corresponding to +// its respective RPC message +type UTXOsChangedNotificationMessage struct { + baseMessage + Added []*UTXOsByAddressesEntry + Removed []*UTXOsByAddressesEntry +} + +// UTXOsByAddressesEntry represents a UTXO of some address +type UTXOsByAddressesEntry struct { + Address string + Outpoint *RPCOutpoint + UTXOEntry *RPCUTXOEntry +} + +// Command returns the protocol command string for the message +func (msg *UTXOsChangedNotificationMessage) Command() MessageCommand { + return CmdUTXOsChangedNotificationMessage +} + +// NewUTXOsChangedNotificationMessage returns a instance of the message +func NewUTXOsChangedNotificationMessage() *UTXOsChangedNotificationMessage { + return &UTXOsChangedNotificationMessage{} +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_start_notify_addresses_txs.go b/app/appmessage/rpc_start_notify_addresses_txs.go similarity index 100% rename from infrastructure/network/netadapter/server/grpcserver/protowire/rpc_start_notify_addresses_txs.go rename to app/appmessage/rpc_start_notify_addresses_txs.go diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_start_notify_txs_confirmation_changed.go b/app/appmessage/rpc_start_notify_txs_confirmation_changed.go similarity index 100% rename from infrastructure/network/netadapter/server/grpcserver/protowire/rpc_start_notify_txs_confirmation_changed.go rename to app/appmessage/rpc_start_notify_txs_confirmation_changed.go diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_stop_notify_addresses_txs.go b/app/appmessage/rpc_stop_notify_addresses_txs.go similarity index 100% rename from infrastructure/network/netadapter/server/grpcserver/protowire/rpc_stop_notify_addresses_txs.go rename to app/appmessage/rpc_stop_notify_addresses_txs.go diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_stop_notify_txs_confirmation_changed.go b/app/appmessage/rpc_stop_notify_txs_confirmation_changed.go similarity index 100% rename from infrastructure/network/netadapter/server/grpcserver/protowire/rpc_stop_notify_txs_confirmation_changed.go rename to app/appmessage/rpc_stop_notify_txs_confirmation_changed.go diff --git a/app/rpc/rpc.go b/app/rpc/rpc.go index 3e65877beb..77cb2253a7 100644 --- a/app/rpc/rpc.go +++ b/app/rpc/rpc.go @@ -51,17 +51,8 @@ var handlers = map[appmessage.MessageCommand]handler{ appmessage.CmdNotifyNewBlockTemplateRequestMessage: rpchandlers.HandleNotifyNewBlockTemplate, appmessage.CmdGetCoinSupplyRequestMessage: rpchandlers.HandleGetCoinSupply, appmessage.CmdGetMempoolEntriesByAddressesRequestMessage: rpchandlers.HandleGetMempoolEntriesByAddresses, - appmessage.CmdGetAcceptingBlockHashOfTxRequestMessage: rpchandlers.HandleGetAcceptingBlockHashOfTx, appmessage.CmdGetAcceptingBlockHashesOfTxsRequestMessage: rpchandlers.HandleGetAcceptingBlockHashesOfTxs, - appmessage.CmdGetAcceptingBlockOfTxRequestMessage: rpchandlers.HandleGetAcceptingBlockOfTx, - appmessage.CmdGetAcceptingBlocksOfTxsRequestMessage: rpchandlers.HandleGetAcceptingBlocksOfTxs, - appmessage.CmdGetIncludingBlockHashOfTxRequestMessage: rpchandlers.HandleGetIncludingBlockHashOfTx, - appmessage.CmdGetIncludingBlockHashesOfTxsRequestMessage: rpchandlers.HandleGetIncludingBlockHashesOfTxs, - appmessage.CmdGetIncludingBlockOfTxRequestMessage: rpchandlers.HandleGetIncludingBlockOfTx, - appmessage.CmdGetIncludingBlocksOfTxsRequestMessage: rpchandlers.HandleGetIncludingBlocksOfTxs, - appmessage.CmdGetTxRequestMessage: rpchandlers.HandleGetTx, appmessage.CmdGetTxsRequestMessage: rpchandlers.HandleGetTxs, - appmessage.CmdGetTxConfirmationsRequestMessage: rpchandlers.HandleGetTxConfirmations, appmessage.CmdGetTxsConfirmationsRequestMessage: rpchandlers.HandleGetTxsConfirmations, } diff --git a/app/rpc/rpchandlers/get_accepting_block_of_tx.go b/app/rpc/rpchandlers/get_accepting_block_of_tx.go deleted file mode 100644 index 577c1ebb84..0000000000 --- a/app/rpc/rpchandlers/get_accepting_block_of_tx.go +++ /dev/null @@ -1,64 +0,0 @@ -package rpchandlers - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/kaspanet/kaspad/app/rpc/rpccontext" - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" - "github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing" - "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" - - "github.com/pkg/errors" -) - -// HandleGetAcceptingBlockOfTx handles the respectively named RPC command -func HandleGetAcceptingBlockOfTx(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { - if !context.Config.TXIndex { - errorMessage := &appmessage.GetAcceptingBlockHashOfTxResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") - return errorMessage, nil - } - - getAcceptingBlockOfTxRequest := request.(*appmessage.GetAcceptingBlockOfTxRequestMessage) - - domainTxID, err := externalapi.NewDomainTransactionIDFromString(getAcceptingBlockOfTxRequest.TxID) - if err != nil { - rpcError := &appmessage.RPCError{} - if !errors.As(err, &rpcError) { - return nil, err - } - errorMessage := &appmessage.GetAcceptingBlockOfTxResponseMessage{} - errorMessage.Error = rpcError - return errorMessage, nil - } - - acceptingBlock, found, err := context.TXIndex.TXAcceptingBlock(domainTxID) - if err != nil { - rpcError := &appmessage.RPCError{} - if !errors.As(err, &rpcError) { - return nil, err - } - errorMessage := &appmessage.GetAcceptingBlockOfTxResponseMessage{} - errorMessage.Error = rpcError - return errorMessage, nil - } - if !found { - errorMessage := &appmessage.GetAcceptingBlockOfTxResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Could not find accepting block in the txindex database for txID: %s", domainTxID.String()) - return errorMessage, nil - } - - rpcAcceptingBlock := appmessage.DomainBlockToRPCBlock(acceptingBlock) - err = context.PopulateBlockWithVerboseData(rpcAcceptingBlock, acceptingBlock.Header, acceptingBlock, getAcceptingBlockOfTxRequest.IncludeTransactions) - if err != nil { - if errors.Is(err, rpccontext.ErrBuildBlockVerboseDataInvalidBlock) { - errorMessage := &appmessage.GetAcceptingBlockOfTxResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Block %s is invalid", consensushashing.BlockHash(acceptingBlock).String()) - return errorMessage, nil - } - return nil, err - } - - response := appmessage.NewGetAcceptingBlockOfTxResponse(rpcAcceptingBlock) - - return response, nil -} diff --git a/app/rpc/rpchandlers/get_accepting_blockhash_of_tx.go b/app/rpc/rpchandlers/get_accepting_blockhash_of_tx.go deleted file mode 100644 index f9497f3422..0000000000 --- a/app/rpc/rpchandlers/get_accepting_blockhash_of_tx.go +++ /dev/null @@ -1,52 +0,0 @@ -package rpchandlers - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/kaspanet/kaspad/app/rpc/rpccontext" - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" - "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" - - "github.com/pkg/errors" -) - -// HandleGetAcceptingBlockHashOfTx handles the respectively named RPC command -func HandleGetAcceptingBlockHashOfTx(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { - if !context.Config.TXIndex { - errorMessage := &appmessage.GetAcceptingBlockHashOfTxResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") - return errorMessage, nil - } - - getAcceptingBlockHashOfTxRequest := request.(*appmessage.GetAcceptingBlockHashOfTxRequestMessage) - - domainTxID, err := externalapi.NewDomainTransactionIDFromString(getAcceptingBlockHashOfTxRequest.TxID) - if err != nil { - rpcError := &appmessage.RPCError{} - if !errors.As(err, &rpcError) { - return nil, err - } - errorMessage := &appmessage.GetAcceptingBlockHashOfTxResponseMessage{} - errorMessage.Error = rpcError - return errorMessage, nil - } - - acceptingBlockHash, found, err := context.TXIndex.TXAcceptingBlockHash(domainTxID) - if err != nil { - rpcError := &appmessage.RPCError{} - if !errors.As(err, &rpcError) { - return nil, err - } - errorMessage := &appmessage.GetAcceptingBlockHashOfTxResponseMessage{} - errorMessage.Error = rpcError - return errorMessage, nil - } - if !found { - errorMessage := &appmessage.GetAcceptingBlockHashOfTxResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Could not find accepting block hash in the txindex database for txID: %s", domainTxID.String()) - return errorMessage, nil - } - - response := appmessage.NewGetAcceptingBlockHashOfTxResponse(acceptingBlockHash.String()) - - return response, nil -} diff --git a/app/rpc/rpchandlers/get_accepting_blockhashes_of_txs copy.go b/app/rpc/rpchandlers/get_accepting_blockhashes_of_txs copy.go deleted file mode 100644 index 1523e5659a..0000000000 --- a/app/rpc/rpchandlers/get_accepting_blockhashes_of_txs copy.go +++ /dev/null @@ -1,58 +0,0 @@ -package rpchandlers - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/kaspanet/kaspad/app/rpc/rpccontext" - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" - "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" - - "github.com/pkg/errors" -) - -// HandleGetIncludingBlockHashesOfTxs handles the respectively named RPC command -func HandleGetIncludingBlockHashesOfTxs(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { - var err error - - if !context.Config.TXIndex { - errorMessage := &appmessage.GetIncludingBlockHashesOfTxsResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") - return errorMessage, nil - } - - getIncludingBlockHashesOfTxsRequest := request.(*appmessage.GetIncludingBlockHashesOfTxsRequestMessage) - - domainTxIDs := make([]*externalapi.DomainTransactionID, len(getIncludingBlockHashesOfTxsRequest.TxIDs)) - for i := range domainTxIDs { - domainTxIDs[i], err = externalapi.NewDomainTransactionIDFromString(getIncludingBlockHashesOfTxsRequest.TxIDs[i]) - if err != nil { - errorMessage := &appmessage.GetIncludingBlockHashesOfTxsResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("error parsing txID: %s", getIncludingBlockHashesOfTxsRequest.TxIDs[i]) - return errorMessage, nil - } - } - - includingBlockHashes, _, err := context.TXIndex.TXIncludingBlockHashes(domainTxIDs) - if err != nil { - rpcError := &appmessage.RPCError{} - if !errors.As(err, &rpcError) { - return nil, err - } - errorMessage := &appmessage.GetIncludingBlockHashesOfTxsResponseMessage{} - errorMessage.Error = rpcError - return errorMessage, nil - } - - txIDBlockHashpairs := make([]*appmessage.TxIDBlockHashPair, len(includingBlockHashes)) - i := 0 - for txID, blockHash := range includingBlockHashes { - txIDBlockHashpairs[i] = &appmessage.TxIDBlockHashPair{ - TxID: txID.String(), - Hash: blockHash.String(), - } - i++ - } - - response := appmessage.NewGetIncludingBlockHashesOfTxsResponse(txIDBlockHashpairs) - - return response, nil -} diff --git a/app/rpc/rpchandlers/get_accepting_blocks_of_txs.go b/app/rpc/rpchandlers/get_accepting_blocks_of_txs.go deleted file mode 100644 index 02bd41bafe..0000000000 --- a/app/rpc/rpchandlers/get_accepting_blocks_of_txs.go +++ /dev/null @@ -1,68 +0,0 @@ -package rpchandlers - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/kaspanet/kaspad/app/rpc/rpccontext" - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" - "github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing" - "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" - - "github.com/pkg/errors" -) - -// HandleGetAcceptingBlocksOfTxs handles the respectively named RPC command -func HandleGetAcceptingBlocksOfTxs(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { - var err error - - if !context.Config.TXIndex { - errorMessage := &appmessage.GetAcceptingBlocksOfTxsResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") - return errorMessage, nil - } - - getAcceptingBlocksOfTxsRequest := request.(*appmessage.GetAcceptingBlocksOfTxsRequestMessage) - - domainTxIDs := make([]*externalapi.DomainTransactionID, len(getAcceptingBlocksOfTxsRequest.TxIDs)) - for i := range domainTxIDs { - domainTxIDs[i], err = externalapi.NewDomainTransactionIDFromString(getAcceptingBlocksOfTxsRequest.TxIDs[i]) - if err != nil { - errorMessage := &appmessage.GetAcceptingBlocksOfTxsResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("error parsing txID: %s, %s", getAcceptingBlocksOfTxsRequest.TxIDs[i], err.Error()) - return errorMessage, nil - } - } - acceptingBlockHashes, _, err := context.TXIndex.TXAcceptingBlocks(domainTxIDs) - if err != nil { - rpcError := &appmessage.RPCError{} - if !errors.As(err, &rpcError) { - return nil, err - } - errorMessage := &appmessage.GetAcceptingBlocksOfTxsResponseMessage{} - errorMessage.Error = rpcError - return errorMessage, nil - } - - txIDBlockPairs := make([]*appmessage.TxIDBlockPair, len(acceptingBlockHashes)) - i := 0 - for txID, acceptingBlock := range acceptingBlockHashes { - rpcAcceptingBlock := appmessage.DomainBlockToRPCBlock(acceptingBlock) - err = context.PopulateBlockWithVerboseData(rpcAcceptingBlock, acceptingBlock.Header, acceptingBlock, getAcceptingBlocksOfTxsRequest.IncludeTransactions) - if err != nil { - if errors.Is(err, rpccontext.ErrBuildBlockVerboseDataInvalidBlock) { - errorMessage := &appmessage.GetAcceptingBlockOfTxResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Block %s is invalid", consensushashing.BlockHash(acceptingBlock).String()) - return errorMessage, nil - } - return nil, err - } - txIDBlockPairs[i] = &appmessage.TxIDBlockPair{ - TxID: txID.String(), - Block: rpcAcceptingBlock, - } - i++ - } - - response := appmessage.NewGetAcceptingBlocksOfTxsResponse(txIDBlockPairs) - - return response, nil -} diff --git a/app/rpc/rpchandlers/get_including_block_of_tx.go b/app/rpc/rpchandlers/get_including_block_of_tx.go deleted file mode 100644 index c43d7e00c8..0000000000 --- a/app/rpc/rpchandlers/get_including_block_of_tx.go +++ /dev/null @@ -1,64 +0,0 @@ -package rpchandlers - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/kaspanet/kaspad/app/rpc/rpccontext" - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" - "github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing" - "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" - - "github.com/pkg/errors" -) - -// HandleGetIncludingBlockOfTx handles the respectively named RPC command -func HandleGetIncludingBlockOfTx(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { - if !context.Config.TXIndex { - errorMessage := &appmessage.GetIncludingBlockHashOfTxResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") - return errorMessage, nil - } - - getIncludingBlockOfTxRequest := request.(*appmessage.GetIncludingBlockOfTxRequestMessage) - - domainTxID, err := externalapi.NewDomainTransactionIDFromString(getIncludingBlockOfTxRequest.TxID) - if err != nil { - rpcError := &appmessage.RPCError{} - if !errors.As(err, &rpcError) { - return nil, err - } - errorMessage := &appmessage.GetIncludingBlockOfTxResponseMessage{} - errorMessage.Error = rpcError - return errorMessage, nil - } - - includingBlock, found, err := context.TXIndex.TXIncludingBlock(domainTxID) - if err != nil { - rpcError := &appmessage.RPCError{} - if !errors.As(err, &rpcError) { - return nil, err - } - errorMessage := &appmessage.GetIncludingBlockOfTxResponseMessage{} - errorMessage.Error = rpcError - return errorMessage, nil - } - if !found { - errorMessage := &appmessage.GetIncludingBlockOfTxResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Could not find including block in the txindex database for txID: %s", domainTxID.String()) - return errorMessage, nil - } - - rpcIncludingBlock := appmessage.DomainBlockToRPCBlock(includingBlock) - err = context.PopulateBlockWithVerboseData(rpcIncludingBlock, includingBlock.Header, includingBlock, getIncludingBlockOfTxRequest.IncludeTransactions) - if err != nil { - if errors.Is(err, rpccontext.ErrBuildBlockVerboseDataInvalidBlock) { - errorMessage := &appmessage.GetIncludingBlockOfTxResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Block %s is invalid", consensushashing.BlockHash(includingBlock).String()) - return errorMessage, nil - } - return nil, err - } - - response := appmessage.NewGetIncludingBlockOfTxResponse(rpcIncludingBlock) - - return response, nil -} diff --git a/app/rpc/rpchandlers/get_including_blockhash_of_tx.go b/app/rpc/rpchandlers/get_including_blockhash_of_tx.go deleted file mode 100644 index c6a6fdd5ab..0000000000 --- a/app/rpc/rpchandlers/get_including_blockhash_of_tx.go +++ /dev/null @@ -1,52 +0,0 @@ -package rpchandlers - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/kaspanet/kaspad/app/rpc/rpccontext" - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" - "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" - - "github.com/pkg/errors" -) - -// HandleGetIncludingBlockHashOfTx handles the respectively named RPC command -func HandleGetIncludingBlockHashOfTx(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { - if !context.Config.TXIndex { - errorMessage := &appmessage.GetIncludingBlockHashOfTxResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") - return errorMessage, nil - } - - getIncludingBlockHashOfTxRequest := request.(*appmessage.GetIncludingBlockHashOfTxRequestMessage) - - domainTxID, err := externalapi.NewDomainTransactionIDFromString(getIncludingBlockHashOfTxRequest.TxID) - if err != nil { - rpcError := &appmessage.RPCError{} - if !errors.As(err, &rpcError) { - return nil, err - } - errorMessage := &appmessage.GetIncludingBlockHashOfTxResponseMessage{} - errorMessage.Error = rpcError - return errorMessage, nil - } - - includingBlockHash, found, err := context.TXIndex.TXIncludingBlockHash(domainTxID) - if err != nil { - rpcError := &appmessage.RPCError{} - if !errors.As(err, &rpcError) { - return nil, err - } - errorMessage := &appmessage.GetIncludingBlockHashOfTxResponseMessage{} - errorMessage.Error = rpcError - return errorMessage, nil - } - if !found { - errorMessage := &appmessage.GetIncludingBlockHashOfTxResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Could not find including block hash in the txindex database for txID: %s", domainTxID.String()) - return errorMessage, nil - } - - response := appmessage.NewGetIncludingBlockHashOfTxResponse(includingBlockHash.String()) - - return response, nil -} diff --git a/app/rpc/rpchandlers/get_including_blocks_of_txs.go b/app/rpc/rpchandlers/get_including_blocks_of_txs.go deleted file mode 100644 index 6d867925b6..0000000000 --- a/app/rpc/rpchandlers/get_including_blocks_of_txs.go +++ /dev/null @@ -1,69 +0,0 @@ -package rpchandlers - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/kaspanet/kaspad/app/rpc/rpccontext" - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" - "github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing" - "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" - - "github.com/pkg/errors" -) - -// HandleGetIncludingBlocksOfTxs handles the respectively named RPC command -func HandleGetIncludingBlocksOfTxs(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { - var err error - - if !context.Config.TXIndex { - errorMessage := &appmessage.GetIncludingBlocksOfTxsResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") - return errorMessage, nil - } - - getIncludingBlocksOfTxsRequest := request.(*appmessage.GetIncludingBlocksOfTxsRequestMessage) - - domainTxIDs := make([]*externalapi.DomainTransactionID, len(getIncludingBlocksOfTxsRequest.TxIDs)) - for i := range domainTxIDs { - domainTxIDs[i], err = externalapi.NewDomainTransactionIDFromString(getIncludingBlocksOfTxsRequest.TxIDs[i]) - if err != nil { - errorMessage := &appmessage.GetIncludingBlocksOfTxsResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("error parsing txID: %s, %s", getIncludingBlocksOfTxsRequest.TxIDs[i], err.Error()) - return errorMessage, nil - } - } - - includingBlockHashes, _, err := context.TXIndex.TXIncludingBlocks(domainTxIDs) - if err != nil { - rpcError := &appmessage.RPCError{} - if !errors.As(err, &rpcError) { - return nil, err - } - errorMessage := &appmessage.GetIncludingBlocksOfTxsResponseMessage{} - errorMessage.Error = rpcError - return errorMessage, nil - } - - txIDBlockPairs := make([]*appmessage.TxIDBlockPair, len(includingBlockHashes)) - i := 0 - for txID, includingBlock := range includingBlockHashes { - rpcIncludingBlock := appmessage.DomainBlockToRPCBlock(includingBlock) - err = context.PopulateBlockWithVerboseData(rpcIncludingBlock, includingBlock.Header, includingBlock, getIncludingBlocksOfTxsRequest.IncludeTransactions) - if err != nil { - if errors.Is(err, rpccontext.ErrBuildBlockVerboseDataInvalidBlock) { - errorMessage := &appmessage.GetIncludingBlockOfTxResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Block %s is invalid", consensushashing.BlockHash(includingBlock).String()) - return errorMessage, nil - } - return nil, err - } - txIDBlockPairs[i] = &appmessage.TxIDBlockPair{ - TxID: txID.String(), - Block: rpcIncludingBlock, - } - i++ - } - - response := appmessage.NewGetIncludingBlocksOfTxsResponse(txIDBlockPairs) - - return response, nil -} diff --git a/app/rpc/rpchandlers/get_tx.go b/app/rpc/rpchandlers/get_tx.go deleted file mode 100644 index 84d2a6d6ef..0000000000 --- a/app/rpc/rpchandlers/get_tx.go +++ /dev/null @@ -1,80 +0,0 @@ -package rpchandlers - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/kaspanet/kaspad/app/rpc/rpccontext" - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" - "github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing" - "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" - - "github.com/pkg/errors" -) - -// HandleGetTx handles the respectively named RPC command -func HandleGetTx(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { - if !context.Config.TXIndex { - errorMessage := &appmessage.GetTxResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") - return errorMessage, nil - } - - getTxRequest := request.(*appmessage.GetTxRequestMessage) - - domainTxID, err := externalapi.NewDomainTransactionIDFromString(getTxRequest.TxID) - if err != nil { - rpcError := &appmessage.RPCError{} - if !errors.As(err, &rpcError) { - return nil, err - } - errorMessage := &appmessage.GetTxResponseMessage{} - errorMessage.Error = rpcError - return errorMessage, nil - } - - transaction, found, err := context.TXIndex.GetTX(domainTxID) - if err != nil { - rpcError := &appmessage.RPCError{} - if !errors.As(err, &rpcError) { - return nil, err - } - errorMessage := &appmessage.GetTxResponseMessage{} - errorMessage.Error = rpcError - return errorMessage, nil - } - if !found { - errorMessage := &appmessage.GetTxResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Could not find tx in the txindex database for txID: %s", domainTxID.String()) - return errorMessage, nil - } - - blockForVerboseData, found, err := context.TXIndex.TXAcceptingBlock(domainTxID) - if err != nil { - rpcError := &appmessage.RPCError{} - if !errors.As(err, &rpcError) { - return nil, err - } - errorMessage := &appmessage.GetTxResponseMessage{} - errorMessage.Error = rpcError - return errorMessage, nil - } - if !found { - errorMessage := &appmessage.GetTxResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Could not find accepting block in the txindex database for txID: %s", domainTxID.String()) - return errorMessage, nil - } - - rpcTransaction := appmessage.DomainTransactionToRPCTransaction(transaction) - err = context.PopulateTransactionWithVerboseData(rpcTransaction, blockForVerboseData.Header) - if err != nil { - if errors.Is(err, rpccontext.ErrBuildBlockVerboseDataInvalidBlock) { - errorMessage := &appmessage.GetTxResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Block %s is invalid", consensushashing.BlockHash(blockForVerboseData).String()) - return errorMessage, nil - } - return nil, err - } - - response := appmessage.NewGetTxResponse(rpcTransaction) - - return response, nil -} diff --git a/app/rpc/rpchandlers/get_tx_confirmations.go b/app/rpc/rpchandlers/get_tx_confirmations.go deleted file mode 100644 index 48348a0085..0000000000 --- a/app/rpc/rpchandlers/get_tx_confirmations.go +++ /dev/null @@ -1,47 +0,0 @@ -package rpchandlers - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/kaspanet/kaspad/app/rpc/rpccontext" - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" - "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" - - "github.com/pkg/errors" -) - -// HandleGetTxConfirmations handles the respectively named RPC command -func HandleGetTxConfirmations(context *rpccontext.Context, _ *router.Router, request appmessage.Message) (appmessage.Message, error) { - if !context.Config.TXIndex { - errorMessage := &appmessage.GetTxConfirmationsResponseMessage{} - errorMessage.Error = appmessage.RPCErrorf("Method unavailable when kaspad is run without --txindex") - return errorMessage, nil - } - - getTxConfirmationsRequest := request.(*appmessage.GetTxConfirmationsRequestMessage) - - domainTxID, err := externalapi.NewDomainTransactionIDFromString(getTxConfirmationsRequest.TxID) - if err != nil { - rpcError := &appmessage.RPCError{} - if !errors.As(err, &rpcError) { - return nil, err - } - errorMessage := &appmessage.GetTxConfirmationsResponseMessage{} - errorMessage.Error = rpcError - return errorMessage, nil - } - - confirmations, _, err := context.TXIndex.GetTXConfirmations(domainTxID) - if err != nil { - rpcError := &appmessage.RPCError{} - if !errors.As(err, &rpcError) { - return nil, err - } - errorMessage := &appmessage.GetTxConfirmationsResponseMessage{} - errorMessage.Error = rpcError - return errorMessage, nil - } - - response := appmessage.NewGetTxConfirmationsResponse(confirmations) - - return response, nil -} diff --git a/cmd/kaspactl/commands.go b/cmd/kaspactl/commands.go index c18810f87b..cce13cbbed 100644 --- a/cmd/kaspactl/commands.go +++ b/cmd/kaspactl/commands.go @@ -15,19 +15,8 @@ var commandTypes = []reflect.Type{ reflect.TypeOf(protowire.KaspadMessage_GetCurrentNetworkRequest{}), reflect.TypeOf(protowire.KaspadMessage_GetInfoRequest{}), - reflect.TypeOf(protowire.KaspadMessage_GetAcceptingBlockHashOfTxRequest{}), reflect.TypeOf(protowire.KaspadMessage_GetAcceptingBlockHashesOfTxsRequest{}), - reflect.TypeOf(protowire.KaspadMessage_GetAcceptingBlockOfTxRequest{}), - reflect.TypeOf(protowire.KaspadMessage_GetAcceptingBlocksOfTxsRequest{}), - - reflect.TypeOf(protowire.KaspadMessage_GetIncludingBlockHashOfTxRequest{}), - reflect.TypeOf(protowire.KaspadMessage_GetIncludingBlockHashesOfTxsRequest{}), - reflect.TypeOf(protowire.KaspadMessage_GetIncludingBlockOfTxRequest{}), - reflect.TypeOf(protowire.KaspadMessage_GetIncludingBlocksOfTxsRequest{}), - - reflect.TypeOf(protowire.KaspadMessage_GetTxRequest{}), reflect.TypeOf(protowire.KaspadMessage_GetTxsRequest{}), - reflect.TypeOf(protowire.KaspadMessage_GetTxConfirmationsRequest{}), reflect.TypeOf(protowire.KaspadMessage_GetTxsConfirmationsRequest{}), reflect.TypeOf(protowire.KaspadMessage_GetBlockRequest{}), diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go index fcb35dd456..2ff98481f2 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go @@ -156,47 +156,21 @@ type KaspadMessage struct { // *KaspadMessage_GetMempoolEntriesByAddressesResponse // *KaspadMessage_GetCoinSupplyRequest // *KaspadMessage_GetCoinSupplyResponse - // *KaspadMessage_GetAcceptingBlockHashOfTxRequest - // *KaspadMessage_GetAcceptingBlockHashOfTxResponse // *KaspadMessage_GetAcceptingBlockHashesOfTxsRequest // *KaspadMessage_GetAcceptingBlockHashesOfTxsResponse - // *KaspadMessage_GetAcceptingBlockOfTxRequest - // *KaspadMessage_GetAcceptingBlockOfTxResponse - // *KaspadMessage_GetAcceptingBlocksOfTxsRequest - // *KaspadMessage_GetAcceptingBlocksOfTxsResponse - // *KaspadMessage_GetIncludingBlockHashOfTxRequest - // *KaspadMessage_GetIncludingBlockHashOfTxResponse - // *KaspadMessage_GetIncludingBlockHashesOfTxsRequest - // *KaspadMessage_GetIncludingBlockHashesOfTxsResponse - // *KaspadMessage_GetIncludingBlockOfTxRequest - // *KaspadMessage_GetIncludingBlockOfTxResponse - // *KaspadMessage_GetIncludingBlocksOfTxsRequest - // *KaspadMessage_GetIncludingBlocksOfTxsResponse - // *KaspadMessage_GetTxRequest - // *KaspadMessage_GetTxResponse // *KaspadMessage_GetTxsRequest // *KaspadMessage_GetTxsResponse - // *KaspadMessage_GetTxConfirmationsRequest - // *KaspadMessage_GetTxConfirmationsResponse // *KaspadMessage_GetTxsConfirmationsRequest // *KaspadMessage_GetTxsConfirmationsResponse // *KaspadMessage_NotifyTxsConfirmationChangedRequst // *KaspadMessage_NotifyTxsConfirmationChangedResponse - // *KaspadMessage_StopNotifyTxsConfirmationChangedRequest - // *KaspadMessage_StopNotifyTxsConfirmationChangedResponse - // *KaspadMessage_StartNotifyTxsConfirmationChangedRequest - // *KaspadMessage_StartNotifyTxsConfirmationChangedResponse - // *KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsRequest - // *KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsResponse + // *KaspadMessage_ModifyNotifyingTxsConfirmationChangedRequest + // *KaspadMessage_ModifyNotifyingTxsConfirmationChangedResponse // *KaspadMessage_TxsConfirmationChangedNotification // *KaspadMessage_NotifyAddressesTxsRequest // *KaspadMessage_NotifyAddressesTxsResponse - // *KaspadMessage_StopNotifyAddressesTxsRequest - // *KaspadMessage_StopNotifyAddressesTxsResponse - // *KaspadMessage_StartNotifyAddressesTxsRequest - // *KaspadMessage_StartNotifyAddressesTxsResponse - // *KaspadMessage_ModifyNotifyAddressesTxsParamsRequest - // *KaspadMessage_ModifyNotifyAddressesTxsParamsResponse + // *KaspadMessage_ModifyNotifyingAddressesTxsRequest + // *KaspadMessage_ModifyNotifyingAddressesTxsResponse // *KaspadMessage_AddressesTxsNotification Payload isKaspadMessage_Payload `protobuf_oneof:"payload"` } @@ -1150,20 +1124,6 @@ func (x *KaspadMessage) GetGetCoinSupplyResponse() *GetCoinSupplyResponseMessage return nil } -func (x *KaspadMessage) GetGetAcceptingBlockHashOfTxRequest() *GetAcceptingBlockHashOfTxRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlockHashOfTxRequest); ok { - return x.GetAcceptingBlockHashOfTxRequest - } - return nil -} - -func (x *KaspadMessage) GetGetAcceptingBlockHashOfTxResponse() *GetAcceptingBlockHashOfTxResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlockHashOfTxResponse); ok { - return x.GetAcceptingBlockHashOfTxResponse - } - return nil -} - func (x *KaspadMessage) GetGetAcceptingBlockHashesOfTxsRequest() *GetAcceptingBlockHashesOfTxsRequestMessage { if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlockHashesOfTxsRequest); ok { return x.GetAcceptingBlockHashesOfTxsRequest @@ -1178,104 +1138,6 @@ func (x *KaspadMessage) GetGetAcceptingBlockHashesOfTxsResponse() *GetAcceptingB return nil } -func (x *KaspadMessage) GetGetAcceptingBlockOfTxRequest() *GetAcceptingBlockOfTxRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlockOfTxRequest); ok { - return x.GetAcceptingBlockOfTxRequest - } - return nil -} - -func (x *KaspadMessage) GetGetAcceptingBlockOfTxResponse() *GetAcceptingBlockOfTxResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlockOfTxResponse); ok { - return x.GetAcceptingBlockOfTxResponse - } - return nil -} - -func (x *KaspadMessage) GetGetAcceptingBlocksOfTxsRequest() *GetAcceptingBlocksOfTxsRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlocksOfTxsRequest); ok { - return x.GetAcceptingBlocksOfTxsRequest - } - return nil -} - -func (x *KaspadMessage) GetGetAcceptingBlocksOfTxsResponse() *GetAcceptingBlocksOfTxsResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetAcceptingBlocksOfTxsResponse); ok { - return x.GetAcceptingBlocksOfTxsResponse - } - return nil -} - -func (x *KaspadMessage) GetGetIncludingBlockHashOfTxRequest() *GetIncludingBlockHashOfTxRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetIncludingBlockHashOfTxRequest); ok { - return x.GetIncludingBlockHashOfTxRequest - } - return nil -} - -func (x *KaspadMessage) GetGetIncludingBlockHashOfTxResponse() *GetIncludingBlockHashOfTxResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetIncludingBlockHashOfTxResponse); ok { - return x.GetIncludingBlockHashOfTxResponse - } - return nil -} - -func (x *KaspadMessage) GetGetIncludingBlockHashesOfTxsRequest() *GetIncludingBlockHashesOfTxsRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetIncludingBlockHashesOfTxsRequest); ok { - return x.GetIncludingBlockHashesOfTxsRequest - } - return nil -} - -func (x *KaspadMessage) GetGetIncludingBlockHashesOfTxsResponse() *GetIncludingBlockHashesOfTxsResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetIncludingBlockHashesOfTxsResponse); ok { - return x.GetIncludingBlockHashesOfTxsResponse - } - return nil -} - -func (x *KaspadMessage) GetGetIncludingBlockOfTxRequest() *GetIncludingBlockOfTxRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetIncludingBlockOfTxRequest); ok { - return x.GetIncludingBlockOfTxRequest - } - return nil -} - -func (x *KaspadMessage) GetGetIncludingBlockOfTxResponse() *GetIncludingBlockOfTxResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetIncludingBlockOfTxResponse); ok { - return x.GetIncludingBlockOfTxResponse - } - return nil -} - -func (x *KaspadMessage) GetGetIncludingBlocksOfTxsRequest() *GetIncludingBlocksOfTxsRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetIncludingBlocksOfTxsRequest); ok { - return x.GetIncludingBlocksOfTxsRequest - } - return nil -} - -func (x *KaspadMessage) GetGetIncludingBlocksOfTxsResponse() *GetIncludingBlocksOfTxsResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetIncludingBlocksOfTxsResponse); ok { - return x.GetIncludingBlocksOfTxsResponse - } - return nil -} - -func (x *KaspadMessage) GetGetTxRequest() *GetTxRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetTxRequest); ok { - return x.GetTxRequest - } - return nil -} - -func (x *KaspadMessage) GetGetTxResponse() *GetTxResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetTxResponse); ok { - return x.GetTxResponse - } - return nil -} - func (x *KaspadMessage) GetGetTxsRequest() *GetTxsRequestMessage { if x, ok := x.GetPayload().(*KaspadMessage_GetTxsRequest); ok { return x.GetTxsRequest @@ -1290,20 +1152,6 @@ func (x *KaspadMessage) GetGetTxsResponse() *GetTxsResponseMessage { return nil } -func (x *KaspadMessage) GetGetTxConfirmationsRequest() *GetTxConfirmationsRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetTxConfirmationsRequest); ok { - return x.GetTxConfirmationsRequest - } - return nil -} - -func (x *KaspadMessage) GetGetTxConfirmationsResponse() *GetTxConfirmationsResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_GetTxConfirmationsResponse); ok { - return x.GetTxConfirmationsResponse - } - return nil -} - func (x *KaspadMessage) GetGetTxsConfirmationsRequest() *GetTxsConfirmationsRequestMessage { if x, ok := x.GetPayload().(*KaspadMessage_GetTxsConfirmationsRequest); ok { return x.GetTxsConfirmationsRequest @@ -1332,44 +1180,16 @@ func (x *KaspadMessage) GetNotifyTxsConfirmationChangedResponse() *NotifyTxsConf return nil } -func (x *KaspadMessage) GetStopNotifyTxsConfirmationChangedRequest() *StopNotifyTxsConfirmationChangedRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_StopNotifyTxsConfirmationChangedRequest); ok { - return x.StopNotifyTxsConfirmationChangedRequest - } - return nil -} - -func (x *KaspadMessage) GetStopNotifyTxsConfirmationChangedResponse() *StopNotifyTxsConfirmationChangedResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_StopNotifyTxsConfirmationChangedResponse); ok { - return x.StopNotifyTxsConfirmationChangedResponse - } - return nil -} - -func (x *KaspadMessage) GetStartNotifyTxsConfirmationChangedRequest() *StartNotifyTxsConfirmationChangedRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_StartNotifyTxsConfirmationChangedRequest); ok { - return x.StartNotifyTxsConfirmationChangedRequest +func (x *KaspadMessage) GetModifyNotifyingTxsConfirmationChangedRequest() *ModifyNotifyingTxsConfirmationChangedRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_ModifyNotifyingTxsConfirmationChangedRequest); ok { + return x.ModifyNotifyingTxsConfirmationChangedRequest } return nil } -func (x *KaspadMessage) GetStartNotifyTxsConfirmationChangedResponse() *StartNotifyTxsConfirmationChangedResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_StartNotifyTxsConfirmationChangedResponse); ok { - return x.StartNotifyTxsConfirmationChangedResponse - } - return nil -} - -func (x *KaspadMessage) GetModifyNotifyTxsConfirmationChangedParamsRequest() *ModifyNotifyTxsConfirmationChangedParamsRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsRequest); ok { - return x.ModifyNotifyTxsConfirmationChangedParamsRequest - } - return nil -} - -func (x *KaspadMessage) GetModifyNotifyTxsConfirmationChangedParamsResponse() *ModifyNotifyTxsConfirmationChangedParamsResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsResponse); ok { - return x.ModifyNotifyTxsConfirmationChangedParamsResponse +func (x *KaspadMessage) GetModifyNotifyingTxsConfirmationChangedResponse() *ModifyNotifyingTxsConfirmationChangedResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_ModifyNotifyingTxsConfirmationChangedResponse); ok { + return x.ModifyNotifyingTxsConfirmationChangedResponse } return nil } @@ -1395,44 +1215,16 @@ func (x *KaspadMessage) GetNotifyAddressesTxsResponse() *NotifyAddressesTxsRespo return nil } -func (x *KaspadMessage) GetStopNotifyAddressesTxsRequest() *StopNotifyAddressesTxsRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_StopNotifyAddressesTxsRequest); ok { - return x.StopNotifyAddressesTxsRequest - } - return nil -} - -func (x *KaspadMessage) GetStopNotifyAddressesTxsResponse() *StopNotifyAddressesTxsResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_StopNotifyAddressesTxsResponse); ok { - return x.StopNotifyAddressesTxsResponse - } - return nil -} - -func (x *KaspadMessage) GetStartNotifyAddressesTxsRequest() *StartNotifyAddressesTxsRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_StartNotifyAddressesTxsRequest); ok { - return x.StartNotifyAddressesTxsRequest - } - return nil -} - -func (x *KaspadMessage) GetStartNotifyAddressesTxsResponse() *StartNotifyAddressesTxsResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_StartNotifyAddressesTxsResponse); ok { - return x.StartNotifyAddressesTxsResponse +func (x *KaspadMessage) GetModifyNotifyingAddressesTxsRequest() *ModifyNotifyingAddressesTxsRequestMessage { + if x, ok := x.GetPayload().(*KaspadMessage_ModifyNotifyingAddressesTxsRequest); ok { + return x.ModifyNotifyingAddressesTxsRequest } return nil } -func (x *KaspadMessage) GetModifyNotifyAddressesTxsParamsRequest() *ModifyNotifyAddressesTxsParamsRequestMessage { - if x, ok := x.GetPayload().(*KaspadMessage_ModifyNotifyAddressesTxsParamsRequest); ok { - return x.ModifyNotifyAddressesTxsParamsRequest - } - return nil -} - -func (x *KaspadMessage) GetModifyNotifyAddressesTxsParamsResponse() *ModifyNotifyAddressesTxsParamsResponseMessage { - if x, ok := x.GetPayload().(*KaspadMessage_ModifyNotifyAddressesTxsParamsResponse); ok { - return x.ModifyNotifyAddressesTxsParamsResponse +func (x *KaspadMessage) GetModifyNotifyingAddressesTxsResponse() *ModifyNotifyingAddressesTxsResponseMessage { + if x, ok := x.GetPayload().(*KaspadMessage_ModifyNotifyingAddressesTxsResponse); ok { + return x.ModifyNotifyingAddressesTxsResponse } return nil } @@ -1968,172 +1760,68 @@ type KaspadMessage_GetCoinSupplyResponse struct { GetCoinSupplyResponse *GetCoinSupplyResponseMessage `protobuf:"bytes,1087,opt,name=getCoinSupplyResponse,proto3,oneof"` } -type KaspadMessage_GetAcceptingBlockHashOfTxRequest struct { - GetAcceptingBlockHashOfTxRequest *GetAcceptingBlockHashOfTxRequestMessage `protobuf:"bytes,1088,opt,name=getAcceptingBlockHashOfTxRequest,proto3,oneof"` -} - -type KaspadMessage_GetAcceptingBlockHashOfTxResponse struct { - GetAcceptingBlockHashOfTxResponse *GetAcceptingBlockHashOfTxResponseMessage `protobuf:"bytes,1089,opt,name=getAcceptingBlockHashOfTxResponse,proto3,oneof"` -} - type KaspadMessage_GetAcceptingBlockHashesOfTxsRequest struct { - GetAcceptingBlockHashesOfTxsRequest *GetAcceptingBlockHashesOfTxsRequestMessage `protobuf:"bytes,1090,opt,name=getAcceptingBlockHashesOfTxsRequest,proto3,oneof"` + GetAcceptingBlockHashesOfTxsRequest *GetAcceptingBlockHashesOfTxsRequestMessage `protobuf:"bytes,1088,opt,name=getAcceptingBlockHashesOfTxsRequest,proto3,oneof"` } type KaspadMessage_GetAcceptingBlockHashesOfTxsResponse struct { - GetAcceptingBlockHashesOfTxsResponse *GetAcceptingBlockHashesOfTxsResponseMessage `protobuf:"bytes,1091,opt,name=getAcceptingBlockHashesOfTxsResponse,proto3,oneof"` -} - -type KaspadMessage_GetAcceptingBlockOfTxRequest struct { - GetAcceptingBlockOfTxRequest *GetAcceptingBlockOfTxRequestMessage `protobuf:"bytes,1092,opt,name=getAcceptingBlockOfTxRequest,proto3,oneof"` -} - -type KaspadMessage_GetAcceptingBlockOfTxResponse struct { - GetAcceptingBlockOfTxResponse *GetAcceptingBlockOfTxResponseMessage `protobuf:"bytes,1093,opt,name=getAcceptingBlockOfTxResponse,proto3,oneof"` -} - -type KaspadMessage_GetAcceptingBlocksOfTxsRequest struct { - GetAcceptingBlocksOfTxsRequest *GetAcceptingBlocksOfTxsRequestMessage `protobuf:"bytes,1094,opt,name=getAcceptingBlocksOfTxsRequest,proto3,oneof"` -} - -type KaspadMessage_GetAcceptingBlocksOfTxsResponse struct { - GetAcceptingBlocksOfTxsResponse *GetAcceptingBlocksOfTxsResponseMessage `protobuf:"bytes,1095,opt,name=getAcceptingBlocksOfTxsResponse,proto3,oneof"` -} - -type KaspadMessage_GetIncludingBlockHashOfTxRequest struct { - GetIncludingBlockHashOfTxRequest *GetIncludingBlockHashOfTxRequestMessage `protobuf:"bytes,1096,opt,name=getIncludingBlockHashOfTxRequest,proto3,oneof"` -} - -type KaspadMessage_GetIncludingBlockHashOfTxResponse struct { - GetIncludingBlockHashOfTxResponse *GetIncludingBlockHashOfTxResponseMessage `protobuf:"bytes,1097,opt,name=getIncludingBlockHashOfTxResponse,proto3,oneof"` -} - -type KaspadMessage_GetIncludingBlockHashesOfTxsRequest struct { - GetIncludingBlockHashesOfTxsRequest *GetIncludingBlockHashesOfTxsRequestMessage `protobuf:"bytes,1098,opt,name=getIncludingBlockHashesOfTxsRequest,proto3,oneof"` -} - -type KaspadMessage_GetIncludingBlockHashesOfTxsResponse struct { - GetIncludingBlockHashesOfTxsResponse *GetIncludingBlockHashesOfTxsResponseMessage `protobuf:"bytes,1099,opt,name=getIncludingBlockHashesOfTxsResponse,proto3,oneof"` -} - -type KaspadMessage_GetIncludingBlockOfTxRequest struct { - GetIncludingBlockOfTxRequest *GetIncludingBlockOfTxRequestMessage `protobuf:"bytes,1100,opt,name=getIncludingBlockOfTxRequest,proto3,oneof"` -} - -type KaspadMessage_GetIncludingBlockOfTxResponse struct { - GetIncludingBlockOfTxResponse *GetIncludingBlockOfTxResponseMessage `protobuf:"bytes,1101,opt,name=getIncludingBlockOfTxResponse,proto3,oneof"` -} - -type KaspadMessage_GetIncludingBlocksOfTxsRequest struct { - GetIncludingBlocksOfTxsRequest *GetIncludingBlocksOfTxsRequestMessage `protobuf:"bytes,1102,opt,name=getIncludingBlocksOfTxsRequest,proto3,oneof"` -} - -type KaspadMessage_GetIncludingBlocksOfTxsResponse struct { - GetIncludingBlocksOfTxsResponse *GetIncludingBlocksOfTxsResponseMessage `protobuf:"bytes,1103,opt,name=getIncludingBlocksOfTxsResponse,proto3,oneof"` -} - -type KaspadMessage_GetTxRequest struct { - GetTxRequest *GetTxRequestMessage `protobuf:"bytes,1104,opt,name=getTxRequest,proto3,oneof"` -} - -type KaspadMessage_GetTxResponse struct { - GetTxResponse *GetTxResponseMessage `protobuf:"bytes,1105,opt,name=getTxResponse,proto3,oneof"` + GetAcceptingBlockHashesOfTxsResponse *GetAcceptingBlockHashesOfTxsResponseMessage `protobuf:"bytes,1089,opt,name=getAcceptingBlockHashesOfTxsResponse,proto3,oneof"` } type KaspadMessage_GetTxsRequest struct { - GetTxsRequest *GetTxsRequestMessage `protobuf:"bytes,1106,opt,name=getTxsRequest,proto3,oneof"` + GetTxsRequest *GetTxsRequestMessage `protobuf:"bytes,1090,opt,name=getTxsRequest,proto3,oneof"` } type KaspadMessage_GetTxsResponse struct { - GetTxsResponse *GetTxsResponseMessage `protobuf:"bytes,1107,opt,name=getTxsResponse,proto3,oneof"` -} - -type KaspadMessage_GetTxConfirmationsRequest struct { - GetTxConfirmationsRequest *GetTxConfirmationsRequestMessage `protobuf:"bytes,1108,opt,name=getTxConfirmationsRequest,proto3,oneof"` -} - -type KaspadMessage_GetTxConfirmationsResponse struct { - GetTxConfirmationsResponse *GetTxConfirmationsResponseMessage `protobuf:"bytes,1109,opt,name=getTxConfirmationsResponse,proto3,oneof"` + GetTxsResponse *GetTxsResponseMessage `protobuf:"bytes,1091,opt,name=getTxsResponse,proto3,oneof"` } type KaspadMessage_GetTxsConfirmationsRequest struct { - GetTxsConfirmationsRequest *GetTxsConfirmationsRequestMessage `protobuf:"bytes,1110,opt,name=getTxsConfirmationsRequest,proto3,oneof"` + GetTxsConfirmationsRequest *GetTxsConfirmationsRequestMessage `protobuf:"bytes,1092,opt,name=getTxsConfirmationsRequest,proto3,oneof"` } type KaspadMessage_GetTxsConfirmationsResponse struct { - GetTxsConfirmationsResponse *GetTxsConfirmationsResponseMessage `protobuf:"bytes,1111,opt,name=getTxsConfirmationsResponse,proto3,oneof"` + GetTxsConfirmationsResponse *GetTxsConfirmationsResponseMessage `protobuf:"bytes,1093,opt,name=getTxsConfirmationsResponse,proto3,oneof"` } type KaspadMessage_NotifyTxsConfirmationChangedRequst struct { - NotifyTxsConfirmationChangedRequst *NotifyTxsConfirmationChangedRequestMessage `protobuf:"bytes,1112,opt,name=notifyTxsConfirmationChangedRequst,proto3,oneof"` + NotifyTxsConfirmationChangedRequst *NotifyTxsConfirmationChangedRequestMessage `protobuf:"bytes,1094,opt,name=notifyTxsConfirmationChangedRequst,proto3,oneof"` } type KaspadMessage_NotifyTxsConfirmationChangedResponse struct { - NotifyTxsConfirmationChangedResponse *NotifyTxsConfirmationChangedResponseMessage `protobuf:"bytes,1113,opt,name=notifyTxsConfirmationChangedResponse,proto3,oneof"` -} - -type KaspadMessage_StopNotifyTxsConfirmationChangedRequest struct { - StopNotifyTxsConfirmationChangedRequest *StopNotifyTxsConfirmationChangedRequestMessage `protobuf:"bytes,1114,opt,name=stopNotifyTxsConfirmationChangedRequest,proto3,oneof"` -} - -type KaspadMessage_StopNotifyTxsConfirmationChangedResponse struct { - StopNotifyTxsConfirmationChangedResponse *StopNotifyTxsConfirmationChangedResponseMessage `protobuf:"bytes,1115,opt,name=stopNotifyTxsConfirmationChangedResponse,proto3,oneof"` -} - -type KaspadMessage_StartNotifyTxsConfirmationChangedRequest struct { - StartNotifyTxsConfirmationChangedRequest *StartNotifyTxsConfirmationChangedRequestMessage `protobuf:"bytes,1116,opt,name=startNotifyTxsConfirmationChangedRequest,proto3,oneof"` + NotifyTxsConfirmationChangedResponse *NotifyTxsConfirmationChangedResponseMessage `protobuf:"bytes,1095,opt,name=notifyTxsConfirmationChangedResponse,proto3,oneof"` } -type KaspadMessage_StartNotifyTxsConfirmationChangedResponse struct { - StartNotifyTxsConfirmationChangedResponse *StartNotifyTxsConfirmationChangedResponseMessage `protobuf:"bytes,1117,opt,name=startNotifyTxsConfirmationChangedResponse,proto3,oneof"` +type KaspadMessage_ModifyNotifyingTxsConfirmationChangedRequest struct { + ModifyNotifyingTxsConfirmationChangedRequest *ModifyNotifyingTxsConfirmationChangedRequestMessage `protobuf:"bytes,1096,opt,name=modifyNotifyingTxsConfirmationChangedRequest,proto3,oneof"` } -type KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsRequest struct { - ModifyNotifyTxsConfirmationChangedParamsRequest *ModifyNotifyTxsConfirmationChangedParamsRequestMessage `protobuf:"bytes,1118,opt,name=modifyNotifyTxsConfirmationChangedParamsRequest,proto3,oneof"` -} - -type KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsResponse struct { - ModifyNotifyTxsConfirmationChangedParamsResponse *ModifyNotifyTxsConfirmationChangedParamsResponseMessage `protobuf:"bytes,1119,opt,name=modifyNotifyTxsConfirmationChangedParamsResponse,proto3,oneof"` +type KaspadMessage_ModifyNotifyingTxsConfirmationChangedResponse struct { + ModifyNotifyingTxsConfirmationChangedResponse *ModifyNotifyingTxsConfirmationChangedResponseMessage `protobuf:"bytes,1097,opt,name=modifyNotifyingTxsConfirmationChangedResponse,proto3,oneof"` } type KaspadMessage_TxsConfirmationChangedNotification struct { - TxsConfirmationChangedNotification *TxsConfirmationChangedNotificationMessage `protobuf:"bytes,1120,opt,name=txsConfirmationChangedNotification,proto3,oneof"` + TxsConfirmationChangedNotification *TxsConfirmationChangedNotificationMessage `protobuf:"bytes,1098,opt,name=txsConfirmationChangedNotification,proto3,oneof"` } type KaspadMessage_NotifyAddressesTxsRequest struct { - NotifyAddressesTxsRequest *NotifyAddressesTxsRequestMessage `protobuf:"bytes,1121,opt,name=notifyAddressesTxsRequest,proto3,oneof"` + NotifyAddressesTxsRequest *NotifyAddressesTxsRequestMessage `protobuf:"bytes,1099,opt,name=notifyAddressesTxsRequest,proto3,oneof"` } type KaspadMessage_NotifyAddressesTxsResponse struct { - NotifyAddressesTxsResponse *NotifyAddressesTxsResponseMessage `protobuf:"bytes,1122,opt,name=notifyAddressesTxsResponse,proto3,oneof"` + NotifyAddressesTxsResponse *NotifyAddressesTxsResponseMessage `protobuf:"bytes,1100,opt,name=notifyAddressesTxsResponse,proto3,oneof"` } -type KaspadMessage_StopNotifyAddressesTxsRequest struct { - StopNotifyAddressesTxsRequest *StopNotifyAddressesTxsRequestMessage `protobuf:"bytes,1123,opt,name=stopNotifyAddressesTxsRequest,proto3,oneof"` +type KaspadMessage_ModifyNotifyingAddressesTxsRequest struct { + ModifyNotifyingAddressesTxsRequest *ModifyNotifyingAddressesTxsRequestMessage `protobuf:"bytes,1101,opt,name=modifyNotifyingAddressesTxsRequest,proto3,oneof"` } -type KaspadMessage_StopNotifyAddressesTxsResponse struct { - StopNotifyAddressesTxsResponse *StopNotifyAddressesTxsResponseMessage `protobuf:"bytes,1124,opt,name=stopNotifyAddressesTxsResponse,proto3,oneof"` -} - -type KaspadMessage_StartNotifyAddressesTxsRequest struct { - StartNotifyAddressesTxsRequest *StartNotifyAddressesTxsRequestMessage `protobuf:"bytes,1125,opt,name=startNotifyAddressesTxsRequest,proto3,oneof"` -} - -type KaspadMessage_StartNotifyAddressesTxsResponse struct { - StartNotifyAddressesTxsResponse *StartNotifyAddressesTxsResponseMessage `protobuf:"bytes,1126,opt,name=startNotifyAddressesTxsResponse,proto3,oneof"` -} - -type KaspadMessage_ModifyNotifyAddressesTxsParamsRequest struct { - ModifyNotifyAddressesTxsParamsRequest *ModifyNotifyAddressesTxsParamsRequestMessage `protobuf:"bytes,1127,opt,name=modifyNotifyAddressesTxsParamsRequest,proto3,oneof"` -} - -type KaspadMessage_ModifyNotifyAddressesTxsParamsResponse struct { - ModifyNotifyAddressesTxsParamsResponse *ModifyNotifyAddressesTxsParamsResponseMessage `protobuf:"bytes,1128,opt,name=modifyNotifyAddressesTxsParamsResponse,proto3,oneof"` +type KaspadMessage_ModifyNotifyingAddressesTxsResponse struct { + ModifyNotifyingAddressesTxsResponse *ModifyNotifyingAddressesTxsResponseMessage `protobuf:"bytes,1102,opt,name=modifyNotifyingAddressesTxsResponse,proto3,oneof"` } type KaspadMessage_AddressesTxsNotification struct { - AddressesTxsNotification *AddressesTxsNotificationMessage `protobuf:"bytes,1129,opt,name=AddressesTxsNotification,proto3,oneof"` + AddressesTxsNotification *AddressesTxsNotificationMessage `protobuf:"bytes,1103,opt,name=AddressesTxsNotification,proto3,oneof"` } func (*KaspadMessage_Addresses) isKaspadMessage_Payload() {} @@ -2396,50 +2084,14 @@ func (*KaspadMessage_GetCoinSupplyRequest) isKaspadMessage_Payload() {} func (*KaspadMessage_GetCoinSupplyResponse) isKaspadMessage_Payload() {} -func (*KaspadMessage_GetAcceptingBlockHashOfTxRequest) isKaspadMessage_Payload() {} - -func (*KaspadMessage_GetAcceptingBlockHashOfTxResponse) isKaspadMessage_Payload() {} - func (*KaspadMessage_GetAcceptingBlockHashesOfTxsRequest) isKaspadMessage_Payload() {} func (*KaspadMessage_GetAcceptingBlockHashesOfTxsResponse) isKaspadMessage_Payload() {} -func (*KaspadMessage_GetAcceptingBlockOfTxRequest) isKaspadMessage_Payload() {} - -func (*KaspadMessage_GetAcceptingBlockOfTxResponse) isKaspadMessage_Payload() {} - -func (*KaspadMessage_GetAcceptingBlocksOfTxsRequest) isKaspadMessage_Payload() {} - -func (*KaspadMessage_GetAcceptingBlocksOfTxsResponse) isKaspadMessage_Payload() {} - -func (*KaspadMessage_GetIncludingBlockHashOfTxRequest) isKaspadMessage_Payload() {} - -func (*KaspadMessage_GetIncludingBlockHashOfTxResponse) isKaspadMessage_Payload() {} - -func (*KaspadMessage_GetIncludingBlockHashesOfTxsRequest) isKaspadMessage_Payload() {} - -func (*KaspadMessage_GetIncludingBlockHashesOfTxsResponse) isKaspadMessage_Payload() {} - -func (*KaspadMessage_GetIncludingBlockOfTxRequest) isKaspadMessage_Payload() {} - -func (*KaspadMessage_GetIncludingBlockOfTxResponse) isKaspadMessage_Payload() {} - -func (*KaspadMessage_GetIncludingBlocksOfTxsRequest) isKaspadMessage_Payload() {} - -func (*KaspadMessage_GetIncludingBlocksOfTxsResponse) isKaspadMessage_Payload() {} - -func (*KaspadMessage_GetTxRequest) isKaspadMessage_Payload() {} - -func (*KaspadMessage_GetTxResponse) isKaspadMessage_Payload() {} - func (*KaspadMessage_GetTxsRequest) isKaspadMessage_Payload() {} func (*KaspadMessage_GetTxsResponse) isKaspadMessage_Payload() {} -func (*KaspadMessage_GetTxConfirmationsRequest) isKaspadMessage_Payload() {} - -func (*KaspadMessage_GetTxConfirmationsResponse) isKaspadMessage_Payload() {} - func (*KaspadMessage_GetTxsConfirmationsRequest) isKaspadMessage_Payload() {} func (*KaspadMessage_GetTxsConfirmationsResponse) isKaspadMessage_Payload() {} @@ -2448,17 +2100,9 @@ func (*KaspadMessage_NotifyTxsConfirmationChangedRequst) isKaspadMessage_Payload func (*KaspadMessage_NotifyTxsConfirmationChangedResponse) isKaspadMessage_Payload() {} -func (*KaspadMessage_StopNotifyTxsConfirmationChangedRequest) isKaspadMessage_Payload() {} - -func (*KaspadMessage_StopNotifyTxsConfirmationChangedResponse) isKaspadMessage_Payload() {} - -func (*KaspadMessage_StartNotifyTxsConfirmationChangedRequest) isKaspadMessage_Payload() {} - -func (*KaspadMessage_StartNotifyTxsConfirmationChangedResponse) isKaspadMessage_Payload() {} +func (*KaspadMessage_ModifyNotifyingTxsConfirmationChangedRequest) isKaspadMessage_Payload() {} -func (*KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsRequest) isKaspadMessage_Payload() {} - -func (*KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsResponse) isKaspadMessage_Payload() {} +func (*KaspadMessage_ModifyNotifyingTxsConfirmationChangedResponse) isKaspadMessage_Payload() {} func (*KaspadMessage_TxsConfirmationChangedNotification) isKaspadMessage_Payload() {} @@ -2466,17 +2110,9 @@ func (*KaspadMessage_NotifyAddressesTxsRequest) isKaspadMessage_Payload() {} func (*KaspadMessage_NotifyAddressesTxsResponse) isKaspadMessage_Payload() {} -func (*KaspadMessage_StopNotifyAddressesTxsRequest) isKaspadMessage_Payload() {} - -func (*KaspadMessage_StopNotifyAddressesTxsResponse) isKaspadMessage_Payload() {} - -func (*KaspadMessage_StartNotifyAddressesTxsRequest) isKaspadMessage_Payload() {} - -func (*KaspadMessage_StartNotifyAddressesTxsResponse) isKaspadMessage_Payload() {} - -func (*KaspadMessage_ModifyNotifyAddressesTxsParamsRequest) isKaspadMessage_Payload() {} +func (*KaspadMessage_ModifyNotifyingAddressesTxsRequest) isKaspadMessage_Payload() {} -func (*KaspadMessage_ModifyNotifyAddressesTxsParamsResponse) isKaspadMessage_Payload() {} +func (*KaspadMessage_ModifyNotifyingAddressesTxsResponse) isKaspadMessage_Payload() {} func (*KaspadMessage_AddressesTxsNotification) isKaspadMessage_Payload() {} @@ -2486,1054 +2122,918 @@ var file_messages_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x1a, 0x09, 0x70, 0x32, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x09, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xb8, 0x97, 0x01, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x12, 0x2f, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x12, 0x41, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x50, 0x0a, 0x10, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x10, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x56, 0x0a, - 0x12, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, - 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x12, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x59, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x35, 0x0a, 0x08, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x08, 0x69, - 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x47, 0x0a, 0x0d, 0x69, 0x6e, 0x76, 0x52, 0x65, - 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x6e, 0x76, 0x52, 0x65, - 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x0d, 0x69, 0x6e, 0x76, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x12, 0x4d, 0x0a, 0x0f, 0x69, 0x6e, 0x76, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x6e, 0x76, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, - 0x69, 0x6e, 0x76, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x2c, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, - 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, 0x6f, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x12, 0x32, 0x0a, 0x06, 0x76, - 0x65, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x56, 0x65, 0x72, 0x61, 0x63, 0x6b, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x06, 0x76, 0x65, 0x72, 0x61, 0x63, 0x6b, 0x12, - 0x35, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x15, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, - 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, - 0x64, 0x12, 0x32, 0x0a, 0x06, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, - 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x06, 0x72, - 0x65, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x68, 0x0a, 0x18, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, + 0x6f, 0x22, 0xb1, 0x7d, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x12, 0x2f, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x12, 0x41, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x50, 0x0a, 0x10, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x10, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x12, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, + 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x12, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x59, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x35, 0x0a, 0x08, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x08, 0x69, 0x62, + 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x47, 0x0a, 0x0d, 0x69, 0x6e, 0x76, 0x52, 0x65, 0x6c, + 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x6e, 0x76, 0x52, 0x65, 0x6c, + 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x0d, 0x69, 0x6e, 0x76, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, + 0x4d, 0x0a, 0x0f, 0x69, 0x6e, 0x76, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x6e, 0x76, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x69, + 0x6e, 0x76, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, + 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x04, + 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, 0x6f, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x12, 0x32, 0x0a, 0x06, 0x76, 0x65, + 0x72, 0x61, 0x63, 0x6b, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x56, 0x65, 0x72, 0x61, 0x63, 0x6b, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x06, 0x76, 0x65, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x35, + 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x15, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, + 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, + 0x12, 0x32, 0x0a, 0x06, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x6a, + 0x65, 0x63, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, + 0x6a, 0x65, 0x63, 0x74, 0x12, 0x68, 0x0a, 0x18, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, + 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, + 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x12, 0x50, + 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x10, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, + 0x12, 0x62, 0x0a, 0x16, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, + 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x55, 0x6e, 0x65, + 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x16, 0x75, 0x6e, + 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x0f, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x62, 0x64, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x0f, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x6e, 0x0a, 0x1a, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, + 0x68, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x49, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x6f, 0x72, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x48, + 0x61, 0x73, 0x68, 0x12, 0x89, 0x01, 0x0a, 0x23, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, + 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, + 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x21, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, - 0x6b, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, + 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x23, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x12, - 0x50, 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x73, 0x12, 0x62, 0x0a, 0x16, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, - 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x55, 0x6e, - 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x16, 0x75, - 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x0f, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x62, 0x64, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x6f, 0x72, 0x12, 0x6e, 0x0a, 0x1a, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x48, 0x61, - 0x73, 0x68, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x6f, 0x72, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, - 0x48, 0x61, 0x73, 0x68, 0x12, 0x89, 0x01, 0x0a, 0x23, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x21, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, - 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, - 0x6e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x23, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, - 0x12, 0x77, 0x0a, 0x1d, 0x64, 0x6f, 0x6e, 0x65, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, - 0x73, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x44, 0x6f, 0x6e, 0x65, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, - 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x64, 0x6f, 0x6e, 0x65, - 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, - 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x12, 0x86, 0x01, 0x0a, 0x22, 0x69, 0x62, - 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x69, 0x67, - 0x68, 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, - 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x49, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, - 0x6f, 0x72, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4e, 0x6f, 0x74, - 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, - 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x48, - 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, - 0x6e, 0x64, 0x12, 0x5c, 0x0a, 0x14, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x54, - 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, - 0x61, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x14, 0x62, 0x6c, 0x6f, 0x63, + 0x77, 0x0a, 0x1d, 0x64, 0x6f, 0x6e, 0x65, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, + 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x44, 0x6f, 0x6e, 0x65, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x64, 0x6f, 0x6e, 0x65, 0x50, + 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x53, + 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x12, 0x86, 0x01, 0x0a, 0x22, 0x69, 0x62, 0x64, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x69, 0x67, 0x68, + 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x18, + 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x49, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, + 0x72, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4e, 0x6f, 0x74, 0x46, + 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, 0x69, + 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x69, + 0x67, 0x68, 0x65, 0x73, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, + 0x64, 0x12, 0x5c, 0x0a, 0x14, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, + 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x6b, 0x0a, 0x19, 0x64, 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x57, 0x69, - 0x74, 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x18, 0x25, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x44, 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, - 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x19, 0x64, 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x57, 0x69, - 0x74, 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x83, 0x01, - 0x0a, 0x21, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, 0x6e, 0x74, 0x69, 0x63, - 0x6f, 0x6e, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, - 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, - 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x21, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, 0x6e, 0x74, 0x69, 0x63, - 0x6f, 0x6e, 0x65, 0x12, 0x44, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x73, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x56, 0x0a, 0x12, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, - 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x12, 0x41, 0x0a, 0x0b, 0x44, 0x6f, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x44, 0x6f, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x44, 0x6f, 0x6e, 0x65, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x12, 0x6e, 0x0a, 0x1a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, - 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, - 0x65, 0x74, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x14, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x6b, 0x0a, 0x19, 0x64, 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x57, 0x69, 0x74, + 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x18, 0x25, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x44, + 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, 0x75, + 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x19, 0x64, 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x57, 0x69, 0x74, + 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x83, 0x01, 0x0a, + 0x21, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, + 0x6e, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, 0x6e, - 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, - 0x4f, 0x53, 0x65, 0x74, 0x12, 0x4a, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, + 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, 0x6e, + 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x21, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, + 0x6e, 0x65, 0x12, 0x44, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x73, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x56, 0x0a, 0x12, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x2a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, + 0x12, 0x41, 0x0a, 0x0b, 0x44, 0x6f, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, + 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x44, 0x6f, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x44, 0x6f, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x12, 0x6e, 0x0a, 0x1a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, + 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, + 0x74, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, + 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, + 0x53, 0x65, 0x74, 0x12, 0x4a, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, + 0x59, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x12, 0x59, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x47, 0x0a, 0x0d, 0x70, - 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x2f, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, - 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x73, 0x12, 0x68, 0x0a, 0x18, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, - 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, - 0x18, 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, - 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, - 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x53, - 0x0a, 0x11, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x11, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x12, 0x2f, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x32, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x65, 0x61, 0x64, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x72, - 0x65, 0x61, 0x64, 0x79, 0x12, 0x62, 0x0a, 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, - 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x56, 0x34, 0x18, 0x33, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, - 0x64, 0x44, 0x61, 0x74, 0x61, 0x56, 0x34, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, - 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x56, 0x34, 0x12, 0x41, 0x0a, 0x0b, 0x74, 0x72, 0x75, 0x73, - 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, - 0x64, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, - 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x71, 0x0a, 0x1b, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x1b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x5c, - 0x0a, 0x14, 0x69, 0x62, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, - 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x62, 0x64, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x14, 0x69, 0x62, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x4d, 0x0a, 0x0f, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x65, 0x18, - 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x65, 0x12, 0xa1, 0x01, 0x0a, 0x2b, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, - 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, 0x6e, 0x74, - 0x69, 0x63, 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x38, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, 0x6e, 0x74, 0x69, 0x63, - 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x2b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, - 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, - 0x73, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, - 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xe9, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, - 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x18, 0x67, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x47, 0x0a, 0x0d, 0x70, 0x72, + 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x2f, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, 0x72, + 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x73, 0x12, 0x68, 0x0a, 0x18, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, + 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, + 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x18, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x75, 0x6e, + 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x53, 0x0a, + 0x11, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x11, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x12, 0x2f, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x32, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, + 0x61, 0x64, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x72, 0x65, + 0x61, 0x64, 0x79, 0x12, 0x62, 0x0a, 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, + 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x56, 0x34, 0x18, 0x33, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, + 0x44, 0x61, 0x74, 0x61, 0x56, 0x34, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, + 0x64, 0x44, 0x61, 0x74, 0x61, 0x56, 0x34, 0x12, 0x41, 0x0a, 0x0b, 0x74, 0x72, 0x75, 0x73, 0x74, + 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, + 0x44, 0x61, 0x74, 0x61, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x74, + 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x71, 0x0a, 0x1b, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x1b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x5c, 0x0a, + 0x14, 0x69, 0x62, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, + 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x62, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x14, 0x69, 0x62, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x4d, 0x0a, 0x0f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x65, 0x18, 0x37, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x65, 0x12, 0xa1, 0x01, 0x0a, 0x2b, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, + 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, 0x6e, 0x74, 0x69, + 0x63, 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x38, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, + 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x2b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, + 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x64, 0x49, 0x74, 0x73, + 0x41, 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x69, + 0x0a, 0x18, 0x67, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, - 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x12, 0x73, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xeb, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, 0x73, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x5a, 0x0a, 0x13, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, - 0x17, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, - 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0xee, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x66, 0x0a, 0x17, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, - 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xef, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x17, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x69, 0x0a, 0x18, 0x6e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf0, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x18, 0x67, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, + 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, + 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x12, 0x73, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xeb, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, 0x73, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x5a, 0x0a, 0x13, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x17, + 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0xee, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x66, 0x0a, 0x17, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, + 0x64, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xef, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, + 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x69, 0x0a, 0x18, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, - 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xf1, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x17, 0x67, 0x65, 0x74, 0x50, - 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0xf2, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf3, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x18, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x19, 0x67, + 0x6e, 0x73, 0x65, 0x18, 0xf0, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x63, 0x0a, 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xf1, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x17, 0x67, 0x65, 0x74, 0x50, 0x65, + 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0xf2, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf3, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, + 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x18, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, + 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xf4, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xf4, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, + 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6f, 0x0a, 0x1a, 0x67, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, - 0x67, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, - 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6f, 0x0a, 0x1a, 0x67, 0x65, 0x74, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf5, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, - 0x67, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, - 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x16, 0x67, 0x65, - 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x18, 0xf6, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, - 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x16, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, - 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x66, 0x0a, 0x17, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf7, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, - 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, - 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x1b, 0x67, 0x65, 0x74, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xf8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf5, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x67, + 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, + 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x16, 0x67, 0x65, 0x74, + 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0xf6, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, + 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x16, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, + 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x66, + 0x0a, 0x17, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf7, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, + 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, + 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x1b, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, - 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x75, 0x0a, 0x1c, 0x67, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xf8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf9, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, - 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x1c, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x0e, 0x61, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x18, 0xfa, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x75, 0x0a, 0x1c, 0x67, 0x65, + 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf9, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x1c, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4b, 0x0a, 0x0e, 0x61, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0xfa, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0e, + 0x61, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, + 0x0a, 0x0f, 0x61, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0xfb, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x61, + 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, + 0x0a, 0x18, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xfc, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x0e, 0x61, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x4e, 0x0a, 0x0f, 0x61, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0xfb, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, - 0x61, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x69, 0x0a, 0x18, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xfc, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x18, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x73, 0x75, + 0x18, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x73, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xfd, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xfd, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x73, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xab, 0x01, 0x0a, 0x2e, 0x6e, 0x6f, 0x74, - 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xfe, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, - 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xae, 0x01, 0x0a, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xff, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xab, 0x01, 0x0a, 0x2e, 0x6e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xfe, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, - 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa8, 0x01, 0x0a, 0x2d, 0x76, 0x69, 0x72, 0x74, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, + 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xae, 0x01, 0x0a, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xff, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x41, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, + 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa8, 0x01, 0x0a, 0x2d, 0x76, 0x69, 0x72, 0x74, 0x75, + 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x80, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x80, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x56, 0x69, 0x72, - 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x2d, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x0f, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x81, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x2d, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x4e, 0x0a, 0x0f, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x18, 0x81, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x0f, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x51, 0x0a, 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x82, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x0f, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x82, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x83, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x14, - 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x84, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x15, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa8, 0x01, 0x0a, 0x2d, 0x67, 0x65, 0x74, 0x56, 0x69, + 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x83, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x14, 0x67, + 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x84, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x15, + 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa8, 0x01, 0x0a, 0x2d, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, + 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x85, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x85, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x56, - 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x2d, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0xab, 0x01, 0x0a, 0x2e, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x86, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, - 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x2e, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, - 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x51, 0x0a, 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0x87, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x54, 0x0a, 0x11, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x88, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x18, 0x89, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x14, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0x8a, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x15, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x16, 0x67, 0x65, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0x8b, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, - 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x16, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x66, - 0x0a, 0x17, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x8c, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, - 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, - 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x8d, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, - 0x69, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x1e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, - 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x7e, 0x0a, 0x1f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, - 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x8e, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, - 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x1f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x8f, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, - 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x2d, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0xab, 0x01, 0x0a, 0x2e, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0x86, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, + 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2e, + 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, + 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, + 0x0a, 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0x87, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x54, 0x0a, 0x11, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x88, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0x89, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, - 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x7e, 0x0a, 0x1f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, - 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x18, 0x90, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x1f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, - 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x75, 0x0a, 0x1c, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, - 0x6c, 0x69, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x91, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, - 0x6c, 0x69, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1c, 0x66, 0x69, 0x6e, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x66, 0x69, 0x6e, 0x61, - 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x92, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, - 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x24, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, + 0x52, 0x14, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, + 0x8a, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x15, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x16, 0x67, 0x65, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0x8b, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, + 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x16, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, + 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x66, 0x0a, + 0x17, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x8c, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, + 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, + 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x8d, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x1e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, + 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x7e, 0x0a, 0x1f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, + 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x8e, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, + 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x1f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, + 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, + 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x18, 0x8f, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, + 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, + 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x7e, 0x0a, 0x1f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, + 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0x90, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, + 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1f, + 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, + 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x75, 0x0a, 0x1c, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, + 0x69, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x91, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, + 0x69, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1c, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, + 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x66, 0x69, 0x6e, 0x61, 0x6c, + 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x92, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x4d, 0x65, - 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0x93, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, - 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x24, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, + 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, - 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, - 0x94, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, - 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x4e, 0x0a, 0x0f, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0x95, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, + 0x73, 0x74, 0x18, 0x93, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, + 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, + 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x94, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, + 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x4e, 0x0a, 0x0f, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0x95, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, + 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x51, 0x0a, 0x10, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0x96, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x0f, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x51, 0x0a, 0x10, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x96, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x10, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x11, 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x97, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x12, 0x67, 0x65, 0x74, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, - 0x98, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, - 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x19, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, - 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, - 0x99, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, - 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x6f, 0x0a, 0x1a, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x9a, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x10, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x54, 0x0a, 0x11, 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x97, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x12, 0x67, 0x65, 0x74, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x98, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, 0x67, + 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x6c, 0x0a, 0x19, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, 0x73, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x99, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, - 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x69, 0x0a, 0x18, 0x75, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x9b, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x18, 0x75, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6f, 0x0a, 0x1a, + 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, + 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x6f, 0x0a, 0x1a, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x9a, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, + 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x69, 0x0a, 0x18, 0x75, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x9b, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x18, 0x75, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6f, 0x0a, 0x1a, 0x67, + 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x9c, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, + 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x1a, 0x67, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x72, 0x0a, 0x1b, 0x67, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x9c, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, - 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x1a, 0x67, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x72, 0x0a, - 0x1b, 0x67, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x9d, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x47, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x99, 0x01, 0x0a, 0x28, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, - 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x9e, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x28, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, + 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x9d, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, + 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x99, 0x01, 0x0a, 0x28, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, - 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x9c, 0x01, - 0x0a, 0x29, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x9f, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, - 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x29, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xb7, 0x01, 0x0a, - 0x32, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, + 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x9e, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x28, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0xa0, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, - 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x32, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, - 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, - 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xba, 0x01, 0x0a, 0x33, 0x6e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xa1, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, - 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x33, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x9c, 0x01, 0x0a, + 0x29, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x9f, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, + 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x29, 0x67, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xb7, 0x01, 0x0a, 0x32, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0xb4, 0x01, 0x0a, 0x31, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0xa0, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, + 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x32, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, + 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xba, 0x01, 0x0a, 0x33, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xa1, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x33, 0x6e, + 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0xb4, 0x01, 0x0a, 0x31, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xa2, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x43, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x56, 0x69, 0x72, 0x74, + 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x31, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xa2, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x43, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x56, 0x69, 0x72, - 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x31, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, - 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x0a, 0x62, 0x61, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xa3, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x61, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x0a, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x62, - 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xa4, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x61, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x0b, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x45, 0x0a, 0x0c, 0x75, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, - 0xa5, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x6e, 0x62, 0x61, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0d, 0x75, 0x6e, 0x62, 0x61, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xa6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x55, 0x6e, 0x62, 0x61, 0x6e, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x0a, 0x62, 0x61, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xa3, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x61, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0a, + 0x62, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x62, 0x61, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xa4, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x0d, 0x75, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x4b, 0x0a, 0x0e, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0xa7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x67, - 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, - 0x0f, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0xa8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x67, 0x65, - 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, - 0x0a, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, - 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0xa9, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x69, 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x00, 0x52, 0x0b, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, + 0x0a, 0x0c, 0x75, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xa5, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0d, 0x75, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xa6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x0d, 0x75, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x4b, 0x0a, 0x0e, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x18, 0xa7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x67, 0x65, + 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x0f, + 0x67, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, + 0xa8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x67, 0x65, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x84, 0x01, 0x0a, 0x21, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x74, 0x18, 0xa9, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, + 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x20, + 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, 0x74, 0x78, + 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x84, 0x01, 0x0a, 0x21, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, + 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xaa, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x21, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xaa, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x21, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x69, 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x99, 0x01, 0x0a, 0x28, 0x6e, 0x6f, 0x74, - 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, - 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xab, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, - 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, - 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x28, 0x6e, 0x6f, 0x74, 0x69, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x99, 0x01, 0x0a, 0x28, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x9c, 0x01, 0x0a, 0x29, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, - 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, - 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0xac, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, - 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, - 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x29, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, - 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x96, 0x01, 0x0a, 0x27, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, - 0x69, 0x64, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0xad, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, - 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x27, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xae, 0x01, 0x0a, - 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, + 0x75, 0x65, 0x73, 0x74, 0x18, 0xab, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x18, 0xae, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, - 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x28, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2f, 0x73, 0x74, - 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, + 0x65, 0x73, 0x74, 0x12, 0x9c, 0x01, 0x0a, 0x29, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, + 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, + 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0xac, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, - 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xb1, 0x01, - 0x0a, 0x30, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, + 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x29, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0xaf, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, - 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x73, 0x65, 0x12, 0x96, 0x01, 0x0a, 0x27, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, + 0x64, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xad, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, + 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x27, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xae, 0x01, 0x0a, 0x2f, + 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, + 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, + 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0xae, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, + 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, + 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2f, 0x73, 0x74, 0x6f, + 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, + 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, + 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xb1, 0x01, 0x0a, 0x30, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x90, 0x01, 0x0a, 0x25, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xb0, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x45, - 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x25, 0x65, - 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x93, 0x01, 0x0a, 0x26, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, - 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, - 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, - 0xb1, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x26, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x23, 0x6e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0xb2, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, - 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x23, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, - 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x6e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0xb3, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, - 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x65, 0x18, 0xaf, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, + 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, + 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x30, + 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, + 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, + 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x90, 0x01, 0x0a, 0x25, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xb0, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x45, 0x73, + 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, + 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x25, 0x65, 0x73, + 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, + 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x93, 0x01, 0x0a, 0x26, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, + 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xb1, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x24, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, + 0x00, 0x52, 0x26, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x23, 0x6e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x18, 0xb2, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, + 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x23, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x22, 0x76, 0x69, 0x72, 0x74, - 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xb4, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, 0x76, - 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x6f, 0x0a, 0x1a, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, - 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, - 0xb5, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x79, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x72, 0x0a, 0x1b, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0xb6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, + 0xb3, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, + 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x24, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, + 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x22, 0x76, 0x69, 0x72, 0x74, 0x75, + 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xb4, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, 0x76, 0x69, + 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x6f, 0x0a, 0x1a, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xb5, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x79, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x72, 0x0a, 0x1b, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x1d, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, + 0x18, 0xb6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x1d, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xb7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xb7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x1d, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x7b, 0x0a, 0x1e, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, - 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0xb8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x67, - 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, - 0x1d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xb9, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7b, 0x0a, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xba, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x1c, 0x6e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xbb, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1c, 0x6e, - 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x8a, 0x01, 0x0a, 0x23, - 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0xbc, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, - 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x23, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, - 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x67, 0x65, 0x74, - 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x1d, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x7b, 0x0a, 0x1e, 0x67, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0xbd, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, - 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x24, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, + 0x65, 0x18, 0xb8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x67, 0x65, + 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x1d, + 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xb9, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, + 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7b, 0x0a, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xba, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x1c, 0x6e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0xbb, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1c, 0x6e, 0x65, + 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x8a, 0x01, 0x0a, 0x23, 0x67, + 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, + 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0xbc, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, + 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x23, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x67, 0x65, 0x74, 0x4d, + 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0xbd, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x43, - 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x18, 0xbe, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x14, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x43, 0x6f, - 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0xbf, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x15, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x20, 0x67, 0x65, - 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xc0, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x20, 0x67, 0x65, 0x74, - 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x84, 0x01, - 0x0a, 0x21, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x18, 0xc1, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, - 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x21, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x23, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, - 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, - 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xc2, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x23, 0x67, 0x65, - 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, - 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, - 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc3, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, - 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x24, 0x67, 0x65, 0x74, + 0x00, 0x52, 0x24, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, + 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x43, 0x6f, + 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0xbe, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x14, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x69, + 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, + 0xbf, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x15, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x23, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x75, 0x0a, 0x1c, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, - 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x18, 0xc4, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, - 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1c, 0x67, 0x65, 0x74, 0x41, - 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, - 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x78, 0x0a, 0x1d, 0x67, 0x65, 0x74, 0x41, - 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, - 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc5, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, - 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x1d, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, - 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, - 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x18, 0xc6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, - 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x1e, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x7e, 0x0a, 0x1f, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0xc7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, - 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1f, - 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x81, 0x01, 0x0a, 0x20, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x18, 0xc8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, - 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x20, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x84, 0x01, 0x0a, 0x21, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, - 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc9, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x33, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x21, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, - 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x23, 0x67, - 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0xca, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, - 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, - 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x23, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x67, 0x65, 0x74, 0x49, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, - 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0xcb, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, + 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x18, 0xc0, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x24, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x1c, 0x67, 0x65, 0x74, 0x49, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xcc, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x1c, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x78, - 0x0a, 0x1d, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, - 0xcd, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x67, 0x65, 0x74, 0x49, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x67, 0x65, 0x74, 0x49, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, - 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xce, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, - 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, - 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7e, 0x0a, 0x1f, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xcf, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x49, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, - 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x1f, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, - 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xd0, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0c, - 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0d, - 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xd1, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xd2, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x4b, 0x0a, 0x0e, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0xd3, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x67, - 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, - 0x19, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xd4, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, - 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x23, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, + 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, + 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc1, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x24, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xc2, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x19, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6f, 0x0a, 0x1a, 0x67, - 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xd5, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x1a, + 0x52, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x4b, 0x0a, 0x0e, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0xc3, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x67, 0x65, + 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xd6, 0x08, 0x20, 0x01, 0x28, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xc4, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x72, 0x0a, 0x1b, 0x67, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xd7, 0x08, 0x20, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc5, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, @@ -3541,7 +3041,7 @@ var file_messages_proto_rawDesc = []byte{ 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x22, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x73, 0x74, 0x18, 0xd8, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x73, 0x74, 0x18, 0xc6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, @@ -3550,168 +3050,95 @@ var file_messages_proto_rawDesc = []byte{ 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x73, 0x74, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xd9, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x24, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x96, 0x01, 0x0a, - 0x27, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xda, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x39, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x27, 0x73, 0x74, - 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x99, 0x01, 0x0a, 0x28, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0xdb, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x28, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x99, 0x01, 0x0a, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xdc, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa5, 0x01, 0x0a, + 0x2c, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x9c, 0x01, - 0x0a, 0x29, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xdd, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x29, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, - 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xae, 0x01, 0x0a, - 0x2f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x18, 0xde, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xc8, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2f, 0x6d, 0x6f, - 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x2c, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0xa8, 0x01, 0x0a, 0x2d, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xc9, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x2d, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, + 0x67, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x87, 0x01, 0x0a, 0x22, 0x74, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xca, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xb1, 0x01, - 0x0a, 0x30, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, - 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0xdf, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x30, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x87, 0x01, 0x0a, 0x22, 0x74, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe0, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x73, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, 0x74, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6c, 0x0a, 0x19, 0x6e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xe1, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, - 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, - 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6f, 0x0a, 0x1a, 0x6e, 0x6f, 0x74, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, 0x74, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6c, 0x0a, 0x19, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xe2, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xcb, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x6e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6f, 0x0a, 0x1a, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, - 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, - 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x1d, 0x73, 0x74, - 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xe3, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, - 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x7b, 0x0a, 0x1e, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xe4, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xcc, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x1e, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x22, 0x6d, 0x6f, 0x64, + 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0xcd, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, + 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x22, + 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x23, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, + 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xce, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0xe5, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7e, - 0x0a, 0x1f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0xe6, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1f, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x90, - 0x01, 0x0a, 0x25, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xe7, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x37, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x69, - 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x25, 0x6d, 0x6f, 0x64, 0x69, - 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x93, 0x01, 0x0a, 0x26, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xe8, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x26, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x18, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0xe9, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x54, 0x78, 0x73, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x32, 0x50, 0x0a, - 0x03, 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, - 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, - 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, - 0x50, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x23, 0x6d, 0x6f, 0x64, 0x69, + 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x69, 0x0a, 0x18, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xcf, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x18, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x32, 0x50, 0x0a, 0x03, 0x50, 0x32, 0x50, 0x12, 0x49, 0x0a, 0x0d, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, - 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, - 0x01, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0x50, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x49, + 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, + 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, + 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, + 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3858,48 +3285,22 @@ var file_messages_proto_goTypes = []interface{}{ (*GetMempoolEntriesByAddressesResponseMessage)(nil), // 127: protowire.GetMempoolEntriesByAddressesResponseMessage (*GetCoinSupplyRequestMessage)(nil), // 128: protowire.GetCoinSupplyRequestMessage (*GetCoinSupplyResponseMessage)(nil), // 129: protowire.GetCoinSupplyResponseMessage - (*GetAcceptingBlockHashOfTxRequestMessage)(nil), // 130: protowire.GetAcceptingBlockHashOfTxRequestMessage - (*GetAcceptingBlockHashOfTxResponseMessage)(nil), // 131: protowire.GetAcceptingBlockHashOfTxResponseMessage - (*GetAcceptingBlockHashesOfTxsRequestMessage)(nil), // 132: protowire.GetAcceptingBlockHashesOfTxsRequestMessage - (*GetAcceptingBlockHashesOfTxsResponseMessage)(nil), // 133: protowire.GetAcceptingBlockHashesOfTxsResponseMessage - (*GetAcceptingBlockOfTxRequestMessage)(nil), // 134: protowire.GetAcceptingBlockOfTxRequestMessage - (*GetAcceptingBlockOfTxResponseMessage)(nil), // 135: protowire.GetAcceptingBlockOfTxResponseMessage - (*GetAcceptingBlocksOfTxsRequestMessage)(nil), // 136: protowire.GetAcceptingBlocksOfTxsRequestMessage - (*GetAcceptingBlocksOfTxsResponseMessage)(nil), // 137: protowire.GetAcceptingBlocksOfTxsResponseMessage - (*GetIncludingBlockHashOfTxRequestMessage)(nil), // 138: protowire.GetIncludingBlockHashOfTxRequestMessage - (*GetIncludingBlockHashOfTxResponseMessage)(nil), // 139: protowire.GetIncludingBlockHashOfTxResponseMessage - (*GetIncludingBlockHashesOfTxsRequestMessage)(nil), // 140: protowire.GetIncludingBlockHashesOfTxsRequestMessage - (*GetIncludingBlockHashesOfTxsResponseMessage)(nil), // 141: protowire.GetIncludingBlockHashesOfTxsResponseMessage - (*GetIncludingBlockOfTxRequestMessage)(nil), // 142: protowire.GetIncludingBlockOfTxRequestMessage - (*GetIncludingBlockOfTxResponseMessage)(nil), // 143: protowire.GetIncludingBlockOfTxResponseMessage - (*GetIncludingBlocksOfTxsRequestMessage)(nil), // 144: protowire.GetIncludingBlocksOfTxsRequestMessage - (*GetIncludingBlocksOfTxsResponseMessage)(nil), // 145: protowire.GetIncludingBlocksOfTxsResponseMessage - (*GetTxRequestMessage)(nil), // 146: protowire.GetTxRequestMessage - (*GetTxResponseMessage)(nil), // 147: protowire.GetTxResponseMessage - (*GetTxsRequestMessage)(nil), // 148: protowire.GetTxsRequestMessage - (*GetTxsResponseMessage)(nil), // 149: protowire.GetTxsResponseMessage - (*GetTxConfirmationsRequestMessage)(nil), // 150: protowire.GetTxConfirmationsRequestMessage - (*GetTxConfirmationsResponseMessage)(nil), // 151: protowire.GetTxConfirmationsResponseMessage - (*GetTxsConfirmationsRequestMessage)(nil), // 152: protowire.GetTxsConfirmationsRequestMessage - (*GetTxsConfirmationsResponseMessage)(nil), // 153: protowire.GetTxsConfirmationsResponseMessage - (*NotifyTxsConfirmationChangedRequestMessage)(nil), // 154: protowire.NotifyTxsConfirmationChangedRequestMessage - (*NotifyTxsConfirmationChangedResponseMessage)(nil), // 155: protowire.NotifyTxsConfirmationChangedResponseMessage - (*StopNotifyTxsConfirmationChangedRequestMessage)(nil), // 156: protowire.StopNotifyTxsConfirmationChangedRequestMessage - (*StopNotifyTxsConfirmationChangedResponseMessage)(nil), // 157: protowire.StopNotifyTxsConfirmationChangedResponseMessage - (*StartNotifyTxsConfirmationChangedRequestMessage)(nil), // 158: protowire.StartNotifyTxsConfirmationChangedRequestMessage - (*StartNotifyTxsConfirmationChangedResponseMessage)(nil), // 159: protowire.StartNotifyTxsConfirmationChangedResponseMessage - (*ModifyNotifyTxsConfirmationChangedParamsRequestMessage)(nil), // 160: protowire.ModifyNotifyTxsConfirmationChangedParamsRequestMessage - (*ModifyNotifyTxsConfirmationChangedParamsResponseMessage)(nil), // 161: protowire.ModifyNotifyTxsConfirmationChangedParamsResponseMessage - (*TxsConfirmationChangedNotificationMessage)(nil), // 162: protowire.TxsConfirmationChangedNotificationMessage - (*NotifyAddressesTxsRequestMessage)(nil), // 163: protowire.NotifyAddressesTxsRequestMessage - (*NotifyAddressesTxsResponseMessage)(nil), // 164: protowire.NotifyAddressesTxsResponseMessage - (*StopNotifyAddressesTxsRequestMessage)(nil), // 165: protowire.StopNotifyAddressesTxsRequestMessage - (*StopNotifyAddressesTxsResponseMessage)(nil), // 166: protowire.StopNotifyAddressesTxsResponseMessage - (*StartNotifyAddressesTxsRequestMessage)(nil), // 167: protowire.StartNotifyAddressesTxsRequestMessage - (*StartNotifyAddressesTxsResponseMessage)(nil), // 168: protowire.StartNotifyAddressesTxsResponseMessage - (*ModifyNotifyAddressesTxsParamsRequestMessage)(nil), // 169: protowire.ModifyNotifyAddressesTxsParamsRequestMessage - (*ModifyNotifyAddressesTxsParamsResponseMessage)(nil), // 170: protowire.ModifyNotifyAddressesTxsParamsResponseMessage - (*AddressesTxsNotificationMessage)(nil), // 171: protowire.AddressesTxsNotificationMessage + (*GetAcceptingBlockHashesOfTxsRequestMessage)(nil), // 130: protowire.GetAcceptingBlockHashesOfTxsRequestMessage + (*GetAcceptingBlockHashesOfTxsResponseMessage)(nil), // 131: protowire.GetAcceptingBlockHashesOfTxsResponseMessage + (*GetTxsRequestMessage)(nil), // 132: protowire.GetTxsRequestMessage + (*GetTxsResponseMessage)(nil), // 133: protowire.GetTxsResponseMessage + (*GetTxsConfirmationsRequestMessage)(nil), // 134: protowire.GetTxsConfirmationsRequestMessage + (*GetTxsConfirmationsResponseMessage)(nil), // 135: protowire.GetTxsConfirmationsResponseMessage + (*NotifyTxsConfirmationChangedRequestMessage)(nil), // 136: protowire.NotifyTxsConfirmationChangedRequestMessage + (*NotifyTxsConfirmationChangedResponseMessage)(nil), // 137: protowire.NotifyTxsConfirmationChangedResponseMessage + (*ModifyNotifyingTxsConfirmationChangedRequestMessage)(nil), // 138: protowire.ModifyNotifyingTxsConfirmationChangedRequestMessage + (*ModifyNotifyingTxsConfirmationChangedResponseMessage)(nil), // 139: protowire.ModifyNotifyingTxsConfirmationChangedResponseMessage + (*TxsConfirmationChangedNotificationMessage)(nil), // 140: protowire.TxsConfirmationChangedNotificationMessage + (*NotifyAddressesTxsRequestMessage)(nil), // 141: protowire.NotifyAddressesTxsRequestMessage + (*NotifyAddressesTxsResponseMessage)(nil), // 142: protowire.NotifyAddressesTxsResponseMessage + (*ModifyNotifyingAddressesTxsRequestMessage)(nil), // 143: protowire.ModifyNotifyingAddressesTxsRequestMessage + (*ModifyNotifyingAddressesTxsResponseMessage)(nil), // 144: protowire.ModifyNotifyingAddressesTxsResponseMessage + (*AddressesTxsNotificationMessage)(nil), // 145: protowire.AddressesTxsNotificationMessage } var file_messages_proto_depIdxs = []int32{ 1, // 0: protowire.KaspadMessage.addresses:type_name -> protowire.AddressesMessage @@ -4032,57 +3433,31 @@ var file_messages_proto_depIdxs = []int32{ 127, // 127: protowire.KaspadMessage.getMempoolEntriesByAddressesResponse:type_name -> protowire.GetMempoolEntriesByAddressesResponseMessage 128, // 128: protowire.KaspadMessage.getCoinSupplyRequest:type_name -> protowire.GetCoinSupplyRequestMessage 129, // 129: protowire.KaspadMessage.getCoinSupplyResponse:type_name -> protowire.GetCoinSupplyResponseMessage - 130, // 130: protowire.KaspadMessage.getAcceptingBlockHashOfTxRequest:type_name -> protowire.GetAcceptingBlockHashOfTxRequestMessage - 131, // 131: protowire.KaspadMessage.getAcceptingBlockHashOfTxResponse:type_name -> protowire.GetAcceptingBlockHashOfTxResponseMessage - 132, // 132: protowire.KaspadMessage.getAcceptingBlockHashesOfTxsRequest:type_name -> protowire.GetAcceptingBlockHashesOfTxsRequestMessage - 133, // 133: protowire.KaspadMessage.getAcceptingBlockHashesOfTxsResponse:type_name -> protowire.GetAcceptingBlockHashesOfTxsResponseMessage - 134, // 134: protowire.KaspadMessage.getAcceptingBlockOfTxRequest:type_name -> protowire.GetAcceptingBlockOfTxRequestMessage - 135, // 135: protowire.KaspadMessage.getAcceptingBlockOfTxResponse:type_name -> protowire.GetAcceptingBlockOfTxResponseMessage - 136, // 136: protowire.KaspadMessage.getAcceptingBlocksOfTxsRequest:type_name -> protowire.GetAcceptingBlocksOfTxsRequestMessage - 137, // 137: protowire.KaspadMessage.getAcceptingBlocksOfTxsResponse:type_name -> protowire.GetAcceptingBlocksOfTxsResponseMessage - 138, // 138: protowire.KaspadMessage.getIncludingBlockHashOfTxRequest:type_name -> protowire.GetIncludingBlockHashOfTxRequestMessage - 139, // 139: protowire.KaspadMessage.getIncludingBlockHashOfTxResponse:type_name -> protowire.GetIncludingBlockHashOfTxResponseMessage - 140, // 140: protowire.KaspadMessage.getIncludingBlockHashesOfTxsRequest:type_name -> protowire.GetIncludingBlockHashesOfTxsRequestMessage - 141, // 141: protowire.KaspadMessage.getIncludingBlockHashesOfTxsResponse:type_name -> protowire.GetIncludingBlockHashesOfTxsResponseMessage - 142, // 142: protowire.KaspadMessage.getIncludingBlockOfTxRequest:type_name -> protowire.GetIncludingBlockOfTxRequestMessage - 143, // 143: protowire.KaspadMessage.getIncludingBlockOfTxResponse:type_name -> protowire.GetIncludingBlockOfTxResponseMessage - 144, // 144: protowire.KaspadMessage.getIncludingBlocksOfTxsRequest:type_name -> protowire.GetIncludingBlocksOfTxsRequestMessage - 145, // 145: protowire.KaspadMessage.getIncludingBlocksOfTxsResponse:type_name -> protowire.GetIncludingBlocksOfTxsResponseMessage - 146, // 146: protowire.KaspadMessage.getTxRequest:type_name -> protowire.GetTxRequestMessage - 147, // 147: protowire.KaspadMessage.getTxResponse:type_name -> protowire.GetTxResponseMessage - 148, // 148: protowire.KaspadMessage.getTxsRequest:type_name -> protowire.GetTxsRequestMessage - 149, // 149: protowire.KaspadMessage.getTxsResponse:type_name -> protowire.GetTxsResponseMessage - 150, // 150: protowire.KaspadMessage.getTxConfirmationsRequest:type_name -> protowire.GetTxConfirmationsRequestMessage - 151, // 151: protowire.KaspadMessage.getTxConfirmationsResponse:type_name -> protowire.GetTxConfirmationsResponseMessage - 152, // 152: protowire.KaspadMessage.getTxsConfirmationsRequest:type_name -> protowire.GetTxsConfirmationsRequestMessage - 153, // 153: protowire.KaspadMessage.getTxsConfirmationsResponse:type_name -> protowire.GetTxsConfirmationsResponseMessage - 154, // 154: protowire.KaspadMessage.notifyTxsConfirmationChangedRequst:type_name -> protowire.NotifyTxsConfirmationChangedRequestMessage - 155, // 155: protowire.KaspadMessage.notifyTxsConfirmationChangedResponse:type_name -> protowire.NotifyTxsConfirmationChangedResponseMessage - 156, // 156: protowire.KaspadMessage.stopNotifyTxsConfirmationChangedRequest:type_name -> protowire.StopNotifyTxsConfirmationChangedRequestMessage - 157, // 157: protowire.KaspadMessage.stopNotifyTxsConfirmationChangedResponse:type_name -> protowire.StopNotifyTxsConfirmationChangedResponseMessage - 158, // 158: protowire.KaspadMessage.startNotifyTxsConfirmationChangedRequest:type_name -> protowire.StartNotifyTxsConfirmationChangedRequestMessage - 159, // 159: protowire.KaspadMessage.startNotifyTxsConfirmationChangedResponse:type_name -> protowire.StartNotifyTxsConfirmationChangedResponseMessage - 160, // 160: protowire.KaspadMessage.modifyNotifyTxsConfirmationChangedParamsRequest:type_name -> protowire.ModifyNotifyTxsConfirmationChangedParamsRequestMessage - 161, // 161: protowire.KaspadMessage.modifyNotifyTxsConfirmationChangedParamsResponse:type_name -> protowire.ModifyNotifyTxsConfirmationChangedParamsResponseMessage - 162, // 162: protowire.KaspadMessage.txsConfirmationChangedNotification:type_name -> protowire.TxsConfirmationChangedNotificationMessage - 163, // 163: protowire.KaspadMessage.notifyAddressesTxsRequest:type_name -> protowire.NotifyAddressesTxsRequestMessage - 164, // 164: protowire.KaspadMessage.notifyAddressesTxsResponse:type_name -> protowire.NotifyAddressesTxsResponseMessage - 165, // 165: protowire.KaspadMessage.stopNotifyAddressesTxsRequest:type_name -> protowire.StopNotifyAddressesTxsRequestMessage - 166, // 166: protowire.KaspadMessage.stopNotifyAddressesTxsResponse:type_name -> protowire.StopNotifyAddressesTxsResponseMessage - 167, // 167: protowire.KaspadMessage.startNotifyAddressesTxsRequest:type_name -> protowire.StartNotifyAddressesTxsRequestMessage - 168, // 168: protowire.KaspadMessage.startNotifyAddressesTxsResponse:type_name -> protowire.StartNotifyAddressesTxsResponseMessage - 169, // 169: protowire.KaspadMessage.modifyNotifyAddressesTxsParamsRequest:type_name -> protowire.ModifyNotifyAddressesTxsParamsRequestMessage - 170, // 170: protowire.KaspadMessage.modifyNotifyAddressesTxsParamsResponse:type_name -> protowire.ModifyNotifyAddressesTxsParamsResponseMessage - 171, // 171: protowire.KaspadMessage.AddressesTxsNotification:type_name -> protowire.AddressesTxsNotificationMessage - 0, // 172: protowire.P2P.MessageStream:input_type -> protowire.KaspadMessage - 0, // 173: protowire.RPC.MessageStream:input_type -> protowire.KaspadMessage - 0, // 174: protowire.P2P.MessageStream:output_type -> protowire.KaspadMessage - 0, // 175: protowire.RPC.MessageStream:output_type -> protowire.KaspadMessage - 174, // [174:176] is the sub-list for method output_type - 172, // [172:174] is the sub-list for method input_type - 172, // [172:172] is the sub-list for extension type_name - 172, // [172:172] is the sub-list for extension extendee - 0, // [0:172] is the sub-list for field type_name + 130, // 130: protowire.KaspadMessage.getAcceptingBlockHashesOfTxsRequest:type_name -> protowire.GetAcceptingBlockHashesOfTxsRequestMessage + 131, // 131: protowire.KaspadMessage.getAcceptingBlockHashesOfTxsResponse:type_name -> protowire.GetAcceptingBlockHashesOfTxsResponseMessage + 132, // 132: protowire.KaspadMessage.getTxsRequest:type_name -> protowire.GetTxsRequestMessage + 133, // 133: protowire.KaspadMessage.getTxsResponse:type_name -> protowire.GetTxsResponseMessage + 134, // 134: protowire.KaspadMessage.getTxsConfirmationsRequest:type_name -> protowire.GetTxsConfirmationsRequestMessage + 135, // 135: protowire.KaspadMessage.getTxsConfirmationsResponse:type_name -> protowire.GetTxsConfirmationsResponseMessage + 136, // 136: protowire.KaspadMessage.notifyTxsConfirmationChangedRequst:type_name -> protowire.NotifyTxsConfirmationChangedRequestMessage + 137, // 137: protowire.KaspadMessage.notifyTxsConfirmationChangedResponse:type_name -> protowire.NotifyTxsConfirmationChangedResponseMessage + 138, // 138: protowire.KaspadMessage.modifyNotifyingTxsConfirmationChangedRequest:type_name -> protowire.ModifyNotifyingTxsConfirmationChangedRequestMessage + 139, // 139: protowire.KaspadMessage.modifyNotifyingTxsConfirmationChangedResponse:type_name -> protowire.ModifyNotifyingTxsConfirmationChangedResponseMessage + 140, // 140: protowire.KaspadMessage.txsConfirmationChangedNotification:type_name -> protowire.TxsConfirmationChangedNotificationMessage + 141, // 141: protowire.KaspadMessage.notifyAddressesTxsRequest:type_name -> protowire.NotifyAddressesTxsRequestMessage + 142, // 142: protowire.KaspadMessage.notifyAddressesTxsResponse:type_name -> protowire.NotifyAddressesTxsResponseMessage + 143, // 143: protowire.KaspadMessage.modifyNotifyingAddressesTxsRequest:type_name -> protowire.ModifyNotifyingAddressesTxsRequestMessage + 144, // 144: protowire.KaspadMessage.modifyNotifyingAddressesTxsResponse:type_name -> protowire.ModifyNotifyingAddressesTxsResponseMessage + 145, // 145: protowire.KaspadMessage.AddressesTxsNotification:type_name -> protowire.AddressesTxsNotificationMessage + 0, // 146: protowire.P2P.MessageStream:input_type -> protowire.KaspadMessage + 0, // 147: protowire.RPC.MessageStream:input_type -> protowire.KaspadMessage + 0, // 148: protowire.P2P.MessageStream:output_type -> protowire.KaspadMessage + 0, // 149: protowire.RPC.MessageStream:output_type -> protowire.KaspadMessage + 148, // [148:150] is the sub-list for method output_type + 146, // [146:148] is the sub-list for method input_type + 146, // [146:146] is the sub-list for extension type_name + 146, // [146:146] is the sub-list for extension extendee + 0, // [0:146] is the sub-list for field type_name } func init() { file_messages_proto_init() } @@ -4237,47 +3612,21 @@ func file_messages_proto_init() { (*KaspadMessage_GetMempoolEntriesByAddressesResponse)(nil), (*KaspadMessage_GetCoinSupplyRequest)(nil), (*KaspadMessage_GetCoinSupplyResponse)(nil), - (*KaspadMessage_GetAcceptingBlockHashOfTxRequest)(nil), - (*KaspadMessage_GetAcceptingBlockHashOfTxResponse)(nil), (*KaspadMessage_GetAcceptingBlockHashesOfTxsRequest)(nil), (*KaspadMessage_GetAcceptingBlockHashesOfTxsResponse)(nil), - (*KaspadMessage_GetAcceptingBlockOfTxRequest)(nil), - (*KaspadMessage_GetAcceptingBlockOfTxResponse)(nil), - (*KaspadMessage_GetAcceptingBlocksOfTxsRequest)(nil), - (*KaspadMessage_GetAcceptingBlocksOfTxsResponse)(nil), - (*KaspadMessage_GetIncludingBlockHashOfTxRequest)(nil), - (*KaspadMessage_GetIncludingBlockHashOfTxResponse)(nil), - (*KaspadMessage_GetIncludingBlockHashesOfTxsRequest)(nil), - (*KaspadMessage_GetIncludingBlockHashesOfTxsResponse)(nil), - (*KaspadMessage_GetIncludingBlockOfTxRequest)(nil), - (*KaspadMessage_GetIncludingBlockOfTxResponse)(nil), - (*KaspadMessage_GetIncludingBlocksOfTxsRequest)(nil), - (*KaspadMessage_GetIncludingBlocksOfTxsResponse)(nil), - (*KaspadMessage_GetTxRequest)(nil), - (*KaspadMessage_GetTxResponse)(nil), (*KaspadMessage_GetTxsRequest)(nil), (*KaspadMessage_GetTxsResponse)(nil), - (*KaspadMessage_GetTxConfirmationsRequest)(nil), - (*KaspadMessage_GetTxConfirmationsResponse)(nil), (*KaspadMessage_GetTxsConfirmationsRequest)(nil), (*KaspadMessage_GetTxsConfirmationsResponse)(nil), (*KaspadMessage_NotifyTxsConfirmationChangedRequst)(nil), (*KaspadMessage_NotifyTxsConfirmationChangedResponse)(nil), - (*KaspadMessage_StopNotifyTxsConfirmationChangedRequest)(nil), - (*KaspadMessage_StopNotifyTxsConfirmationChangedResponse)(nil), - (*KaspadMessage_StartNotifyTxsConfirmationChangedRequest)(nil), - (*KaspadMessage_StartNotifyTxsConfirmationChangedResponse)(nil), - (*KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsRequest)(nil), - (*KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsResponse)(nil), + (*KaspadMessage_ModifyNotifyingTxsConfirmationChangedRequest)(nil), + (*KaspadMessage_ModifyNotifyingTxsConfirmationChangedResponse)(nil), (*KaspadMessage_TxsConfirmationChangedNotification)(nil), (*KaspadMessage_NotifyAddressesTxsRequest)(nil), (*KaspadMessage_NotifyAddressesTxsResponse)(nil), - (*KaspadMessage_StopNotifyAddressesTxsRequest)(nil), - (*KaspadMessage_StopNotifyAddressesTxsResponse)(nil), - (*KaspadMessage_StartNotifyAddressesTxsRequest)(nil), - (*KaspadMessage_StartNotifyAddressesTxsResponse)(nil), - (*KaspadMessage_ModifyNotifyAddressesTxsParamsRequest)(nil), - (*KaspadMessage_ModifyNotifyAddressesTxsParamsResponse)(nil), + (*KaspadMessage_ModifyNotifyingAddressesTxsRequest)(nil), + (*KaspadMessage_ModifyNotifyingAddressesTxsResponse)(nil), (*KaspadMessage_AddressesTxsNotification)(nil), } type x struct{} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto index 15eb22eea9..2b5a0c7682 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto @@ -140,48 +140,22 @@ message KaspadMessage { GetCoinSupplyRequestMessage getCoinSupplyRequest = 1086; GetCoinSupplyResponseMessage getCoinSupplyResponse= 1087; - GetAcceptingBlockHashOfTxRequestMessage getAcceptingBlockHashOfTxRequest = 1088; - GetAcceptingBlockHashOfTxResponseMessage getAcceptingBlockHashOfTxResponse = 1089; - GetAcceptingBlockHashesOfTxsRequestMessage getAcceptingBlockHashesOfTxsRequest = 1090; - GetAcceptingBlockHashesOfTxsResponseMessage getAcceptingBlockHashesOfTxsResponse = 1091; - GetAcceptingBlockOfTxRequestMessage getAcceptingBlockOfTxRequest = 1092; - GetAcceptingBlockOfTxResponseMessage getAcceptingBlockOfTxResponse = 1093; - GetAcceptingBlocksOfTxsRequestMessage getAcceptingBlocksOfTxsRequest = 1094; - GetAcceptingBlocksOfTxsResponseMessage getAcceptingBlocksOfTxsResponse = 1095; - GetIncludingBlockHashOfTxRequestMessage getIncludingBlockHashOfTxRequest = 1096; - GetIncludingBlockHashOfTxResponseMessage getIncludingBlockHashOfTxResponse = 1097; - GetIncludingBlockHashesOfTxsRequestMessage getIncludingBlockHashesOfTxsRequest = 1098; - GetIncludingBlockHashesOfTxsResponseMessage getIncludingBlockHashesOfTxsResponse = 1099; - GetIncludingBlockOfTxRequestMessage getIncludingBlockOfTxRequest = 1100; - GetIncludingBlockOfTxResponseMessage getIncludingBlockOfTxResponse = 1101; - GetIncludingBlocksOfTxsRequestMessage getIncludingBlocksOfTxsRequest = 1102; - GetIncludingBlocksOfTxsResponseMessage getIncludingBlocksOfTxsResponse = 1103; - GetTxRequestMessage getTxRequest = 1104; - GetTxResponseMessage getTxResponse = 1105; - GetTxsRequestMessage getTxsRequest = 1106; - GetTxsResponseMessage getTxsResponse = 1107; - GetTxConfirmationsRequestMessage getTxConfirmationsRequest = 1108; - GetTxConfirmationsResponseMessage getTxConfirmationsResponse = 1109; - GetTxsConfirmationsRequestMessage getTxsConfirmationsRequest = 1110; - GetTxsConfirmationsResponseMessage getTxsConfirmationsResponse = 1111; - NotifyTxsConfirmationChangedRequestMessage notifyTxsConfirmationChangedRequst = 1112; - NotifyTxsConfirmationChangedResponseMessage notifyTxsConfirmationChangedResponse = 1113; - StopNotifyTxsConfirmationChangedRequestMessage stopNotifyTxsConfirmationChangedRequest = 1114; - StopNotifyTxsConfirmationChangedResponseMessage stopNotifyTxsConfirmationChangedResponse = 1115; - StartNotifyTxsConfirmationChangedRequestMessage startNotifyTxsConfirmationChangedRequest = 1116; - StartNotifyTxsConfirmationChangedResponseMessage startNotifyTxsConfirmationChangedResponse = 1117; - ModifyNotifyTxsConfirmationChangedParamsRequestMessage modifyNotifyTxsConfirmationChangedParamsRequest = 1118; - ModifyNotifyTxsConfirmationChangedParamsResponseMessage modifyNotifyTxsConfirmationChangedParamsResponse = 1119; - TxsConfirmationChangedNotificationMessage txsConfirmationChangedNotification = 1120; - NotifyAddressesTxsRequestMessage notifyAddressesTxsRequest = 1121; - NotifyAddressesTxsResponseMessage notifyAddressesTxsResponse = 1122; - StopNotifyAddressesTxsRequestMessage stopNotifyAddressesTxsRequest = 1123; - StopNotifyAddressesTxsResponseMessage stopNotifyAddressesTxsResponse = 1124; - StartNotifyAddressesTxsRequestMessage startNotifyAddressesTxsRequest = 1125; - StartNotifyAddressesTxsResponseMessage startNotifyAddressesTxsResponse = 1126; - ModifyNotifyAddressesTxsParamsRequestMessage modifyNotifyAddressesTxsParamsRequest = 1127; - ModifyNotifyAddressesTxsParamsResponseMessage modifyNotifyAddressesTxsParamsResponse = 1128; - AddressesTxsNotificationMessage AddressesTxsNotification = 1129; + GetAcceptingBlockHashesOfTxsRequestMessage getAcceptingBlockHashesOfTxsRequest = 1088; + GetAcceptingBlockHashesOfTxsResponseMessage getAcceptingBlockHashesOfTxsResponse = 1089; + GetTxsRequestMessage getTxsRequest = 1090; + GetTxsResponseMessage getTxsResponse = 1091; + GetTxsConfirmationsRequestMessage getTxsConfirmationsRequest = 1092; + GetTxsConfirmationsResponseMessage getTxsConfirmationsResponse = 1093; + NotifyTxsConfirmationChangedRequestMessage notifyTxsConfirmationChangedRequst = 1094; + NotifyTxsConfirmationChangedResponseMessage notifyTxsConfirmationChangedResponse = 1095; + ModifyNotifyingTxsConfirmationChangedRequestMessage modifyNotifyingTxsConfirmationChangedRequest = 1096; + ModifyNotifyingTxsConfirmationChangedResponseMessage modifyNotifyingTxsConfirmationChangedResponse = 1097; + TxsConfirmationChangedNotificationMessage txsConfirmationChangedNotification = 1098; + NotifyAddressesTxsRequestMessage notifyAddressesTxsRequest = 1099; + NotifyAddressesTxsResponseMessage notifyAddressesTxsResponse = 1100; + ModifyNotifyingAddressesTxsRequestMessage modifyNotifyingAddressesTxsRequest = 1101; + ModifyNotifyingAddressesTxsResponseMessage modifyNotifyingAddressesTxsResponse = 1102; + AddressesTxsNotificationMessage AddressesTxsNotification = 1103; } } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md index 7eedc4b94c..12d9dcd443 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md @@ -119,45 +119,21 @@ - [RpcTxIDBlockPair](#protowire.RpcTxIDBlockPair) - [GetAcceptingBlockHashesOfTxsRequestMessage](#protowire.GetAcceptingBlockHashesOfTxsRequestMessage) - [GetAcceptingBlockHashesOfTxsResponseMessage](#protowire.GetAcceptingBlockHashesOfTxsResponseMessage) - - [GetAcceptingBlockOfTxRequestMessage](#protowire.GetAcceptingBlockOfTxRequestMessage) - - [GetAcceptingBlockOfTxResponseMessage](#protowire.GetAcceptingBlockOfTxResponseMessage) - - [GetAcceptingBlocksOfTxsRequestMessage](#protowire.GetAcceptingBlocksOfTxsRequestMessage) - - [GetAcceptingBlocksOfTxsResponseMessage](#protowire.GetAcceptingBlocksOfTxsResponseMessage) - - [GetIncludingBlockHashOfTxRequestMessage](#protowire.GetIncludingBlockHashOfTxRequestMessage) - - [GetIncludingBlockHashOfTxResponseMessage](#protowire.GetIncludingBlockHashOfTxResponseMessage) - - [GetIncludingBlockHashesOfTxsRequestMessage](#protowire.GetIncludingBlockHashesOfTxsRequestMessage) - - [GetIncludingBlockHashesOfTxsResponseMessage](#protowire.GetIncludingBlockHashesOfTxsResponseMessage) - - [GetIncludingBlockOfTxRequestMessage](#protowire.GetIncludingBlockOfTxRequestMessage) - - [GetIncludingBlockOfTxResponseMessage](#protowire.GetIncludingBlockOfTxResponseMessage) - - [GetIncludingBlocksOfTxsRequestMessage](#protowire.GetIncludingBlocksOfTxsRequestMessage) - - [GetIncludingBlocksOfTxsResponseMessage](#protowire.GetIncludingBlocksOfTxsResponseMessage) - - [GetTxRequestMessage](#protowire.GetTxRequestMessage) - - [GetTxResponseMessage](#protowire.GetTxResponseMessage) - [GetTxsRequestMessage](#protowire.GetTxsRequestMessage) - [GetTxsResponseMessage](#protowire.GetTxsResponseMessage) - - [GetTxConfirmationsRequestMessage](#protowire.GetTxConfirmationsRequestMessage) - - [GetTxConfirmationsResponseMessage](#protowire.GetTxConfirmationsResponseMessage) - [GetTxsConfirmationsRequestMessage](#protowire.GetTxsConfirmationsRequestMessage) - [GetTxsConfirmationsResponseMessage](#protowire.GetTxsConfirmationsResponseMessage) - [NotifyTxsConfirmationChangedRequestMessage](#protowire.NotifyTxsConfirmationChangedRequestMessage) - [NotifyTxsConfirmationChangedResponseMessage](#protowire.NotifyTxsConfirmationChangedResponseMessage) - [TxsConfirmationChangedNotificationMessage](#protowire.TxsConfirmationChangedNotificationMessage) - - [StopNotifyTxsConfirmationChangedRequestMessage](#protowire.StopNotifyTxsConfirmationChangedRequestMessage) - - [StopNotifyTxsConfirmationChangedResponseMessage](#protowire.StopNotifyTxsConfirmationChangedResponseMessage) - - [StartNotifyTxsConfirmationChangedRequestMessage](#protowire.StartNotifyTxsConfirmationChangedRequestMessage) - - [StartNotifyTxsConfirmationChangedResponseMessage](#protowire.StartNotifyTxsConfirmationChangedResponseMessage) - - [ModifyNotifyTxsConfirmationChangedParamsRequestMessage](#protowire.ModifyNotifyTxsConfirmationChangedParamsRequestMessage) - - [ModifyNotifyTxsConfirmationChangedParamsResponseMessage](#protowire.ModifyNotifyTxsConfirmationChangedParamsResponseMessage) + - [ModifyNotifyingTxsConfirmationChangedRequestMessage](#protowire.ModifyNotifyingTxsConfirmationChangedRequestMessage) + - [ModifyNotifyingTxsConfirmationChangedResponseMessage](#protowire.ModifyNotifyingTxsConfirmationChangedResponseMessage) - [TxEntryByAddress](#protowire.TxEntryByAddress) - [TxEntriesByAddresses](#protowire.TxEntriesByAddresses) - [NotifyAddressesTxsRequestMessage](#protowire.NotifyAddressesTxsRequestMessage) - [NotifyAddressesTxsResponseMessage](#protowire.NotifyAddressesTxsResponseMessage) - - [StopNotifyAddressesTxsRequestMessage](#protowire.StopNotifyAddressesTxsRequestMessage) - - [StopNotifyAddressesTxsResponseMessage](#protowire.StopNotifyAddressesTxsResponseMessage) - - [StartNotifyAddressesTxsRequestMessage](#protowire.StartNotifyAddressesTxsRequestMessage) - - [StartNotifyAddressesTxsResponseMessage](#protowire.StartNotifyAddressesTxsResponseMessage) - - [ModifyNotifyAddressesTxsParamsRequestMessage](#protowire.ModifyNotifyAddressesTxsParamsRequestMessage) - - [ModifyNotifyAddressesTxsParamsResponseMessage](#protowire.ModifyNotifyAddressesTxsParamsResponseMessage) + - [ModifyNotifyingAddressesTxsRequestMessage](#protowire.ModifyNotifyingAddressesTxsRequestMessage) + - [ModifyNotifyingAddressesTxsResponseMessage](#protowire.ModifyNotifyingAddressesTxsResponseMessage) - [AddressesTxsNotificationMessage](#protowire.AddressesTxsNotificationMessage) - [SubmitBlockResponseMessage.RejectReason](#protowire.SubmitBlockResponseMessage.RejectReason) @@ -2015,227 +1991,6 @@ Kaspad most be started with the `--txindex` flag for this Request to work. - - -### GetAcceptingBlockOfTxRequestMessage -Kaspad most be started with the `--txindex` flag for this Request to work. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| txID | [string](#string) | | | -| includeTransactions | [bool](#bool) | | | - - - - - - - - -### GetAcceptingBlockOfTxResponseMessage - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| block | [RpcBlock](#protowire.RpcBlock) | | | -| error | [RPCError](#protowire.RPCError) | | | - - - - - - - - -### GetAcceptingBlocksOfTxsRequestMessage -Kaspad most be started with the `--txindex` flag for this Request to work. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| txIDs | [string](#string) | repeated | | -| includeTransactions | [bool](#bool) | | | - - - - - - - - -### GetAcceptingBlocksOfTxsResponseMessage - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| txIDBlockPairs | [RpcTxIDBlockPair](#protowire.RpcTxIDBlockPair) | repeated | | -| error | [RPCError](#protowire.RPCError) | | | - - - - - - - - -### GetIncludingBlockHashOfTxRequestMessage -Kaspad most be started with the `--txindex` flag for this Request to work. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| txID | [string](#string) | | | - - - - - - - - -### GetIncludingBlockHashOfTxResponseMessage - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| hash | [string](#string) | | | -| error | [RPCError](#protowire.RPCError) | | | - - - - - - - - -### GetIncludingBlockHashesOfTxsRequestMessage -Kaspad most be started with the `--txindex` flag for this Request to work. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| txIDs | [string](#string) | repeated | | - - - - - - - - -### GetIncludingBlockHashesOfTxsResponseMessage - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| txIDBlockHashPairs | [RpcTxIDBlockHashPair](#protowire.RpcTxIDBlockHashPair) | repeated | | -| error | [RPCError](#protowire.RPCError) | | | - - - - - - - - -### GetIncludingBlockOfTxRequestMessage -Kaspad most be started with the `--txindex` flag for this Request to work. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| txID | [string](#string) | | | -| includeTransactions | [bool](#bool) | | | - - - - - - - - -### GetIncludingBlockOfTxResponseMessage - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| block | [RpcBlock](#protowire.RpcBlock) | | | -| error | [RPCError](#protowire.RPCError) | | | - - - - - - - - -### GetIncludingBlocksOfTxsRequestMessage -Kaspad most be started with the `--txindex` flag for this Request to work. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| txIDs | [string](#string) | repeated | | -| includeTransactions | [bool](#bool) | | | - - - - - - - - -### GetIncludingBlocksOfTxsResponseMessage - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| txIDBlockPairs | [RpcTxIDBlockPair](#protowire.RpcTxIDBlockPair) | repeated | | -| error | [RPCError](#protowire.RPCError) | | | - - - - - - - - -### GetTxRequestMessage -Kaspad most be started with the `--txindex` flag for this Request to work. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| txID | [string](#string) | | | - - - - - - - - -### GetTxResponseMessage - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| transaction | [RpcTransaction](#protowire.RpcTransaction) | | | -| error | [RPCError](#protowire.RPCError) | | | - - - - - - ### GetTxsRequestMessage @@ -2267,37 +2022,6 @@ Kaspad most be started with the `--txindex` flag for this Request to work. - - -### GetTxConfirmationsRequestMessage -Kaspad most be started with the `--txindex` flag for this Request to work. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| txID | [string](#string) | | | - - - - - - - - -### GetTxConfirmationsResponseMessage - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| confirmations | [int64](#int64) | | | -| error | [RPCError](#protowire.RPCError) | | | - - - - - - ### GetTxsConfirmationsRequestMessage @@ -2381,76 +2105,17 @@ TxsConfirmationChangedNotificationMessage is the notification about txs pertaini - + -### StopNotifyTxsConfirmationChangedRequestMessage -most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| TxIDs | [string](#string) | repeated | | - - - - - - - - -### StopNotifyTxsConfirmationChangedResponseMessage - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| error | [RPCError](#protowire.RPCError) | | | - - - - - - - - -### StartNotifyTxsConfirmationChangedRequestMessage -StartNotifyTxsConfirmationChangedRequestMessage starts listening for Transaction confirmations with the specified TxIDs -Most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| TxIDs | [string](#string) | repeated | | - - - - - - - - -### StartNotifyTxsConfirmationChangedResponseMessage - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| error | [RPCError](#protowire.RPCError) | | | - - - - - - - - -### ModifyNotifyTxsConfirmationChangedParamsRequestMessage -ModifyNotifyTxsConfirmationChangedParamsRequestMessage modfies the params of a registered `NotifyTxsConfirmationChangedRequstMessage` +### ModifyNotifyingTxsConfirmationChangedRequestMessage +ModifyNotifyingTxsConfirmationChangedRequestMessage modfies the params of a registered `NotifyTxsConfirmationChangedRequstMessage` most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | +| addTxIDs | [string](#string) | repeated | | +| removeTxIDs | [string](#string) | repeated | | | requiredConfirmations | [uint32](#uint32) | | | | includePending | [bool](#bool) | | | @@ -2459,9 +2124,9 @@ most be registered to NotifyTxsConfirmationChangedRequstMessage for this command - + -### ModifyNotifyTxsConfirmationChangedParamsResponseMessage +### ModifyNotifyingTxsConfirmationChangedResponseMessage @@ -2541,77 +2206,17 @@ NotifyAddressesTxsChangedRequestMessage Listens for Txs pertaining to specified - - -### StopNotifyAddressesTxsRequestMessage -StopNotifyAddressesTxsRequestMessage stops listening for Txs pertaining to specified addresses -Most be registered to NotifyAddressTxChangedRequestMessage for this command to work - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| addresses | [string](#string) | repeated | | - - - - - - - - -### StopNotifyAddressesTxsResponseMessage - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| error | [RPCError](#protowire.RPCError) | | | - - - - - - - - -### StartNotifyAddressesTxsRequestMessage -StartNotifyAddressesTxsRequestMessage starts listening for Txs pertaining to specified addresses -Most be registered to NotifyAddressTxChangedRequestMessage for this command to work - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| addresses | [string](#string) | repeated | | - - - - - - - - -### StartNotifyAddressesTxsResponseMessage - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| error | [RPCError](#protowire.RPCError) | | | - - - - - - - + -### ModifyNotifyAddressesTxsParamsRequestMessage +### ModifyNotifyingAddressesTxsRequestMessage ModifyNotifyAddressesTxsParamsRequestMessage modifies the params used for a regesitered `NotifyAddressesTxsRequest` Most be registered to NotifyAddressTxChangedRequestMessage for this command to work | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | +| AddAddresses | [string](#string) | repeated | | +| RemoveAddresses | [string](#string) | repeated | | | requiredConfirmations | [uint32](#uint32) | | | | includePending | [bool](#bool) | | | | includeSending | [bool](#bool) | | | @@ -2622,9 +2227,9 @@ Most be registered to NotifyAddressTxChangedRequestMessage for this command to w - + -### ModifyNotifyAddressesTxsParamsResponseMessage +### ModifyNotifyingAddressesTxsResponseMessage diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go index 68d105c815..b9846c67cf 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go @@ -6380,7 +6380,7 @@ func (x *RpcTxIDBlockPair) GetBlock() *RpcBlock { return nil } -//Kaspad most be started with the `--txindex` flag for this Request to work. +// Kaspad most be started with the `--txindex` flag for this Request to work. type GetAcceptingBlockHashesOfTxsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6483,18 +6483,17 @@ func (x *GetAcceptingBlockHashesOfTxsResponseMessage) GetError() *RPCError { return nil } -//Kaspad most be started with the `--txindex` flag for this Request to work. -type GetAcceptingBlockOfTxRequestMessage struct { +// Kaspad most be started with the `--txindex` flag for this Request to work. +type GetTxsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` - IncludeTransactions bool `protobuf:"varint,2,opt,name=includeTransactions,proto3" json:"includeTransactions,omitempty"` + TxIDs []string `protobuf:"bytes,1,rep,name=txIDs,proto3" json:"txIDs,omitempty"` } -func (x *GetAcceptingBlockOfTxRequestMessage) Reset() { - *x = GetAcceptingBlockOfTxRequestMessage{} +func (x *GetTxsRequestMessage) Reset() { + *x = GetTxsRequestMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6502,13 +6501,13 @@ func (x *GetAcceptingBlockOfTxRequestMessage) Reset() { } } -func (x *GetAcceptingBlockOfTxRequestMessage) String() string { +func (x *GetTxsRequestMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetAcceptingBlockOfTxRequestMessage) ProtoMessage() {} +func (*GetTxsRequestMessage) ProtoMessage() {} -func (x *GetAcceptingBlockOfTxRequestMessage) ProtoReflect() protoreflect.Message { +func (x *GetTxsRequestMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[115] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6520,36 +6519,29 @@ func (x *GetAcceptingBlockOfTxRequestMessage) ProtoReflect() protoreflect.Messag return mi.MessageOf(x) } -// Deprecated: Use GetAcceptingBlockOfTxRequestMessage.ProtoReflect.Descriptor instead. -func (*GetAcceptingBlockOfTxRequestMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use GetTxsRequestMessage.ProtoReflect.Descriptor instead. +func (*GetTxsRequestMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{115} } -func (x *GetAcceptingBlockOfTxRequestMessage) GetTxID() string { - if x != nil { - return x.TxID - } - return "" -} - -func (x *GetAcceptingBlockOfTxRequestMessage) GetIncludeTransactions() bool { +func (x *GetTxsRequestMessage) GetTxIDs() []string { if x != nil { - return x.IncludeTransactions + return x.TxIDs } - return false + return nil } -type GetAcceptingBlockOfTxResponseMessage struct { +type GetTxsResponseMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Block *RpcBlock `protobuf:"bytes,1,opt,name=block,proto3" json:"block,omitempty"` - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` + Transactions []*RpcTransaction `protobuf:"bytes,1,rep,name=transactions,proto3" json:"transactions,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } -func (x *GetAcceptingBlockOfTxResponseMessage) Reset() { - *x = GetAcceptingBlockOfTxResponseMessage{} +func (x *GetTxsResponseMessage) Reset() { + *x = GetTxsResponseMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6557,13 +6549,13 @@ func (x *GetAcceptingBlockOfTxResponseMessage) Reset() { } } -func (x *GetAcceptingBlockOfTxResponseMessage) String() string { +func (x *GetTxsResponseMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetAcceptingBlockOfTxResponseMessage) ProtoMessage() {} +func (*GetTxsResponseMessage) ProtoMessage() {} -func (x *GetAcceptingBlockOfTxResponseMessage) ProtoReflect() protoreflect.Message { +func (x *GetTxsResponseMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[116] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6575,19 +6567,19 @@ func (x *GetAcceptingBlockOfTxResponseMessage) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use GetAcceptingBlockOfTxResponseMessage.ProtoReflect.Descriptor instead. -func (*GetAcceptingBlockOfTxResponseMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use GetTxsResponseMessage.ProtoReflect.Descriptor instead. +func (*GetTxsResponseMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{116} } -func (x *GetAcceptingBlockOfTxResponseMessage) GetBlock() *RpcBlock { +func (x *GetTxsResponseMessage) GetTransactions() []*RpcTransaction { if x != nil { - return x.Block + return x.Transactions } return nil } -func (x *GetAcceptingBlockOfTxResponseMessage) GetError() *RPCError { +func (x *GetTxsResponseMessage) GetError() *RPCError { if x != nil { return x.Error } @@ -6595,17 +6587,16 @@ func (x *GetAcceptingBlockOfTxResponseMessage) GetError() *RPCError { } //Kaspad most be started with the `--txindex` flag for this Request to work. -type GetAcceptingBlocksOfTxsRequestMessage struct { +type GetTxsConfirmationsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxIDs []string `protobuf:"bytes,1,rep,name=txIDs,proto3" json:"txIDs,omitempty"` - IncludeTransactions bool `protobuf:"varint,2,opt,name=includeTransactions,proto3" json:"includeTransactions,omitempty"` + TxIDs []string `protobuf:"bytes,1,rep,name=txIDs,proto3" json:"txIDs,omitempty"` } -func (x *GetAcceptingBlocksOfTxsRequestMessage) Reset() { - *x = GetAcceptingBlocksOfTxsRequestMessage{} +func (x *GetTxsConfirmationsRequestMessage) Reset() { + *x = GetTxsConfirmationsRequestMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[117] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6613,13 +6604,13 @@ func (x *GetAcceptingBlocksOfTxsRequestMessage) Reset() { } } -func (x *GetAcceptingBlocksOfTxsRequestMessage) String() string { +func (x *GetTxsConfirmationsRequestMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetAcceptingBlocksOfTxsRequestMessage) ProtoMessage() {} +func (*GetTxsConfirmationsRequestMessage) ProtoMessage() {} -func (x *GetAcceptingBlocksOfTxsRequestMessage) ProtoReflect() protoreflect.Message { +func (x *GetTxsConfirmationsRequestMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[117] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6631,36 +6622,29 @@ func (x *GetAcceptingBlocksOfTxsRequestMessage) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use GetAcceptingBlocksOfTxsRequestMessage.ProtoReflect.Descriptor instead. -func (*GetAcceptingBlocksOfTxsRequestMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use GetTxsConfirmationsRequestMessage.ProtoReflect.Descriptor instead. +func (*GetTxsConfirmationsRequestMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{117} } -func (x *GetAcceptingBlocksOfTxsRequestMessage) GetTxIDs() []string { +func (x *GetTxsConfirmationsRequestMessage) GetTxIDs() []string { if x != nil { return x.TxIDs } return nil } -func (x *GetAcceptingBlocksOfTxsRequestMessage) GetIncludeTransactions() bool { - if x != nil { - return x.IncludeTransactions - } - return false -} - -type GetAcceptingBlocksOfTxsResponseMessage struct { +type GetTxsConfirmationsResponseMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxIDBlockPairs []*RpcTxIDBlockPair `protobuf:"bytes,1,rep,name=txIDBlockPairs,proto3" json:"txIDBlockPairs,omitempty"` - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` + TxIDConfirmationsPairs []*RpcTxIDConfirmationsPair `protobuf:"bytes,1,rep,name=txIDConfirmationsPairs,proto3" json:"txIDConfirmationsPairs,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } -func (x *GetAcceptingBlocksOfTxsResponseMessage) Reset() { - *x = GetAcceptingBlocksOfTxsResponseMessage{} +func (x *GetTxsConfirmationsResponseMessage) Reset() { + *x = GetTxsConfirmationsResponseMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[118] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6668,13 +6652,13 @@ func (x *GetAcceptingBlocksOfTxsResponseMessage) Reset() { } } -func (x *GetAcceptingBlocksOfTxsResponseMessage) String() string { +func (x *GetTxsConfirmationsResponseMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetAcceptingBlocksOfTxsResponseMessage) ProtoMessage() {} +func (*GetTxsConfirmationsResponseMessage) ProtoMessage() {} -func (x *GetAcceptingBlocksOfTxsResponseMessage) ProtoReflect() protoreflect.Message { +func (x *GetTxsConfirmationsResponseMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[118] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6686,36 +6670,39 @@ func (x *GetAcceptingBlocksOfTxsResponseMessage) ProtoReflect() protoreflect.Mes return mi.MessageOf(x) } -// Deprecated: Use GetAcceptingBlocksOfTxsResponseMessage.ProtoReflect.Descriptor instead. -func (*GetAcceptingBlocksOfTxsResponseMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use GetTxsConfirmationsResponseMessage.ProtoReflect.Descriptor instead. +func (*GetTxsConfirmationsResponseMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{118} } -func (x *GetAcceptingBlocksOfTxsResponseMessage) GetTxIDBlockPairs() []*RpcTxIDBlockPair { +func (x *GetTxsConfirmationsResponseMessage) GetTxIDConfirmationsPairs() []*RpcTxIDConfirmationsPair { if x != nil { - return x.TxIDBlockPairs + return x.TxIDConfirmationsPairs } return nil } -func (x *GetAcceptingBlocksOfTxsResponseMessage) GetError() *RPCError { +func (x *GetTxsConfirmationsResponseMessage) GetError() *RPCError { if x != nil { return x.Error } return nil } -//Kaspad most be started with the `--txindex` flag for this Request to work. -type GetIncludingBlockHashOfTxRequestMessage struct { +// NotifyTxsConfirmationChangedRequstMessage is a listener that registers confirmations from supplied TxIDs +// Kaspad most be started with the `--txindex` flag for this Request to work. +type NotifyTxsConfirmationChangedRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` + TxIDs []string `protobuf:"bytes,1,rep,name=TxIDs,proto3" json:"TxIDs,omitempty"` //initial TxIds to listen for when regestering for notifications + RequiredConfirmations uint32 `protobuf:"varint,2,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` // number of confirmations until a transaction is considered confirmed + IncludePending bool `protobuf:"varint,3,opt,name=includePending,proto3" json:"includePending,omitempty"` // weather to notify confirmation changes during pre-Confirmed states } -func (x *GetIncludingBlockHashOfTxRequestMessage) Reset() { - *x = GetIncludingBlockHashOfTxRequestMessage{} +func (x *NotifyTxsConfirmationChangedRequestMessage) Reset() { + *x = NotifyTxsConfirmationChangedRequestMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[119] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6723,13 +6710,13 @@ func (x *GetIncludingBlockHashOfTxRequestMessage) Reset() { } } -func (x *GetIncludingBlockHashOfTxRequestMessage) String() string { +func (x *NotifyTxsConfirmationChangedRequestMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetIncludingBlockHashOfTxRequestMessage) ProtoMessage() {} +func (*NotifyTxsConfirmationChangedRequestMessage) ProtoMessage() {} -func (x *GetIncludingBlockHashOfTxRequestMessage) ProtoReflect() protoreflect.Message { +func (x *NotifyTxsConfirmationChangedRequestMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[119] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6741,29 +6728,42 @@ func (x *GetIncludingBlockHashOfTxRequestMessage) ProtoReflect() protoreflect.Me return mi.MessageOf(x) } -// Deprecated: Use GetIncludingBlockHashOfTxRequestMessage.ProtoReflect.Descriptor instead. -func (*GetIncludingBlockHashOfTxRequestMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use NotifyTxsConfirmationChangedRequestMessage.ProtoReflect.Descriptor instead. +func (*NotifyTxsConfirmationChangedRequestMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{119} } -func (x *GetIncludingBlockHashOfTxRequestMessage) GetTxID() string { +func (x *NotifyTxsConfirmationChangedRequestMessage) GetTxIDs() []string { if x != nil { - return x.TxID + return x.TxIDs } - return "" + return nil +} + +func (x *NotifyTxsConfirmationChangedRequestMessage) GetRequiredConfirmations() uint32 { + if x != nil { + return x.RequiredConfirmations + } + return 0 +} + +func (x *NotifyTxsConfirmationChangedRequestMessage) GetIncludePending() bool { + if x != nil { + return x.IncludePending + } + return false } -type GetIncludingBlockHashOfTxResponseMessage struct { +type NotifyTxsConfirmationChangedResponseMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } -func (x *GetIncludingBlockHashOfTxResponseMessage) Reset() { - *x = GetIncludingBlockHashOfTxResponseMessage{} +func (x *NotifyTxsConfirmationChangedResponseMessage) Reset() { + *x = NotifyTxsConfirmationChangedResponseMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[120] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6771,13 +6771,13 @@ func (x *GetIncludingBlockHashOfTxResponseMessage) Reset() { } } -func (x *GetIncludingBlockHashOfTxResponseMessage) String() string { +func (x *NotifyTxsConfirmationChangedResponseMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetIncludingBlockHashOfTxResponseMessage) ProtoMessage() {} +func (*NotifyTxsConfirmationChangedResponseMessage) ProtoMessage() {} -func (x *GetIncludingBlockHashOfTxResponseMessage) ProtoReflect() protoreflect.Message { +func (x *NotifyTxsConfirmationChangedResponseMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[120] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6789,36 +6789,33 @@ func (x *GetIncludingBlockHashOfTxResponseMessage) ProtoReflect() protoreflect.M return mi.MessageOf(x) } -// Deprecated: Use GetIncludingBlockHashOfTxResponseMessage.ProtoReflect.Descriptor instead. -func (*GetIncludingBlockHashOfTxResponseMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use NotifyTxsConfirmationChangedResponseMessage.ProtoReflect.Descriptor instead. +func (*NotifyTxsConfirmationChangedResponseMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{120} } -func (x *GetIncludingBlockHashOfTxResponseMessage) GetHash() string { - if x != nil { - return x.Hash - } - return "" -} - -func (x *GetIncludingBlockHashOfTxResponseMessage) GetError() *RPCError { +func (x *NotifyTxsConfirmationChangedResponseMessage) GetError() *RPCError { if x != nil { return x.Error } return nil } -//Kaspad most be started with the `--txindex` flag for this Request to work. -type GetIncludingBlockHashesOfTxsRequestMessage struct { +// TxsConfirmationChangedNotificationMessage is the notification about txs pertaining to specified TxIDs +type TxsConfirmationChangedNotificationMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxIDs []string `protobuf:"bytes,1,rep,name=txIDs,proto3" json:"txIDs,omitempty"` + RequiredConfirmations uint32 `protobuf:"varint,1,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` //the required confirmations set when notification was sent + Pending []*RpcTxIDConfirmationsPair `protobuf:"bytes,2,rep,name=pending,proto3" json:"pending,omitempty"` // RpcTxIDConfirmationsPairs which have entered the virtual chain but not passed the required confirmations + Confirmed []*RpcTxIDConfirmationsPair `protobuf:"bytes,3,rep,name=confirmed,proto3" json:"confirmed,omitempty"` // RpcTxIDConfirmationsPairs which have entered the virtual chain and passed the required confirmations + UnconfirmedTxIds []string `protobuf:"bytes,4,rep,name=unconfirmedTxIds,proto3" json:"unconfirmedTxIds,omitempty"` // TxIds which were not confirmed within the required confirmations. + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } -func (x *GetIncludingBlockHashesOfTxsRequestMessage) Reset() { - *x = GetIncludingBlockHashesOfTxsRequestMessage{} +func (x *TxsConfirmationChangedNotificationMessage) Reset() { + *x = TxsConfirmationChangedNotificationMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[121] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6826,13 +6823,13 @@ func (x *GetIncludingBlockHashesOfTxsRequestMessage) Reset() { } } -func (x *GetIncludingBlockHashesOfTxsRequestMessage) String() string { +func (x *TxsConfirmationChangedNotificationMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetIncludingBlockHashesOfTxsRequestMessage) ProtoMessage() {} +func (*TxsConfirmationChangedNotificationMessage) ProtoMessage() {} -func (x *GetIncludingBlockHashesOfTxsRequestMessage) ProtoReflect() protoreflect.Message { +func (x *TxsConfirmationChangedNotificationMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[121] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6844,29 +6841,61 @@ func (x *GetIncludingBlockHashesOfTxsRequestMessage) ProtoReflect() protoreflect return mi.MessageOf(x) } -// Deprecated: Use GetIncludingBlockHashesOfTxsRequestMessage.ProtoReflect.Descriptor instead. -func (*GetIncludingBlockHashesOfTxsRequestMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use TxsConfirmationChangedNotificationMessage.ProtoReflect.Descriptor instead. +func (*TxsConfirmationChangedNotificationMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{121} } -func (x *GetIncludingBlockHashesOfTxsRequestMessage) GetTxIDs() []string { +func (x *TxsConfirmationChangedNotificationMessage) GetRequiredConfirmations() uint32 { if x != nil { - return x.TxIDs + return x.RequiredConfirmations + } + return 0 +} + +func (x *TxsConfirmationChangedNotificationMessage) GetPending() []*RpcTxIDConfirmationsPair { + if x != nil { + return x.Pending + } + return nil +} + +func (x *TxsConfirmationChangedNotificationMessage) GetConfirmed() []*RpcTxIDConfirmationsPair { + if x != nil { + return x.Confirmed + } + return nil +} + +func (x *TxsConfirmationChangedNotificationMessage) GetUnconfirmedTxIds() []string { + if x != nil { + return x.UnconfirmedTxIds + } + return nil +} + +func (x *TxsConfirmationChangedNotificationMessage) GetError() *RPCError { + if x != nil { + return x.Error } return nil } -type GetIncludingBlockHashesOfTxsResponseMessage struct { +// ModifyNotifyingTxsConfirmationChangedRequestMessage modfies the params of a registered `NotifyTxsConfirmationChangedRequstMessage` +// most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work +type ModifyNotifyingTxsConfirmationChangedRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxIDBlockHashPairs []*RpcTxIDBlockHashPair `protobuf:"bytes,1,rep,name=txIDBlockHashPairs,proto3" json:"txIDBlockHashPairs,omitempty"` - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` + AddTxIDs []string `protobuf:"bytes,1,rep,name=addTxIDs,proto3" json:"addTxIDs,omitempty"` + RemoveTxIDs []string `protobuf:"bytes,2,rep,name=removeTxIDs,proto3" json:"removeTxIDs,omitempty"` + RequiredConfirmations uint32 `protobuf:"varint,3,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` + IncludePending bool `protobuf:"varint,4,opt,name=includePending,proto3" json:"includePending,omitempty"` } -func (x *GetIncludingBlockHashesOfTxsResponseMessage) Reset() { - *x = GetIncludingBlockHashesOfTxsResponseMessage{} +func (x *ModifyNotifyingTxsConfirmationChangedRequestMessage) Reset() { + *x = ModifyNotifyingTxsConfirmationChangedRequestMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[122] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6874,13 +6903,13 @@ func (x *GetIncludingBlockHashesOfTxsResponseMessage) Reset() { } } -func (x *GetIncludingBlockHashesOfTxsResponseMessage) String() string { +func (x *ModifyNotifyingTxsConfirmationChangedRequestMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetIncludingBlockHashesOfTxsResponseMessage) ProtoMessage() {} +func (*ModifyNotifyingTxsConfirmationChangedRequestMessage) ProtoMessage() {} -func (x *GetIncludingBlockHashesOfTxsResponseMessage) ProtoReflect() protoreflect.Message { +func (x *ModifyNotifyingTxsConfirmationChangedRequestMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[122] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6892,37 +6921,49 @@ func (x *GetIncludingBlockHashesOfTxsResponseMessage) ProtoReflect() protoreflec return mi.MessageOf(x) } -// Deprecated: Use GetIncludingBlockHashesOfTxsResponseMessage.ProtoReflect.Descriptor instead. -func (*GetIncludingBlockHashesOfTxsResponseMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use ModifyNotifyingTxsConfirmationChangedRequestMessage.ProtoReflect.Descriptor instead. +func (*ModifyNotifyingTxsConfirmationChangedRequestMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{122} } -func (x *GetIncludingBlockHashesOfTxsResponseMessage) GetTxIDBlockHashPairs() []*RpcTxIDBlockHashPair { +func (x *ModifyNotifyingTxsConfirmationChangedRequestMessage) GetAddTxIDs() []string { if x != nil { - return x.TxIDBlockHashPairs + return x.AddTxIDs } return nil } -func (x *GetIncludingBlockHashesOfTxsResponseMessage) GetError() *RPCError { +func (x *ModifyNotifyingTxsConfirmationChangedRequestMessage) GetRemoveTxIDs() []string { if x != nil { - return x.Error + return x.RemoveTxIDs } return nil } -//Kaspad most be started with the `--txindex` flag for this Request to work. -type GetIncludingBlockOfTxRequestMessage struct { +func (x *ModifyNotifyingTxsConfirmationChangedRequestMessage) GetRequiredConfirmations() uint32 { + if x != nil { + return x.RequiredConfirmations + } + return 0 +} + +func (x *ModifyNotifyingTxsConfirmationChangedRequestMessage) GetIncludePending() bool { + if x != nil { + return x.IncludePending + } + return false +} + +type ModifyNotifyingTxsConfirmationChangedResponseMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` - IncludeTransactions bool `protobuf:"varint,2,opt,name=includeTransactions,proto3" json:"includeTransactions,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } -func (x *GetIncludingBlockOfTxRequestMessage) Reset() { - *x = GetIncludingBlockOfTxRequestMessage{} +func (x *ModifyNotifyingTxsConfirmationChangedResponseMessage) Reset() { + *x = ModifyNotifyingTxsConfirmationChangedResponseMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[123] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6930,13 +6971,13 @@ func (x *GetIncludingBlockOfTxRequestMessage) Reset() { } } -func (x *GetIncludingBlockOfTxRequestMessage) String() string { +func (x *ModifyNotifyingTxsConfirmationChangedResponseMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetIncludingBlockOfTxRequestMessage) ProtoMessage() {} +func (*ModifyNotifyingTxsConfirmationChangedResponseMessage) ProtoMessage() {} -func (x *GetIncludingBlockOfTxRequestMessage) ProtoReflect() protoreflect.Message { +func (x *ModifyNotifyingTxsConfirmationChangedResponseMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[123] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6948,36 +6989,30 @@ func (x *GetIncludingBlockOfTxRequestMessage) ProtoReflect() protoreflect.Messag return mi.MessageOf(x) } -// Deprecated: Use GetIncludingBlockOfTxRequestMessage.ProtoReflect.Descriptor instead. -func (*GetIncludingBlockOfTxRequestMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use ModifyNotifyingTxsConfirmationChangedResponseMessage.ProtoReflect.Descriptor instead. +func (*ModifyNotifyingTxsConfirmationChangedResponseMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{123} } -func (x *GetIncludingBlockOfTxRequestMessage) GetTxID() string { - if x != nil { - return x.TxID - } - return "" -} - -func (x *GetIncludingBlockOfTxRequestMessage) GetIncludeTransactions() bool { +func (x *ModifyNotifyingTxsConfirmationChangedResponseMessage) GetError() *RPCError { if x != nil { - return x.IncludeTransactions + return x.Error } - return false + return nil } -type GetIncludingBlockOfTxResponseMessage struct { +type TxEntryByAddress struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Block *RpcBlock `protobuf:"bytes,1,opt,name=block,proto3" json:"block,omitempty"` - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + TxId string `protobuf:"bytes,2,opt,name=txId,proto3" json:"txId,omitempty"` + Confirmations uint32 `protobuf:"varint,3,opt,name=confirmations,proto3" json:"confirmations,omitempty"` } -func (x *GetIncludingBlockOfTxResponseMessage) Reset() { - *x = GetIncludingBlockOfTxResponseMessage{} +func (x *TxEntryByAddress) Reset() { + *x = TxEntryByAddress{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[124] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6985,13 +7020,13 @@ func (x *GetIncludingBlockOfTxResponseMessage) Reset() { } } -func (x *GetIncludingBlockOfTxResponseMessage) String() string { +func (x *TxEntryByAddress) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetIncludingBlockOfTxResponseMessage) ProtoMessage() {} +func (*TxEntryByAddress) ProtoMessage() {} -func (x *GetIncludingBlockOfTxResponseMessage) ProtoReflect() protoreflect.Message { +func (x *TxEntryByAddress) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[124] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7003,37 +7038,43 @@ func (x *GetIncludingBlockOfTxResponseMessage) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use GetIncludingBlockOfTxResponseMessage.ProtoReflect.Descriptor instead. -func (*GetIncludingBlockOfTxResponseMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use TxEntryByAddress.ProtoReflect.Descriptor instead. +func (*TxEntryByAddress) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{124} } -func (x *GetIncludingBlockOfTxResponseMessage) GetBlock() *RpcBlock { +func (x *TxEntryByAddress) GetAddress() string { if x != nil { - return x.Block + return x.Address } - return nil + return "" } -func (x *GetIncludingBlockOfTxResponseMessage) GetError() *RPCError { +func (x *TxEntryByAddress) GetTxId() string { if x != nil { - return x.Error + return x.TxId } - return nil + return "" } -//Kaspad most be started with the `--txindex` flag for this Request to work. -type GetIncludingBlocksOfTxsRequestMessage struct { +func (x *TxEntryByAddress) GetConfirmations() uint32 { + if x != nil { + return x.Confirmations + } + return 0 +} + +type TxEntriesByAddresses struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxIDs []string `protobuf:"bytes,1,rep,name=txIDs,proto3" json:"txIDs,omitempty"` - IncludeTransactions bool `protobuf:"varint,2,opt,name=includeTransactions,proto3" json:"includeTransactions,omitempty"` + Sent []*TxEntryByAddress `protobuf:"bytes,1,rep,name=sent,proto3" json:"sent,omitempty"` + Received []*TxEntryByAddress `protobuf:"bytes,2,rep,name=received,proto3" json:"received,omitempty"` } -func (x *GetIncludingBlocksOfTxsRequestMessage) Reset() { - *x = GetIncludingBlocksOfTxsRequestMessage{} +func (x *TxEntriesByAddresses) Reset() { + *x = TxEntriesByAddresses{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[125] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7041,13 +7082,13 @@ func (x *GetIncludingBlocksOfTxsRequestMessage) Reset() { } } -func (x *GetIncludingBlocksOfTxsRequestMessage) String() string { +func (x *TxEntriesByAddresses) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetIncludingBlocksOfTxsRequestMessage) ProtoMessage() {} +func (*TxEntriesByAddresses) ProtoMessage() {} -func (x *GetIncludingBlocksOfTxsRequestMessage) ProtoReflect() protoreflect.Message { +func (x *TxEntriesByAddresses) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[125] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7059,36 +7100,40 @@ func (x *GetIncludingBlocksOfTxsRequestMessage) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use GetIncludingBlocksOfTxsRequestMessage.ProtoReflect.Descriptor instead. -func (*GetIncludingBlocksOfTxsRequestMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use TxEntriesByAddresses.ProtoReflect.Descriptor instead. +func (*TxEntriesByAddresses) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{125} } -func (x *GetIncludingBlocksOfTxsRequestMessage) GetTxIDs() []string { +func (x *TxEntriesByAddresses) GetSent() []*TxEntryByAddress { if x != nil { - return x.TxIDs + return x.Sent } return nil } -func (x *GetIncludingBlocksOfTxsRequestMessage) GetIncludeTransactions() bool { +func (x *TxEntriesByAddresses) GetReceived() []*TxEntryByAddress { if x != nil { - return x.IncludeTransactions + return x.Received } - return false + return nil } -type GetIncludingBlocksOfTxsResponseMessage struct { +// NotifyAddressesTxsChangedRequestMessage Listens for Txs pertaining to specified addresses according to the params specified +type NotifyAddressesTxsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxIDBlockPairs []*RpcTxIDBlockPair `protobuf:"bytes,1,rep,name=txIDBlockPairs,proto3" json:"txIDBlockPairs,omitempty"` - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` + Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` //initial addresses to listen for Tx changes when regestering for notifications + RequiredConfirmations uint32 `protobuf:"varint,2,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` // number of confirmations until a transaction is considered confirmed + IncludePending bool `protobuf:"varint,3,opt,name=includePending,proto3" json:"includePending,omitempty"` //whether to notify confirmation changes during pre-Confirmed states + IncludeSending bool `protobuf:"varint,4,opt,name=includeSending,proto3" json:"includeSending,omitempty"` //whether to listen on addresses sending txs + IncludeReceiving bool `protobuf:"varint,5,opt,name=includeReceiving,proto3" json:"includeReceiving,omitempty"` //whether to listen on addresses reciving txs } -func (x *GetIncludingBlocksOfTxsResponseMessage) Reset() { - *x = GetIncludingBlocksOfTxsResponseMessage{} +func (x *NotifyAddressesTxsRequestMessage) Reset() { + *x = NotifyAddressesTxsRequestMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_proto_msgTypes[126] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7096,13 +7141,13 @@ func (x *GetIncludingBlocksOfTxsResponseMessage) Reset() { } } -func (x *GetIncludingBlocksOfTxsResponseMessage) String() string { +func (x *NotifyAddressesTxsRequestMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetIncludingBlocksOfTxsResponseMessage) ProtoMessage() {} +func (*NotifyAddressesTxsRequestMessage) ProtoMessage() {} -func (x *GetIncludingBlocksOfTxsResponseMessage) ProtoReflect() protoreflect.Message { +func (x *NotifyAddressesTxsRequestMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_proto_msgTypes[126] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7114,99 +7159,71 @@ func (x *GetIncludingBlocksOfTxsResponseMessage) ProtoReflect() protoreflect.Mes return mi.MessageOf(x) } -// Deprecated: Use GetIncludingBlocksOfTxsResponseMessage.ProtoReflect.Descriptor instead. -func (*GetIncludingBlocksOfTxsResponseMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use NotifyAddressesTxsRequestMessage.ProtoReflect.Descriptor instead. +func (*NotifyAddressesTxsRequestMessage) Descriptor() ([]byte, []int) { return file_rpc_proto_rawDescGZIP(), []int{126} } -func (x *GetIncludingBlocksOfTxsResponseMessage) GetTxIDBlockPairs() []*RpcTxIDBlockPair { +func (x *NotifyAddressesTxsRequestMessage) GetAddresses() []string { if x != nil { - return x.TxIDBlockPairs + return x.Addresses } return nil } -func (x *GetIncludingBlocksOfTxsResponseMessage) GetError() *RPCError { +func (x *NotifyAddressesTxsRequestMessage) GetRequiredConfirmations() uint32 { if x != nil { - return x.Error + return x.RequiredConfirmations } - return nil -} - -//Kaspad most be started with the `--txindex` flag for this Request to work. -type GetTxRequestMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` + return 0 } -func (x *GetTxRequestMessage) Reset() { - *x = GetTxRequestMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[127] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *NotifyAddressesTxsRequestMessage) GetIncludePending() bool { + if x != nil { + return x.IncludePending } + return false } -func (x *GetTxRequestMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetTxRequestMessage) ProtoMessage() {} - -func (x *GetTxRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[127] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *NotifyAddressesTxsRequestMessage) GetIncludeSending() bool { + if x != nil { + return x.IncludeSending } - return mi.MessageOf(x) -} - -// Deprecated: Use GetTxRequestMessage.ProtoReflect.Descriptor instead. -func (*GetTxRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{127} + return false } -func (x *GetTxRequestMessage) GetTxID() string { +func (x *NotifyAddressesTxsRequestMessage) GetIncludeReceiving() bool { if x != nil { - return x.TxID + return x.IncludeReceiving } - return "" + return false } -type GetTxResponseMessage struct { +type NotifyAddressesTxsResponseMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Transaction *RpcTransaction `protobuf:"bytes,1,opt,name=transaction,proto3" json:"transaction,omitempty"` - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } -func (x *GetTxResponseMessage) Reset() { - *x = GetTxResponseMessage{} +func (x *NotifyAddressesTxsResponseMessage) Reset() { + *x = NotifyAddressesTxsResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[128] + mi := &file_rpc_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetTxResponseMessage) String() string { +func (x *NotifyAddressesTxsResponseMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetTxResponseMessage) ProtoMessage() {} +func (*NotifyAddressesTxsResponseMessage) ProtoMessage() {} -func (x *GetTxResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[128] +func (x *NotifyAddressesTxsResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[127] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7217,51 +7234,50 @@ func (x *GetTxResponseMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetTxResponseMessage.ProtoReflect.Descriptor instead. -func (*GetTxResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{128} -} - -func (x *GetTxResponseMessage) GetTransaction() *RpcTransaction { - if x != nil { - return x.Transaction - } - return nil +// Deprecated: Use NotifyAddressesTxsResponseMessage.ProtoReflect.Descriptor instead. +func (*NotifyAddressesTxsResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{127} } -func (x *GetTxResponseMessage) GetError() *RPCError { +func (x *NotifyAddressesTxsResponseMessage) GetError() *RPCError { if x != nil { return x.Error } return nil } -//Kaspad most be started with the `--txindex` flag for this Request to work. -type GetTxsRequestMessage struct { +// ModifyNotifyAddressesTxsParamsRequestMessage modifies the params used for a regesitered `NotifyAddressesTxsRequest` +// Most be registered to NotifyAddressTxChangedRequestMessage for this command to work +type ModifyNotifyingAddressesTxsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxIDs []string `protobuf:"bytes,1,rep,name=txIDs,proto3" json:"txIDs,omitempty"` + AddAddresses []string `protobuf:"bytes,1,rep,name=AddAddresses,proto3" json:"AddAddresses,omitempty"` + RemoveAddresses []string `protobuf:"bytes,2,rep,name=RemoveAddresses,proto3" json:"RemoveAddresses,omitempty"` + RequiredConfirmations uint32 `protobuf:"varint,3,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` + IncludePending bool `protobuf:"varint,4,opt,name=includePending,proto3" json:"includePending,omitempty"` + IncludeSending bool `protobuf:"varint,5,opt,name=includeSending,proto3" json:"includeSending,omitempty"` + IncludeReceiving bool `protobuf:"varint,6,opt,name=includeReceiving,proto3" json:"includeReceiving,omitempty"` } -func (x *GetTxsRequestMessage) Reset() { - *x = GetTxsRequestMessage{} +func (x *ModifyNotifyingAddressesTxsRequestMessage) Reset() { + *x = ModifyNotifyingAddressesTxsRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[129] + mi := &file_rpc_proto_msgTypes[128] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetTxsRequestMessage) String() string { +func (x *ModifyNotifyingAddressesTxsRequestMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetTxsRequestMessage) ProtoMessage() {} +func (*ModifyNotifyingAddressesTxsRequestMessage) ProtoMessage() {} -func (x *GetTxsRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[129] +func (x *ModifyNotifyingAddressesTxsRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[128] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7272,99 +7288,78 @@ func (x *GetTxsRequestMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetTxsRequestMessage.ProtoReflect.Descriptor instead. -func (*GetTxsRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{129} +// Deprecated: Use ModifyNotifyingAddressesTxsRequestMessage.ProtoReflect.Descriptor instead. +func (*ModifyNotifyingAddressesTxsRequestMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{128} } -func (x *GetTxsRequestMessage) GetTxIDs() []string { +func (x *ModifyNotifyingAddressesTxsRequestMessage) GetAddAddresses() []string { if x != nil { - return x.TxIDs + return x.AddAddresses } return nil } -type GetTxsResponseMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Transactions []*RpcTransaction `protobuf:"bytes,1,rep,name=transactions,proto3" json:"transactions,omitempty"` - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` -} - -func (x *GetTxsResponseMessage) Reset() { - *x = GetTxsResponseMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[130] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ModifyNotifyingAddressesTxsRequestMessage) GetRemoveAddresses() []string { + if x != nil { + return x.RemoveAddresses } + return nil } -func (x *GetTxsResponseMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetTxsResponseMessage) ProtoMessage() {} - -func (x *GetTxsResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[130] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *ModifyNotifyingAddressesTxsRequestMessage) GetRequiredConfirmations() uint32 { + if x != nil { + return x.RequiredConfirmations } - return mi.MessageOf(x) + return 0 } -// Deprecated: Use GetTxsResponseMessage.ProtoReflect.Descriptor instead. -func (*GetTxsResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{130} +func (x *ModifyNotifyingAddressesTxsRequestMessage) GetIncludePending() bool { + if x != nil { + return x.IncludePending + } + return false } -func (x *GetTxsResponseMessage) GetTransactions() []*RpcTransaction { +func (x *ModifyNotifyingAddressesTxsRequestMessage) GetIncludeSending() bool { if x != nil { - return x.Transactions + return x.IncludeSending } - return nil + return false } -func (x *GetTxsResponseMessage) GetError() *RPCError { +func (x *ModifyNotifyingAddressesTxsRequestMessage) GetIncludeReceiving() bool { if x != nil { - return x.Error + return x.IncludeReceiving } - return nil + return false } -//Kaspad most be started with the `--txindex` flag for this Request to work. -type GetTxConfirmationsRequestMessage struct { +type ModifyNotifyingAddressesTxsResponseMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TxID string `protobuf:"bytes,1,opt,name=txID,proto3" json:"txID,omitempty"` + Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } -func (x *GetTxConfirmationsRequestMessage) Reset() { - *x = GetTxConfirmationsRequestMessage{} +func (x *ModifyNotifyingAddressesTxsResponseMessage) Reset() { + *x = ModifyNotifyingAddressesTxsResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[131] + mi := &file_rpc_proto_msgTypes[129] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetTxConfirmationsRequestMessage) String() string { +func (x *ModifyNotifyingAddressesTxsResponseMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetTxConfirmationsRequestMessage) ProtoMessage() {} +func (*ModifyNotifyingAddressesTxsResponseMessage) ProtoMessage() {} -func (x *GetTxConfirmationsRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[131] +func (x *ModifyNotifyingAddressesTxsResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[129] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7375,44 +7370,47 @@ func (x *GetTxConfirmationsRequestMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetTxConfirmationsRequestMessage.ProtoReflect.Descriptor instead. -func (*GetTxConfirmationsRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{131} +// Deprecated: Use ModifyNotifyingAddressesTxsResponseMessage.ProtoReflect.Descriptor instead. +func (*ModifyNotifyingAddressesTxsResponseMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{129} } -func (x *GetTxConfirmationsRequestMessage) GetTxID() string { +func (x *ModifyNotifyingAddressesTxsResponseMessage) GetError() *RPCError { if x != nil { - return x.TxID + return x.Error } - return "" + return nil } -type GetTxConfirmationsResponseMessage struct { +// AddressesTxsNotificationMessage is the notification about txs pertaining to specified addresses +type AddressesTxsNotificationMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Confirmations int64 `protobuf:"varint,1,opt,name=confirmations,proto3" json:"confirmations,omitempty"` - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` + RequiredConfirmations uint32 `protobuf:"varint,1,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` //the required confirmations set when notification was sent + Pending *TxEntriesByAddresses `protobuf:"bytes,2,opt,name=pending,proto3" json:"pending,omitempty"` // TxEntriesByAddresses which have entered the blockdag but not passed the required confirmations + Confirmed *TxEntriesByAddresses `protobuf:"bytes,3,opt,name=confirmed,proto3" json:"confirmed,omitempty"` // TxEntriesByAddresses which have entered the blockdag and passed the required confirmations + Unconfirmed *TxEntriesByAddresses `protobuf:"bytes,4,opt,name=unconfirmed,proto3" json:"unconfirmed,omitempty"` // TxEntriesByAddresses which have been pending, but removed via a reorg within the number of required confirmations. } -func (x *GetTxConfirmationsResponseMessage) Reset() { - *x = GetTxConfirmationsResponseMessage{} +func (x *AddressesTxsNotificationMessage) Reset() { + *x = AddressesTxsNotificationMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[132] + mi := &file_rpc_proto_msgTypes[130] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetTxConfirmationsResponseMessage) String() string { +func (x *AddressesTxsNotificationMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetTxConfirmationsResponseMessage) ProtoMessage() {} +func (*AddressesTxsNotificationMessage) ProtoMessage() {} -func (x *GetTxConfirmationsResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[132] +func (x *AddressesTxsNotificationMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_proto_msgTypes[130] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7423,2985 +7421,1306 @@ func (x *GetTxConfirmationsResponseMessage) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use GetTxConfirmationsResponseMessage.ProtoReflect.Descriptor instead. -func (*GetTxConfirmationsResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{132} +// Deprecated: Use AddressesTxsNotificationMessage.ProtoReflect.Descriptor instead. +func (*AddressesTxsNotificationMessage) Descriptor() ([]byte, []int) { + return file_rpc_proto_rawDescGZIP(), []int{130} } -func (x *GetTxConfirmationsResponseMessage) GetConfirmations() int64 { +func (x *AddressesTxsNotificationMessage) GetRequiredConfirmations() uint32 { if x != nil { - return x.Confirmations + return x.RequiredConfirmations } return 0 } -func (x *GetTxConfirmationsResponseMessage) GetError() *RPCError { +func (x *AddressesTxsNotificationMessage) GetPending() *TxEntriesByAddresses { if x != nil { - return x.Error + return x.Pending } return nil } -//Kaspad most be started with the `--txindex` flag for this Request to work. -type GetTxsConfirmationsRequestMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TxIDs []string `protobuf:"bytes,1,rep,name=txIDs,proto3" json:"txIDs,omitempty"` -} - -func (x *GetTxsConfirmationsRequestMessage) Reset() { - *x = GetTxsConfirmationsRequestMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[133] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetTxsConfirmationsRequestMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetTxsConfirmationsRequestMessage) ProtoMessage() {} - -func (x *GetTxsConfirmationsRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[133] - 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 GetTxsConfirmationsRequestMessage.ProtoReflect.Descriptor instead. -func (*GetTxsConfirmationsRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{133} -} - -func (x *GetTxsConfirmationsRequestMessage) GetTxIDs() []string { +func (x *AddressesTxsNotificationMessage) GetConfirmed() *TxEntriesByAddresses { if x != nil { - return x.TxIDs + return x.Confirmed } return nil } -type GetTxsConfirmationsResponseMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TxIDConfirmationsPairs []*RpcTxIDConfirmationsPair `protobuf:"bytes,1,rep,name=txIDConfirmationsPairs,proto3" json:"txIDConfirmationsPairs,omitempty"` - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` -} - -func (x *GetTxsConfirmationsResponseMessage) Reset() { - *x = GetTxsConfirmationsResponseMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[134] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetTxsConfirmationsResponseMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetTxsConfirmationsResponseMessage) ProtoMessage() {} - -func (x *GetTxsConfirmationsResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[134] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *AddressesTxsNotificationMessage) GetUnconfirmed() *TxEntriesByAddresses { + if x != nil { + return x.Unconfirmed } - return mi.MessageOf(x) + return nil } -// Deprecated: Use GetTxsConfirmationsResponseMessage.ProtoReflect.Descriptor instead. -func (*GetTxsConfirmationsResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{134} -} +var File_rpc_proto protoreflect.FileDescriptor -func (x *GetTxsConfirmationsResponseMessage) GetTxIDConfirmationsPairs() []*RpcTxIDConfirmationsPair { - if x != nil { - return x.TxIDConfirmationsPairs - } - return nil -} - -func (x *GetTxsConfirmationsResponseMessage) GetError() *RPCError { - if x != nil { - return x.Error - } - return nil -} - -// NotifyTxsConfirmationChangedRequstMessage is a listener that registers confirmations from supplied TxIDs -// Kaspad most be started with the `--txindex` flag for this Request to work. -type NotifyTxsConfirmationChangedRequestMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TxIDs []string `protobuf:"bytes,1,rep,name=TxIDs,proto3" json:"TxIDs,omitempty"` //initial TxIds to listen for when regestering for notifications - RequiredConfirmations uint32 `protobuf:"varint,2,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` // number of confirmations until a transaction is considered confirmed - IncludePending bool `protobuf:"varint,3,opt,name=includePending,proto3" json:"includePending,omitempty"` // weather to notify confirmation changes during pre-Confirmed states -} - -func (x *NotifyTxsConfirmationChangedRequestMessage) Reset() { - *x = NotifyTxsConfirmationChangedRequestMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[135] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NotifyTxsConfirmationChangedRequestMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NotifyTxsConfirmationChangedRequestMessage) ProtoMessage() {} - -func (x *NotifyTxsConfirmationChangedRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[135] - 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 NotifyTxsConfirmationChangedRequestMessage.ProtoReflect.Descriptor instead. -func (*NotifyTxsConfirmationChangedRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{135} -} - -func (x *NotifyTxsConfirmationChangedRequestMessage) GetTxIDs() []string { - if x != nil { - return x.TxIDs - } - return nil -} - -func (x *NotifyTxsConfirmationChangedRequestMessage) GetRequiredConfirmations() uint32 { - if x != nil { - return x.RequiredConfirmations - } - return 0 -} - -func (x *NotifyTxsConfirmationChangedRequestMessage) GetIncludePending() bool { - if x != nil { - return x.IncludePending - } - return false -} - -type NotifyTxsConfirmationChangedResponseMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` -} - -func (x *NotifyTxsConfirmationChangedResponseMessage) Reset() { - *x = NotifyTxsConfirmationChangedResponseMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[136] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NotifyTxsConfirmationChangedResponseMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NotifyTxsConfirmationChangedResponseMessage) ProtoMessage() {} - -func (x *NotifyTxsConfirmationChangedResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[136] - 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 NotifyTxsConfirmationChangedResponseMessage.ProtoReflect.Descriptor instead. -func (*NotifyTxsConfirmationChangedResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{136} -} - -func (x *NotifyTxsConfirmationChangedResponseMessage) GetError() *RPCError { - if x != nil { - return x.Error - } - return nil -} - -// TxsConfirmationChangedNotificationMessage is the notification about txs pertaining to specified TxIDs -type TxsConfirmationChangedNotificationMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequiredConfirmations uint32 `protobuf:"varint,1,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` //the required confirmations set when notification was sent - Pending []*RpcTxIDConfirmationsPair `protobuf:"bytes,2,rep,name=pending,proto3" json:"pending,omitempty"` // RpcTxIDConfirmationsPairs which have entered the virtual chain but not passed the required confirmations - Confirmed []*RpcTxIDConfirmationsPair `protobuf:"bytes,3,rep,name=confirmed,proto3" json:"confirmed,omitempty"` // RpcTxIDConfirmationsPairs which have entered the virtual chain and passed the required confirmations - UnconfirmedTxIds []string `protobuf:"bytes,4,rep,name=unconfirmedTxIds,proto3" json:"unconfirmedTxIds,omitempty"` // TxIds which were not confirmed within the required confirmations. - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` -} - -func (x *TxsConfirmationChangedNotificationMessage) Reset() { - *x = TxsConfirmationChangedNotificationMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[137] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TxsConfirmationChangedNotificationMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TxsConfirmationChangedNotificationMessage) ProtoMessage() {} - -func (x *TxsConfirmationChangedNotificationMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[137] - 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 TxsConfirmationChangedNotificationMessage.ProtoReflect.Descriptor instead. -func (*TxsConfirmationChangedNotificationMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{137} -} - -func (x *TxsConfirmationChangedNotificationMessage) GetRequiredConfirmations() uint32 { - if x != nil { - return x.RequiredConfirmations - } - return 0 -} - -func (x *TxsConfirmationChangedNotificationMessage) GetPending() []*RpcTxIDConfirmationsPair { - if x != nil { - return x.Pending - } - return nil -} - -func (x *TxsConfirmationChangedNotificationMessage) GetConfirmed() []*RpcTxIDConfirmationsPair { - if x != nil { - return x.Confirmed - } - return nil -} - -func (x *TxsConfirmationChangedNotificationMessage) GetUnconfirmedTxIds() []string { - if x != nil { - return x.UnconfirmedTxIds - } - return nil -} - -func (x *TxsConfirmationChangedNotificationMessage) GetError() *RPCError { - if x != nil { - return x.Error - } - return nil -} - -// most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work -type StopNotifyTxsConfirmationChangedRequestMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TxIDs []string `protobuf:"bytes,1,rep,name=TxIDs,proto3" json:"TxIDs,omitempty"` -} - -func (x *StopNotifyTxsConfirmationChangedRequestMessage) Reset() { - *x = StopNotifyTxsConfirmationChangedRequestMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[138] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StopNotifyTxsConfirmationChangedRequestMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StopNotifyTxsConfirmationChangedRequestMessage) ProtoMessage() {} - -func (x *StopNotifyTxsConfirmationChangedRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[138] - 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 StopNotifyTxsConfirmationChangedRequestMessage.ProtoReflect.Descriptor instead. -func (*StopNotifyTxsConfirmationChangedRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{138} -} - -func (x *StopNotifyTxsConfirmationChangedRequestMessage) GetTxIDs() []string { - if x != nil { - return x.TxIDs - } - return nil -} - -type StopNotifyTxsConfirmationChangedResponseMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` -} - -func (x *StopNotifyTxsConfirmationChangedResponseMessage) Reset() { - *x = StopNotifyTxsConfirmationChangedResponseMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[139] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StopNotifyTxsConfirmationChangedResponseMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StopNotifyTxsConfirmationChangedResponseMessage) ProtoMessage() {} - -func (x *StopNotifyTxsConfirmationChangedResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[139] - 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 StopNotifyTxsConfirmationChangedResponseMessage.ProtoReflect.Descriptor instead. -func (*StopNotifyTxsConfirmationChangedResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{139} -} - -func (x *StopNotifyTxsConfirmationChangedResponseMessage) GetError() *RPCError { - if x != nil { - return x.Error - } - return nil -} - -// StartNotifyTxsConfirmationChangedRequestMessage starts listening for Transaction confirmations with the specified TxIDs -// Most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work -type StartNotifyTxsConfirmationChangedRequestMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TxIDs []string `protobuf:"bytes,1,rep,name=TxIDs,proto3" json:"TxIDs,omitempty"` -} - -func (x *StartNotifyTxsConfirmationChangedRequestMessage) Reset() { - *x = StartNotifyTxsConfirmationChangedRequestMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[140] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartNotifyTxsConfirmationChangedRequestMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartNotifyTxsConfirmationChangedRequestMessage) ProtoMessage() {} - -func (x *StartNotifyTxsConfirmationChangedRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[140] - 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 StartNotifyTxsConfirmationChangedRequestMessage.ProtoReflect.Descriptor instead. -func (*StartNotifyTxsConfirmationChangedRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{140} -} - -func (x *StartNotifyTxsConfirmationChangedRequestMessage) GetTxIDs() []string { - if x != nil { - return x.TxIDs - } - return nil -} - -type StartNotifyTxsConfirmationChangedResponseMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` -} - -func (x *StartNotifyTxsConfirmationChangedResponseMessage) Reset() { - *x = StartNotifyTxsConfirmationChangedResponseMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[141] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartNotifyTxsConfirmationChangedResponseMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartNotifyTxsConfirmationChangedResponseMessage) ProtoMessage() {} - -func (x *StartNotifyTxsConfirmationChangedResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[141] - 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 StartNotifyTxsConfirmationChangedResponseMessage.ProtoReflect.Descriptor instead. -func (*StartNotifyTxsConfirmationChangedResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{141} -} - -func (x *StartNotifyTxsConfirmationChangedResponseMessage) GetError() *RPCError { - if x != nil { - return x.Error - } - return nil -} - -// ModifyNotifyTxsConfirmationChangedParamsRequestMessage modfies the params of a registered `NotifyTxsConfirmationChangedRequstMessage` -// most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work -type ModifyNotifyTxsConfirmationChangedParamsRequestMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequiredConfirmations uint32 `protobuf:"varint,1,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` - IncludePending bool `protobuf:"varint,2,opt,name=includePending,proto3" json:"includePending,omitempty"` -} - -func (x *ModifyNotifyTxsConfirmationChangedParamsRequestMessage) Reset() { - *x = ModifyNotifyTxsConfirmationChangedParamsRequestMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[142] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ModifyNotifyTxsConfirmationChangedParamsRequestMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ModifyNotifyTxsConfirmationChangedParamsRequestMessage) ProtoMessage() {} - -func (x *ModifyNotifyTxsConfirmationChangedParamsRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[142] - 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 ModifyNotifyTxsConfirmationChangedParamsRequestMessage.ProtoReflect.Descriptor instead. -func (*ModifyNotifyTxsConfirmationChangedParamsRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{142} -} - -func (x *ModifyNotifyTxsConfirmationChangedParamsRequestMessage) GetRequiredConfirmations() uint32 { - if x != nil { - return x.RequiredConfirmations - } - return 0 -} - -func (x *ModifyNotifyTxsConfirmationChangedParamsRequestMessage) GetIncludePending() bool { - if x != nil { - return x.IncludePending - } - return false -} - -type ModifyNotifyTxsConfirmationChangedParamsResponseMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` -} - -func (x *ModifyNotifyTxsConfirmationChangedParamsResponseMessage) Reset() { - *x = ModifyNotifyTxsConfirmationChangedParamsResponseMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[143] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ModifyNotifyTxsConfirmationChangedParamsResponseMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ModifyNotifyTxsConfirmationChangedParamsResponseMessage) ProtoMessage() {} - -func (x *ModifyNotifyTxsConfirmationChangedParamsResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[143] - 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 ModifyNotifyTxsConfirmationChangedParamsResponseMessage.ProtoReflect.Descriptor instead. -func (*ModifyNotifyTxsConfirmationChangedParamsResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{143} -} - -func (x *ModifyNotifyTxsConfirmationChangedParamsResponseMessage) GetError() *RPCError { - if x != nil { - return x.Error - } - return nil -} - -type TxEntryByAddress struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - TxId string `protobuf:"bytes,2,opt,name=txId,proto3" json:"txId,omitempty"` - Confirmations uint32 `protobuf:"varint,3,opt,name=confirmations,proto3" json:"confirmations,omitempty"` -} - -func (x *TxEntryByAddress) Reset() { - *x = TxEntryByAddress{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[144] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TxEntryByAddress) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TxEntryByAddress) ProtoMessage() {} - -func (x *TxEntryByAddress) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[144] - 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 TxEntryByAddress.ProtoReflect.Descriptor instead. -func (*TxEntryByAddress) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{144} -} - -func (x *TxEntryByAddress) GetAddress() string { - if x != nil { - return x.Address - } - return "" -} - -func (x *TxEntryByAddress) GetTxId() string { - if x != nil { - return x.TxId - } - return "" -} - -func (x *TxEntryByAddress) GetConfirmations() uint32 { - if x != nil { - return x.Confirmations - } - return 0 -} - -type TxEntriesByAddresses struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Sent []*TxEntryByAddress `protobuf:"bytes,1,rep,name=sent,proto3" json:"sent,omitempty"` - Received []*TxEntryByAddress `protobuf:"bytes,2,rep,name=received,proto3" json:"received,omitempty"` -} - -func (x *TxEntriesByAddresses) Reset() { - *x = TxEntriesByAddresses{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[145] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TxEntriesByAddresses) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TxEntriesByAddresses) ProtoMessage() {} - -func (x *TxEntriesByAddresses) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[145] - 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 TxEntriesByAddresses.ProtoReflect.Descriptor instead. -func (*TxEntriesByAddresses) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{145} -} - -func (x *TxEntriesByAddresses) GetSent() []*TxEntryByAddress { - if x != nil { - return x.Sent - } - return nil -} - -func (x *TxEntriesByAddresses) GetReceived() []*TxEntryByAddress { - if x != nil { - return x.Received - } - return nil -} - -// NotifyAddressesTxsChangedRequestMessage Listens for Txs pertaining to specified addresses according to the params specified -type NotifyAddressesTxsRequestMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` //initial addresses to listen for Tx changes when regestering for notifications - RequiredConfirmations uint32 `protobuf:"varint,2,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` // number of confirmations until a transaction is considered confirmed - IncludePending bool `protobuf:"varint,3,opt,name=includePending,proto3" json:"includePending,omitempty"` //whether to notify confirmation changes during pre-Confirmed states - IncludeSending bool `protobuf:"varint,4,opt,name=includeSending,proto3" json:"includeSending,omitempty"` //whether to listen on addresses sending txs - IncludeReceiving bool `protobuf:"varint,5,opt,name=includeReceiving,proto3" json:"includeReceiving,omitempty"` //whether to listen on addresses reciving txs -} - -func (x *NotifyAddressesTxsRequestMessage) Reset() { - *x = NotifyAddressesTxsRequestMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[146] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NotifyAddressesTxsRequestMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NotifyAddressesTxsRequestMessage) ProtoMessage() {} - -func (x *NotifyAddressesTxsRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[146] - 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 NotifyAddressesTxsRequestMessage.ProtoReflect.Descriptor instead. -func (*NotifyAddressesTxsRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{146} -} - -func (x *NotifyAddressesTxsRequestMessage) GetAddresses() []string { - if x != nil { - return x.Addresses - } - return nil -} - -func (x *NotifyAddressesTxsRequestMessage) GetRequiredConfirmations() uint32 { - if x != nil { - return x.RequiredConfirmations - } - return 0 -} - -func (x *NotifyAddressesTxsRequestMessage) GetIncludePending() bool { - if x != nil { - return x.IncludePending - } - return false -} - -func (x *NotifyAddressesTxsRequestMessage) GetIncludeSending() bool { - if x != nil { - return x.IncludeSending - } - return false -} - -func (x *NotifyAddressesTxsRequestMessage) GetIncludeReceiving() bool { - if x != nil { - return x.IncludeReceiving - } - return false -} - -type NotifyAddressesTxsResponseMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` -} - -func (x *NotifyAddressesTxsResponseMessage) Reset() { - *x = NotifyAddressesTxsResponseMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[147] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NotifyAddressesTxsResponseMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NotifyAddressesTxsResponseMessage) ProtoMessage() {} - -func (x *NotifyAddressesTxsResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[147] - 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 NotifyAddressesTxsResponseMessage.ProtoReflect.Descriptor instead. -func (*NotifyAddressesTxsResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{147} -} - -func (x *NotifyAddressesTxsResponseMessage) GetError() *RPCError { - if x != nil { - return x.Error - } - return nil -} - -// StopNotifyAddressesTxsRequestMessage stops listening for Txs pertaining to specified addresses -// Most be registered to NotifyAddressTxChangedRequestMessage for this command to work -type StopNotifyAddressesTxsRequestMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` -} - -func (x *StopNotifyAddressesTxsRequestMessage) Reset() { - *x = StopNotifyAddressesTxsRequestMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[148] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StopNotifyAddressesTxsRequestMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StopNotifyAddressesTxsRequestMessage) ProtoMessage() {} - -func (x *StopNotifyAddressesTxsRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[148] - 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 StopNotifyAddressesTxsRequestMessage.ProtoReflect.Descriptor instead. -func (*StopNotifyAddressesTxsRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{148} -} - -func (x *StopNotifyAddressesTxsRequestMessage) GetAddresses() []string { - if x != nil { - return x.Addresses - } - return nil -} - -type StopNotifyAddressesTxsResponseMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` -} - -func (x *StopNotifyAddressesTxsResponseMessage) Reset() { - *x = StopNotifyAddressesTxsResponseMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[149] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StopNotifyAddressesTxsResponseMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StopNotifyAddressesTxsResponseMessage) ProtoMessage() {} - -func (x *StopNotifyAddressesTxsResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[149] - 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 StopNotifyAddressesTxsResponseMessage.ProtoReflect.Descriptor instead. -func (*StopNotifyAddressesTxsResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{149} -} - -func (x *StopNotifyAddressesTxsResponseMessage) GetError() *RPCError { - if x != nil { - return x.Error - } - return nil -} - -// StartNotifyAddressesTxsRequestMessage starts listening for Txs pertaining to specified addresses -// Most be registered to NotifyAddressTxChangedRequestMessage for this command to work -type StartNotifyAddressesTxsRequestMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` -} - -func (x *StartNotifyAddressesTxsRequestMessage) Reset() { - *x = StartNotifyAddressesTxsRequestMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[150] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartNotifyAddressesTxsRequestMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartNotifyAddressesTxsRequestMessage) ProtoMessage() {} - -func (x *StartNotifyAddressesTxsRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[150] - 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 StartNotifyAddressesTxsRequestMessage.ProtoReflect.Descriptor instead. -func (*StartNotifyAddressesTxsRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{150} -} - -func (x *StartNotifyAddressesTxsRequestMessage) GetAddresses() []string { - if x != nil { - return x.Addresses - } - return nil -} - -type StartNotifyAddressesTxsResponseMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` -} - -func (x *StartNotifyAddressesTxsResponseMessage) Reset() { - *x = StartNotifyAddressesTxsResponseMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[151] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartNotifyAddressesTxsResponseMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartNotifyAddressesTxsResponseMessage) ProtoMessage() {} - -func (x *StartNotifyAddressesTxsResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[151] - 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 StartNotifyAddressesTxsResponseMessage.ProtoReflect.Descriptor instead. -func (*StartNotifyAddressesTxsResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{151} -} - -func (x *StartNotifyAddressesTxsResponseMessage) GetError() *RPCError { - if x != nil { - return x.Error - } - return nil -} - -// ModifyNotifyAddressesTxsParamsRequestMessage modifies the params used for a regesitered `NotifyAddressesTxsRequest` -// Most be registered to NotifyAddressTxChangedRequestMessage for this command to work -type ModifyNotifyAddressesTxsParamsRequestMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequiredConfirmations uint32 `protobuf:"varint,1,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` - IncludePending bool `protobuf:"varint,3,opt,name=includePending,proto3" json:"includePending,omitempty"` - IncludeSending bool `protobuf:"varint,4,opt,name=includeSending,proto3" json:"includeSending,omitempty"` - IncludeReceiving bool `protobuf:"varint,5,opt,name=includeReceiving,proto3" json:"includeReceiving,omitempty"` -} - -func (x *ModifyNotifyAddressesTxsParamsRequestMessage) Reset() { - *x = ModifyNotifyAddressesTxsParamsRequestMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[152] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ModifyNotifyAddressesTxsParamsRequestMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ModifyNotifyAddressesTxsParamsRequestMessage) ProtoMessage() {} - -func (x *ModifyNotifyAddressesTxsParamsRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[152] - 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 ModifyNotifyAddressesTxsParamsRequestMessage.ProtoReflect.Descriptor instead. -func (*ModifyNotifyAddressesTxsParamsRequestMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{152} -} - -func (x *ModifyNotifyAddressesTxsParamsRequestMessage) GetRequiredConfirmations() uint32 { - if x != nil { - return x.RequiredConfirmations - } - return 0 -} - -func (x *ModifyNotifyAddressesTxsParamsRequestMessage) GetIncludePending() bool { - if x != nil { - return x.IncludePending - } - return false -} - -func (x *ModifyNotifyAddressesTxsParamsRequestMessage) GetIncludeSending() bool { - if x != nil { - return x.IncludeSending - } - return false -} - -func (x *ModifyNotifyAddressesTxsParamsRequestMessage) GetIncludeReceiving() bool { - if x != nil { - return x.IncludeReceiving - } - return false -} - -type ModifyNotifyAddressesTxsParamsResponseMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` -} - -func (x *ModifyNotifyAddressesTxsParamsResponseMessage) Reset() { - *x = ModifyNotifyAddressesTxsParamsResponseMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[153] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ModifyNotifyAddressesTxsParamsResponseMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ModifyNotifyAddressesTxsParamsResponseMessage) ProtoMessage() {} - -func (x *ModifyNotifyAddressesTxsParamsResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[153] - 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 ModifyNotifyAddressesTxsParamsResponseMessage.ProtoReflect.Descriptor instead. -func (*ModifyNotifyAddressesTxsParamsResponseMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{153} -} - -func (x *ModifyNotifyAddressesTxsParamsResponseMessage) GetError() *RPCError { - if x != nil { - return x.Error - } - return nil -} - -// AddressesTxsNotificationMessage is the notification about txs pertaining to specified addresses -type AddressesTxsNotificationMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequiredConfirmations uint32 `protobuf:"varint,1,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` //the required confirmations set when notification was sent - Pending *TxEntriesByAddresses `protobuf:"bytes,2,opt,name=pending,proto3" json:"pending,omitempty"` // TxEntriesByAddresses which have entered the blockdag but not passed the required confirmations - Confirmed *TxEntriesByAddresses `protobuf:"bytes,3,opt,name=confirmed,proto3" json:"confirmed,omitempty"` // TxEntriesByAddresses which have entered the blockdag and passed the required confirmations - Unconfirmed *TxEntriesByAddresses `protobuf:"bytes,4,opt,name=unconfirmed,proto3" json:"unconfirmed,omitempty"` // TxEntriesByAddresses which have been pending, but removed via a reorg within the number of required confirmations. -} - -func (x *AddressesTxsNotificationMessage) Reset() { - *x = AddressesTxsNotificationMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_proto_msgTypes[154] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AddressesTxsNotificationMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AddressesTxsNotificationMessage) ProtoMessage() {} - -func (x *AddressesTxsNotificationMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_proto_msgTypes[154] - 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 AddressesTxsNotificationMessage.ProtoReflect.Descriptor instead. -func (*AddressesTxsNotificationMessage) Descriptor() ([]byte, []int) { - return file_rpc_proto_rawDescGZIP(), []int{154} -} - -func (x *AddressesTxsNotificationMessage) GetRequiredConfirmations() uint32 { - if x != nil { - return x.RequiredConfirmations - } - return 0 -} - -func (x *AddressesTxsNotificationMessage) GetPending() *TxEntriesByAddresses { - if x != nil { - return x.Pending - } - return nil -} - -func (x *AddressesTxsNotificationMessage) GetConfirmed() *TxEntriesByAddresses { - if x != nil { - return x.Confirmed - } - return nil -} - -func (x *AddressesTxsNotificationMessage) GetUnconfirmed() *TxEntriesByAddresses { - if x != nil { - return x.Unconfirmed - } - return nil -} - -var File_rpc_proto protoreflect.FileDescriptor - -var file_rpc_proto_rawDesc = []byte{ - 0x0a, 0x09, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x22, 0x24, 0x0a, 0x08, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xbe, 0x01, 0x0a, - 0x08, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x31, 0x0a, 0x06, 0x68, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x0c, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x40, 0x0a, 0x0b, 0x76, - 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x0b, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0xab, 0x03, - 0x0a, 0x0e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x07, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x07, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x61, 0x73, 0x68, 0x4d, 0x65, 0x72, - 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x68, - 0x61, 0x73, 0x68, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x32, 0x0a, - 0x14, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x49, 0x64, 0x4d, 0x65, 0x72, 0x6b, 0x6c, - 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x61, 0x63, 0x63, - 0x65, 0x70, 0x74, 0x65, 0x64, 0x49, 0x64, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, - 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x75, 0x74, 0x78, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x75, 0x74, 0x78, 0x6f, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x69, 0x74, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x62, 0x69, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, - 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x08, 0x64, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x62, 0x6c, 0x75, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x62, 0x6c, 0x75, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x75, - 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1c, 0x0a, - 0x09, 0x62, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x09, 0x62, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x3a, 0x0a, 0x14, 0x52, - 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x50, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, - 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x22, 0x91, 0x03, 0x0a, 0x13, 0x52, 0x70, 0x63, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 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, 0x01, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, - 0x6c, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x12, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x12, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, - 0x61, 0x73, 0x68, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x69, - 0x73, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0c, 0x69, 0x73, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x79, 0x12, - 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x09, 0x62, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x26, 0x0a, - 0x0e, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, - 0x11, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x48, - 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x65, - 0x74, 0x42, 0x6c, 0x75, 0x65, 0x73, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x12, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x13, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x65, 0x74, 0x42, 0x6c, 0x75, 0x65, - 0x73, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x6d, 0x65, 0x72, 0x67, 0x65, - 0x53, 0x65, 0x74, 0x52, 0x65, 0x64, 0x73, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x13, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x12, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x64, - 0x73, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x73, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, - 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0xd1, 0x02, 0x0a, 0x0e, - 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x06, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, - 0x12, 0x39, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, - 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6c, - 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, - 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, - 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, - 0x61, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, 0x61, 0x73, 0x12, 0x18, 0x0a, - 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x46, 0x0a, 0x0b, 0x76, 0x65, 0x72, 0x62, 0x6f, - 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x0b, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, - 0x8c, 0x02, 0x0a, 0x13, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x42, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x76, 0x69, - 0x6f, 0x75, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, - 0x63, 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x10, 0x70, 0x72, 0x65, 0x76, 0x69, - 0x6f, 0x75, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x4f, 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x4f, 0x70, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x4b, 0x0a, 0x0b, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x0b, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x58, - 0x0a, 0x12, 0x52, 0x70, 0x63, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, - 0x0a, 0x0f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x22, 0xc5, 0x01, 0x0a, 0x14, 0x52, 0x70, 0x63, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x0f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x70, 0x63, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x52, 0x0f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, - 0x65, 0x79, 0x12, 0x4c, 0x0a, 0x0b, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x0b, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x22, 0x49, 0x0a, 0x0b, 0x52, 0x70, 0x63, 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, - 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xb5, 0x01, 0x0a, 0x0c, - 0x52, 0x70, 0x63, 0x55, 0x74, 0x78, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x0f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x53, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x0f, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x24, 0x0a, - 0x0d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x61, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x62, - 0x61, 0x73, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x19, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6d, - 0x61, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x6d, 0x61, 0x73, 0x73, 0x12, - 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, - 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x20, 0x0a, 0x1e, 0x52, - 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, - 0x75, 0x74, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x8b, 0x01, - 0x0a, 0x1f, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x30, 0x0a, 0x13, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x16, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x21, 0x0a, 0x1f, 0x47, - 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x76, - 0x0a, 0x20, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x74, 0x0a, 0x19, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2c, - 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x6f, 0x6e, 0x44, 0x41, 0x41, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x4e, 0x6f, 0x6e, 0x44, 0x41, 0x41, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x22, 0xdc, 0x01, 0x0a, - 0x1a, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x56, 0x0a, 0x0c, 0x72, - 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x0c, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0x3a, 0x0a, 0x0c, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, - 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x42, 0x4c, 0x4f, - 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, - 0x49, 0x53, 0x5f, 0x49, 0x4e, 0x5f, 0x49, 0x42, 0x44, 0x10, 0x02, 0x22, 0x5e, 0x0a, 0x1e, 0x47, - 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, - 0x0a, 0x70, 0x61, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, - 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x44, 0x61, 0x74, 0x61, 0x22, 0x94, 0x01, 0x0a, 0x1f, - 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, - 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, - 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x20, 0x0a, 0x1e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x4d, 0x0a, 0x1f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x4a, 0x0a, 0x1d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, - 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, - 0x20, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0xf5, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x65, 0x73, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x0f, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0f, 0x62, 0x61, - 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x2a, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x39, 0x0a, 0x23, 0x47, 0x65, 0x74, - 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4b, 0x6e, 0x6f, - 0x77, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x41, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x41, 0x64, 0x64, 0x72, 0x22, 0x22, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x79, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, - 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x97, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, - 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, - 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x34, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x7b, 0x0a, - 0x1e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x2d, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, - 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x2a, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x85, 0x01, 0x0a, 0x1f, 0x47, - 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2c, - 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, - 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x34, 0x0a, 0x15, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, - 0x6f, 0x6c, 0x22, 0x81, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, - 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x79, 0x0a, 0x0c, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, - 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x4f, 0x72, 0x70, 0x68, 0x61, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4f, 0x72, 0x70, 0x68, 0x61, - 0x6e, 0x22, 0x24, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x3c, 0x0a, 0x05, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x2a, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xd3, 0x02, 0x0a, 0x1b, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, - 0x66, 0x6f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6c, - 0x61, 0x73, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, - 0x1e, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, - 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x3c, 0x0a, - 0x19, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x19, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x74, - 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x49, 0x62, 0x64, 0x50, 0x65, 0x65, 0x72, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x49, 0x62, 0x64, 0x50, 0x65, 0x65, 0x72, 0x22, - 0x53, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x61, - 0x6e, 0x65, 0x6e, 0x74, 0x22, 0x44, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x80, 0x01, 0x0a, 0x1f, 0x53, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, - 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x61, - 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x22, 0x74, 0x0a, - 0x20, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x7d, 0x0a, 0x35, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, - 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x1d, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x63, 0x63, 0x65, - 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x73, 0x22, 0x64, 0x0a, 0x36, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, - 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x81, 0x02, 0x0a, 0x34, 0x56, 0x69, 0x72, - 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x38, 0x0a, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x61, - 0x64, 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x61, 0x64, 0x64, 0x65, - 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, - 0x73, 0x12, 0x59, 0x0a, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x63, - 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x73, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, 0x5e, 0x0a, 0x16, - 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x30, 0x0a, 0x13, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x70, 0x0a, 0x17, - 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x41, - 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, - 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, - 0x64, 0x22, 0x66, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2a, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x9a, 0x01, 0x0a, 0x34, 0x47, 0x65, - 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, - 0x12, 0x44, 0x0a, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x63, 0x63, 0x65, 0x70, - 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x16, 0x41, 0x63, 0x63, 0x65, 0x70, - 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x61, - 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, - 0x68, 0x12, 0x36, 0x0a, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, 0xae, 0x02, 0x0a, 0x35, 0x47, 0x65, - 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x34, 0x0a, - 0x15, 0x61, 0x64, 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x61, 0x64, - 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, - 0x68, 0x65, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2a, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x8b, 0x01, 0x0a, 0x17, 0x47, - 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x6f, 0x77, 0x48, 0x61, 0x73, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x6f, 0x77, 0x48, 0x61, 0x73, 0x68, - 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x06, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x8c, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x1f, - 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x9e, 0x03, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x70, 0x48, 0x61, 0x73, - 0x68, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x70, 0x48, 0x61, - 0x73, 0x68, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, - 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, - 0x75, 0x6c, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x64, 0x69, - 0x61, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x61, - 0x73, 0x74, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x13, - 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, - 0x68, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x76, 0x69, 0x72, 0x74, 0x75, - 0x61, 0x6c, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x2a, - 0x0a, 0x10, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x48, 0x61, - 0x73, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, - 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x28, 0x0a, 0x0f, 0x76, 0x69, - 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0x55, 0x0a, 0x25, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x69, 0x6e, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x22, 0x54, 0x0a, 0x26, 0x52, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, - 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, - 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x27, 0x0a, - 0x25, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, - 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x54, 0x0a, 0x26, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x55, 0x0a, 0x23, - 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x12, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x61, 0x73, 0x68, 0x22, 0x5b, 0x0a, 0x2b, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, - 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, - 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, - 0x22, 0x18, 0x0a, 0x16, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x45, 0x0a, 0x17, 0x53, 0x68, - 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x70, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x41, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x41, 0x73, 0x63, 0x65, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x22, 0x61, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x40, 0x0a, 0x20, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x4f, 0x0a, 0x21, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x95, 0x01, 0x0a, 0x1f, 0x55, 0x74, - 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, - 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, - 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x64, 0x22, 0x9c, 0x01, 0x0a, 0x15, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x32, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, - 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x09, 0x75, 0x74, 0x78, - 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x55, 0x74, 0x78, 0x6f, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x75, 0x74, 0x78, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x22, 0x47, 0x0a, 0x27, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, - 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x56, 0x0a, 0x28, 0x53, 0x74, 0x6f, - 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x41, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x22, 0x8c, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, - 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x65, - 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, - 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x22, 0x6a, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x44, - 0x0a, 0x24, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x18, - 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x90, - 0x01, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, - 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x31, 0x0a, 0x2f, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, - 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x7c, 0x0a, 0x30, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, - 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x75, 0x65, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x62, 0x6c, 0x75, - 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x3b, 0x0a, 0x39, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, - 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x68, 0x0a, 0x3a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, - 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x82, 0x01, 0x0a, 0x38, 0x56, 0x69, - 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x1e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, - 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, - 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1e, - 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x2c, - 0x0a, 0x2a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, - 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x59, 0x0a, 0x2b, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x55, 0x0a, 0x29, 0x56, 0x69, 0x72, 0x74, 0x75, - 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, - 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x76, - 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x31, - 0x0a, 0x2f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, - 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x5e, 0x0a, 0x30, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, - 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, - 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x30, 0x0a, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x38, 0x0a, 0x36, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x65, 0x0a, - 0x37, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, - 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, - 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x23, 0x0a, 0x11, 0x42, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x22, 0x40, 0x0a, 0x12, 0x42, 0x61, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x25, 0x0a, 0x13, 0x55, - 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x70, 0x22, 0x42, 0x0a, 0x14, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0xe4, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x32, - 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x32, 0x70, 0x49, 0x64, - 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x73, 0x55, 0x74, - 0x78, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0d, 0x69, 0x73, 0x55, 0x74, 0x78, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, - 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, - 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x6a, 0x0a, 0x28, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, - 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, - 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x6c, 0x0a, 0x2c, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x69, 0x7a, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x69, 0x7a, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x22, - 0x93, 0x01, 0x0a, 0x2d, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x36, 0x0a, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, - 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, - 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x26, 0x0a, 0x24, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, - 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x53, 0x0a, - 0x25, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x25, 0x0a, 0x23, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x9b, 0x01, 0x0a, 0x15, 0x4d, 0x65, - 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x31, 0x0a, - 0x07, 0x73, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, - 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x12, 0x35, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x72, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x22, 0xae, 0x01, 0x0a, 0x2a, 0x47, 0x65, 0x74, 0x4d, - 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, - 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, - 0x6f, 0x6c, 0x12, 0x34, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x95, 0x01, 0x0a, 0x2b, 0x47, 0x65, 0x74, - 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x65, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x92, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x12, 0x2a, 0x0a, 0x10, - 0x63, 0x69, 0x72, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x6d, 0x70, 0x69, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6c, 0x61, 0x74, - 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x54, 0x0a, 0x18, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, - 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x74, 0x78, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3e, 0x0a, 0x14, 0x52, 0x70, - 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, - 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x48, 0x61, 0x73, 0x68, 0x22, 0x51, 0x0a, 0x10, 0x52, 0x70, - 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, - 0x49, 0x44, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, - 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x42, 0x0a, - 0x2a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, - 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, - 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x2b, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, - 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, - 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x4f, 0x0a, 0x12, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, - 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x52, 0x12, - 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, - 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x6b, - 0x0a, 0x23, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x30, 0x0a, 0x13, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x7d, 0x0a, 0x24, 0x47, - 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2a, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x6f, 0x0a, 0x25, 0x47, 0x65, - 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, - 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x26, - 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x43, 0x0a, 0x0e, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, - 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0e, 0x74, 0x78, 0x49, - 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x49, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, - 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x6a, 0x0a, 0x28, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, - 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x42, 0x0a, 0x2a, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, - 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, - 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x2b, 0x47, 0x65, 0x74, 0x49, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, - 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4f, 0x0a, 0x12, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, - 0x61, 0x69, 0x72, 0x52, 0x12, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x6b, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, - 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x30, - 0x0a, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x22, 0x7d, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0x6f, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x12, 0x30, - 0x0a, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x22, 0x99, 0x01, 0x0a, 0x26, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, - 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x43, 0x0a, 0x0e, 0x74, - 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, - 0x52, 0x0e, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x73, - 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x29, 0x0a, 0x13, - 0x47, 0x65, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x7f, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x3b, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2c, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, - 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x78, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x3d, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x36, 0x0a, 0x20, 0x47, - 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x78, 0x49, 0x44, 0x22, 0x75, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x39, 0x0a, 0x21, 0x47, 0x65, - 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0xad, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5b, 0x0a, 0x16, - 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, - 0x72, 0x52, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xa0, 0x01, 0x0a, 0x2a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x59, 0x0a, 0x2b, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0xbb, 0x02, 0x0a, 0x29, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x07, 0x70, - 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x09, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x75, 0x6e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x10, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, - 0x54, 0x78, 0x49, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x46, 0x0a, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, - 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x22, 0x5d, 0x0a, 0x2f, 0x53, 0x74, 0x6f, - 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x47, 0x0a, 0x2f, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, - 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, - 0x73, 0x22, 0x5e, 0x0a, 0x30, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x96, 0x01, 0x0a, 0x36, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x65, 0x0a, 0x37, 0x4d, 0x6f, - 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x66, 0x0a, 0x10, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x78, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x54, 0x78, - 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x04, 0x73, - 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x22, 0xf2, 0x01, 0x0a, - 0x20, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, - 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x0a, - 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, - 0x67, 0x22, 0x4f, 0x0a, 0x21, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x44, 0x0a, 0x24, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x53, 0x0a, 0x25, 0x53, 0x74, 0x6f, 0x70, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, - 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, - 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x45, 0x0a, - 0x25, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x22, 0x54, 0x0a, 0x26, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xe0, 0x01, 0x0a, 0x2c, 0x4d, - 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x22, 0x5b, 0x0a, - 0x2d, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x94, 0x02, 0x0a, 0x1f, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, - 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x39, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, - 0x3d, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, - 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x41, - 0x0a, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x52, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, - 0x64, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, -} - -var ( - file_rpc_proto_rawDescOnce sync.Once - file_rpc_proto_rawDescData = file_rpc_proto_rawDesc -) - -func file_rpc_proto_rawDescGZIP() []byte { - file_rpc_proto_rawDescOnce.Do(func() { - file_rpc_proto_rawDescData = protoimpl.X.CompressGZIP(file_rpc_proto_rawDescData) - }) - return file_rpc_proto_rawDescData -} - -var file_rpc_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 155) -var file_rpc_proto_goTypes = []interface{}{ - (SubmitBlockResponseMessage_RejectReason)(0), // 0: protowire.SubmitBlockResponseMessage.RejectReason - (*RPCError)(nil), // 1: protowire.RPCError - (*RpcBlock)(nil), // 2: protowire.RpcBlock - (*RpcBlockHeader)(nil), // 3: protowire.RpcBlockHeader - (*RpcBlockLevelParents)(nil), // 4: protowire.RpcBlockLevelParents - (*RpcBlockVerboseData)(nil), // 5: protowire.RpcBlockVerboseData - (*RpcTransaction)(nil), // 6: protowire.RpcTransaction - (*RpcTransactionInput)(nil), // 7: protowire.RpcTransactionInput - (*RpcScriptPublicKey)(nil), // 8: protowire.RpcScriptPublicKey - (*RpcTransactionOutput)(nil), // 9: protowire.RpcTransactionOutput - (*RpcOutpoint)(nil), // 10: protowire.RpcOutpoint - (*RpcUtxoEntry)(nil), // 11: protowire.RpcUtxoEntry - (*RpcTransactionVerboseData)(nil), // 12: protowire.RpcTransactionVerboseData - (*RpcTransactionInputVerboseData)(nil), // 13: protowire.RpcTransactionInputVerboseData - (*RpcTransactionOutputVerboseData)(nil), // 14: protowire.RpcTransactionOutputVerboseData - (*GetCurrentNetworkRequestMessage)(nil), // 15: protowire.GetCurrentNetworkRequestMessage - (*GetCurrentNetworkResponseMessage)(nil), // 16: protowire.GetCurrentNetworkResponseMessage - (*SubmitBlockRequestMessage)(nil), // 17: protowire.SubmitBlockRequestMessage - (*SubmitBlockResponseMessage)(nil), // 18: protowire.SubmitBlockResponseMessage - (*GetBlockTemplateRequestMessage)(nil), // 19: protowire.GetBlockTemplateRequestMessage - (*GetBlockTemplateResponseMessage)(nil), // 20: protowire.GetBlockTemplateResponseMessage - (*NotifyBlockAddedRequestMessage)(nil), // 21: protowire.NotifyBlockAddedRequestMessage - (*NotifyBlockAddedResponseMessage)(nil), // 22: protowire.NotifyBlockAddedResponseMessage - (*BlockAddedNotificationMessage)(nil), // 23: protowire.BlockAddedNotificationMessage - (*GetPeerAddressesRequestMessage)(nil), // 24: protowire.GetPeerAddressesRequestMessage - (*GetPeerAddressesResponseMessage)(nil), // 25: protowire.GetPeerAddressesResponseMessage - (*GetPeerAddressesKnownAddressMessage)(nil), // 26: protowire.GetPeerAddressesKnownAddressMessage - (*GetSelectedTipHashRequestMessage)(nil), // 27: protowire.GetSelectedTipHashRequestMessage - (*GetSelectedTipHashResponseMessage)(nil), // 28: protowire.GetSelectedTipHashResponseMessage - (*GetMempoolEntryRequestMessage)(nil), // 29: protowire.GetMempoolEntryRequestMessage - (*GetMempoolEntryResponseMessage)(nil), // 30: protowire.GetMempoolEntryResponseMessage - (*GetMempoolEntriesRequestMessage)(nil), // 31: protowire.GetMempoolEntriesRequestMessage - (*GetMempoolEntriesResponseMessage)(nil), // 32: protowire.GetMempoolEntriesResponseMessage - (*MempoolEntry)(nil), // 33: protowire.MempoolEntry - (*GetConnectedPeerInfoRequestMessage)(nil), // 34: protowire.GetConnectedPeerInfoRequestMessage - (*GetConnectedPeerInfoResponseMessage)(nil), // 35: protowire.GetConnectedPeerInfoResponseMessage - (*GetConnectedPeerInfoMessage)(nil), // 36: protowire.GetConnectedPeerInfoMessage - (*AddPeerRequestMessage)(nil), // 37: protowire.AddPeerRequestMessage - (*AddPeerResponseMessage)(nil), // 38: protowire.AddPeerResponseMessage - (*SubmitTransactionRequestMessage)(nil), // 39: protowire.SubmitTransactionRequestMessage - (*SubmitTransactionResponseMessage)(nil), // 40: protowire.SubmitTransactionResponseMessage - (*NotifyVirtualSelectedParentChainChangedRequestMessage)(nil), // 41: protowire.NotifyVirtualSelectedParentChainChangedRequestMessage - (*NotifyVirtualSelectedParentChainChangedResponseMessage)(nil), // 42: protowire.NotifyVirtualSelectedParentChainChangedResponseMessage - (*VirtualSelectedParentChainChangedNotificationMessage)(nil), // 43: protowire.VirtualSelectedParentChainChangedNotificationMessage - (*GetBlockRequestMessage)(nil), // 44: protowire.GetBlockRequestMessage - (*GetBlockResponseMessage)(nil), // 45: protowire.GetBlockResponseMessage - (*GetSubnetworkRequestMessage)(nil), // 46: protowire.GetSubnetworkRequestMessage - (*GetSubnetworkResponseMessage)(nil), // 47: protowire.GetSubnetworkResponseMessage - (*GetVirtualSelectedParentChainFromBlockRequestMessage)(nil), // 48: protowire.GetVirtualSelectedParentChainFromBlockRequestMessage - (*AcceptedTransactionIds)(nil), // 49: protowire.AcceptedTransactionIds - (*GetVirtualSelectedParentChainFromBlockResponseMessage)(nil), // 50: protowire.GetVirtualSelectedParentChainFromBlockResponseMessage - (*GetBlocksRequestMessage)(nil), // 51: protowire.GetBlocksRequestMessage - (*GetBlocksResponseMessage)(nil), // 52: protowire.GetBlocksResponseMessage - (*GetBlockCountRequestMessage)(nil), // 53: protowire.GetBlockCountRequestMessage - (*GetBlockCountResponseMessage)(nil), // 54: protowire.GetBlockCountResponseMessage - (*GetBlockDagInfoRequestMessage)(nil), // 55: protowire.GetBlockDagInfoRequestMessage - (*GetBlockDagInfoResponseMessage)(nil), // 56: protowire.GetBlockDagInfoResponseMessage - (*ResolveFinalityConflictRequestMessage)(nil), // 57: protowire.ResolveFinalityConflictRequestMessage - (*ResolveFinalityConflictResponseMessage)(nil), // 58: protowire.ResolveFinalityConflictResponseMessage - (*NotifyFinalityConflictsRequestMessage)(nil), // 59: protowire.NotifyFinalityConflictsRequestMessage - (*NotifyFinalityConflictsResponseMessage)(nil), // 60: protowire.NotifyFinalityConflictsResponseMessage - (*FinalityConflictNotificationMessage)(nil), // 61: protowire.FinalityConflictNotificationMessage - (*FinalityConflictResolvedNotificationMessage)(nil), // 62: protowire.FinalityConflictResolvedNotificationMessage - (*ShutDownRequestMessage)(nil), // 63: protowire.ShutDownRequestMessage - (*ShutDownResponseMessage)(nil), // 64: protowire.ShutDownResponseMessage - (*GetHeadersRequestMessage)(nil), // 65: protowire.GetHeadersRequestMessage - (*GetHeadersResponseMessage)(nil), // 66: protowire.GetHeadersResponseMessage - (*NotifyUtxosChangedRequestMessage)(nil), // 67: protowire.NotifyUtxosChangedRequestMessage - (*NotifyUtxosChangedResponseMessage)(nil), // 68: protowire.NotifyUtxosChangedResponseMessage - (*UtxosChangedNotificationMessage)(nil), // 69: protowire.UtxosChangedNotificationMessage - (*UtxosByAddressesEntry)(nil), // 70: protowire.UtxosByAddressesEntry - (*StopNotifyingUtxosChangedRequestMessage)(nil), // 71: protowire.StopNotifyingUtxosChangedRequestMessage - (*StopNotifyingUtxosChangedResponseMessage)(nil), // 72: protowire.StopNotifyingUtxosChangedResponseMessage - (*GetUtxosByAddressesRequestMessage)(nil), // 73: protowire.GetUtxosByAddressesRequestMessage - (*GetUtxosByAddressesResponseMessage)(nil), // 74: protowire.GetUtxosByAddressesResponseMessage - (*GetBalanceByAddressRequestMessage)(nil), // 75: protowire.GetBalanceByAddressRequestMessage - (*GetBalanceByAddressResponseMessage)(nil), // 76: protowire.GetBalanceByAddressResponseMessage - (*GetBalancesByAddressesRequestMessage)(nil), // 77: protowire.GetBalancesByAddressesRequestMessage - (*BalancesByAddressEntry)(nil), // 78: protowire.BalancesByAddressEntry - (*GetBalancesByAddressesResponseMessage)(nil), // 79: protowire.GetBalancesByAddressesResponseMessage - (*GetVirtualSelectedParentBlueScoreRequestMessage)(nil), // 80: protowire.GetVirtualSelectedParentBlueScoreRequestMessage - (*GetVirtualSelectedParentBlueScoreResponseMessage)(nil), // 81: protowire.GetVirtualSelectedParentBlueScoreResponseMessage - (*NotifyVirtualSelectedParentBlueScoreChangedRequestMessage)(nil), // 82: protowire.NotifyVirtualSelectedParentBlueScoreChangedRequestMessage - (*NotifyVirtualSelectedParentBlueScoreChangedResponseMessage)(nil), // 83: protowire.NotifyVirtualSelectedParentBlueScoreChangedResponseMessage - (*VirtualSelectedParentBlueScoreChangedNotificationMessage)(nil), // 84: protowire.VirtualSelectedParentBlueScoreChangedNotificationMessage - (*NotifyVirtualDaaScoreChangedRequestMessage)(nil), // 85: protowire.NotifyVirtualDaaScoreChangedRequestMessage - (*NotifyVirtualDaaScoreChangedResponseMessage)(nil), // 86: protowire.NotifyVirtualDaaScoreChangedResponseMessage - (*VirtualDaaScoreChangedNotificationMessage)(nil), // 87: protowire.VirtualDaaScoreChangedNotificationMessage - (*NotifyPruningPointUTXOSetOverrideRequestMessage)(nil), // 88: protowire.NotifyPruningPointUTXOSetOverrideRequestMessage - (*NotifyPruningPointUTXOSetOverrideResponseMessage)(nil), // 89: protowire.NotifyPruningPointUTXOSetOverrideResponseMessage - (*PruningPointUTXOSetOverrideNotificationMessage)(nil), // 90: protowire.PruningPointUTXOSetOverrideNotificationMessage - (*StopNotifyingPruningPointUTXOSetOverrideRequestMessage)(nil), // 91: protowire.StopNotifyingPruningPointUTXOSetOverrideRequestMessage - (*StopNotifyingPruningPointUTXOSetOverrideResponseMessage)(nil), // 92: protowire.StopNotifyingPruningPointUTXOSetOverrideResponseMessage - (*BanRequestMessage)(nil), // 93: protowire.BanRequestMessage - (*BanResponseMessage)(nil), // 94: protowire.BanResponseMessage - (*UnbanRequestMessage)(nil), // 95: protowire.UnbanRequestMessage - (*UnbanResponseMessage)(nil), // 96: protowire.UnbanResponseMessage - (*GetInfoRequestMessage)(nil), // 97: protowire.GetInfoRequestMessage - (*GetInfoResponseMessage)(nil), // 98: protowire.GetInfoResponseMessage - (*GetAcceptingBlockHashOfTxRequestMessage)(nil), // 99: protowire.GetAcceptingBlockHashOfTxRequestMessage - (*GetAcceptingBlockHashOfTxResponseMessage)(nil), // 100: protowire.GetAcceptingBlockHashOfTxResponseMessage - (*EstimateNetworkHashesPerSecondRequestMessage)(nil), // 101: protowire.EstimateNetworkHashesPerSecondRequestMessage - (*EstimateNetworkHashesPerSecondResponseMessage)(nil), // 102: protowire.EstimateNetworkHashesPerSecondResponseMessage - (*NotifyNewBlockTemplateRequestMessage)(nil), // 103: protowire.NotifyNewBlockTemplateRequestMessage - (*NotifyNewBlockTemplateResponseMessage)(nil), // 104: protowire.NotifyNewBlockTemplateResponseMessage - (*NewBlockTemplateNotificationMessage)(nil), // 105: protowire.NewBlockTemplateNotificationMessage - (*MempoolEntryByAddress)(nil), // 106: protowire.MempoolEntryByAddress - (*GetMempoolEntriesByAddressesRequestMessage)(nil), // 107: protowire.GetMempoolEntriesByAddressesRequestMessage - (*GetMempoolEntriesByAddressesResponseMessage)(nil), // 108: protowire.GetMempoolEntriesByAddressesResponseMessage - (*GetCoinSupplyRequestMessage)(nil), // 109: protowire.GetCoinSupplyRequestMessage - (*GetCoinSupplyResponseMessage)(nil), // 110: protowire.GetCoinSupplyResponseMessage - (*RpcTxIDConfirmationsPair)(nil), // 111: protowire.RpcTxIDConfirmationsPair - (*RpcTxIDBlockHashPair)(nil), // 112: protowire.RpcTxIDBlockHashPair - (*RpcTxIDBlockPair)(nil), // 113: protowire.RpcTxIDBlockPair - (*GetAcceptingBlockHashesOfTxsRequestMessage)(nil), // 114: protowire.GetAcceptingBlockHashesOfTxsRequestMessage - (*GetAcceptingBlockHashesOfTxsResponseMessage)(nil), // 115: protowire.GetAcceptingBlockHashesOfTxsResponseMessage - (*GetAcceptingBlockOfTxRequestMessage)(nil), // 116: protowire.GetAcceptingBlockOfTxRequestMessage - (*GetAcceptingBlockOfTxResponseMessage)(nil), // 117: protowire.GetAcceptingBlockOfTxResponseMessage - (*GetAcceptingBlocksOfTxsRequestMessage)(nil), // 118: protowire.GetAcceptingBlocksOfTxsRequestMessage - (*GetAcceptingBlocksOfTxsResponseMessage)(nil), // 119: protowire.GetAcceptingBlocksOfTxsResponseMessage - (*GetIncludingBlockHashOfTxRequestMessage)(nil), // 120: protowire.GetIncludingBlockHashOfTxRequestMessage - (*GetIncludingBlockHashOfTxResponseMessage)(nil), // 121: protowire.GetIncludingBlockHashOfTxResponseMessage - (*GetIncludingBlockHashesOfTxsRequestMessage)(nil), // 122: protowire.GetIncludingBlockHashesOfTxsRequestMessage - (*GetIncludingBlockHashesOfTxsResponseMessage)(nil), // 123: protowire.GetIncludingBlockHashesOfTxsResponseMessage - (*GetIncludingBlockOfTxRequestMessage)(nil), // 124: protowire.GetIncludingBlockOfTxRequestMessage - (*GetIncludingBlockOfTxResponseMessage)(nil), // 125: protowire.GetIncludingBlockOfTxResponseMessage - (*GetIncludingBlocksOfTxsRequestMessage)(nil), // 126: protowire.GetIncludingBlocksOfTxsRequestMessage - (*GetIncludingBlocksOfTxsResponseMessage)(nil), // 127: protowire.GetIncludingBlocksOfTxsResponseMessage - (*GetTxRequestMessage)(nil), // 128: protowire.GetTxRequestMessage - (*GetTxResponseMessage)(nil), // 129: protowire.GetTxResponseMessage - (*GetTxsRequestMessage)(nil), // 130: protowire.GetTxsRequestMessage - (*GetTxsResponseMessage)(nil), // 131: protowire.GetTxsResponseMessage - (*GetTxConfirmationsRequestMessage)(nil), // 132: protowire.GetTxConfirmationsRequestMessage - (*GetTxConfirmationsResponseMessage)(nil), // 133: protowire.GetTxConfirmationsResponseMessage - (*GetTxsConfirmationsRequestMessage)(nil), // 134: protowire.GetTxsConfirmationsRequestMessage - (*GetTxsConfirmationsResponseMessage)(nil), // 135: protowire.GetTxsConfirmationsResponseMessage - (*NotifyTxsConfirmationChangedRequestMessage)(nil), // 136: protowire.NotifyTxsConfirmationChangedRequestMessage - (*NotifyTxsConfirmationChangedResponseMessage)(nil), // 137: protowire.NotifyTxsConfirmationChangedResponseMessage - (*TxsConfirmationChangedNotificationMessage)(nil), // 138: protowire.TxsConfirmationChangedNotificationMessage - (*StopNotifyTxsConfirmationChangedRequestMessage)(nil), // 139: protowire.StopNotifyTxsConfirmationChangedRequestMessage - (*StopNotifyTxsConfirmationChangedResponseMessage)(nil), // 140: protowire.StopNotifyTxsConfirmationChangedResponseMessage - (*StartNotifyTxsConfirmationChangedRequestMessage)(nil), // 141: protowire.StartNotifyTxsConfirmationChangedRequestMessage - (*StartNotifyTxsConfirmationChangedResponseMessage)(nil), // 142: protowire.StartNotifyTxsConfirmationChangedResponseMessage - (*ModifyNotifyTxsConfirmationChangedParamsRequestMessage)(nil), // 143: protowire.ModifyNotifyTxsConfirmationChangedParamsRequestMessage - (*ModifyNotifyTxsConfirmationChangedParamsResponseMessage)(nil), // 144: protowire.ModifyNotifyTxsConfirmationChangedParamsResponseMessage - (*TxEntryByAddress)(nil), // 145: protowire.TxEntryByAddress - (*TxEntriesByAddresses)(nil), // 146: protowire.TxEntriesByAddresses - (*NotifyAddressesTxsRequestMessage)(nil), // 147: protowire.NotifyAddressesTxsRequestMessage - (*NotifyAddressesTxsResponseMessage)(nil), // 148: protowire.NotifyAddressesTxsResponseMessage - (*StopNotifyAddressesTxsRequestMessage)(nil), // 149: protowire.StopNotifyAddressesTxsRequestMessage - (*StopNotifyAddressesTxsResponseMessage)(nil), // 150: protowire.StopNotifyAddressesTxsResponseMessage - (*StartNotifyAddressesTxsRequestMessage)(nil), // 151: protowire.StartNotifyAddressesTxsRequestMessage - (*StartNotifyAddressesTxsResponseMessage)(nil), // 152: protowire.StartNotifyAddressesTxsResponseMessage - (*ModifyNotifyAddressesTxsParamsRequestMessage)(nil), // 153: protowire.ModifyNotifyAddressesTxsParamsRequestMessage - (*ModifyNotifyAddressesTxsParamsResponseMessage)(nil), // 154: protowire.ModifyNotifyAddressesTxsParamsResponseMessage - (*AddressesTxsNotificationMessage)(nil), // 155: protowire.AddressesTxsNotificationMessage -} -var file_rpc_proto_depIdxs = []int32{ - 3, // 0: protowire.RpcBlock.header:type_name -> protowire.RpcBlockHeader - 6, // 1: protowire.RpcBlock.transactions:type_name -> protowire.RpcTransaction - 5, // 2: protowire.RpcBlock.verboseData:type_name -> protowire.RpcBlockVerboseData - 4, // 3: protowire.RpcBlockHeader.parents:type_name -> protowire.RpcBlockLevelParents - 7, // 4: protowire.RpcTransaction.inputs:type_name -> protowire.RpcTransactionInput - 9, // 5: protowire.RpcTransaction.outputs:type_name -> protowire.RpcTransactionOutput - 12, // 6: protowire.RpcTransaction.verboseData:type_name -> protowire.RpcTransactionVerboseData - 10, // 7: protowire.RpcTransactionInput.previousOutpoint:type_name -> protowire.RpcOutpoint - 13, // 8: protowire.RpcTransactionInput.verboseData:type_name -> protowire.RpcTransactionInputVerboseData - 8, // 9: protowire.RpcTransactionOutput.scriptPublicKey:type_name -> protowire.RpcScriptPublicKey - 14, // 10: protowire.RpcTransactionOutput.verboseData:type_name -> protowire.RpcTransactionOutputVerboseData - 8, // 11: protowire.RpcUtxoEntry.scriptPublicKey:type_name -> protowire.RpcScriptPublicKey - 1, // 12: protowire.GetCurrentNetworkResponseMessage.error:type_name -> protowire.RPCError - 2, // 13: protowire.SubmitBlockRequestMessage.block:type_name -> protowire.RpcBlock - 0, // 14: protowire.SubmitBlockResponseMessage.rejectReason:type_name -> protowire.SubmitBlockResponseMessage.RejectReason - 1, // 15: protowire.SubmitBlockResponseMessage.error:type_name -> protowire.RPCError - 2, // 16: protowire.GetBlockTemplateResponseMessage.block:type_name -> protowire.RpcBlock - 1, // 17: protowire.GetBlockTemplateResponseMessage.error:type_name -> protowire.RPCError - 1, // 18: protowire.NotifyBlockAddedResponseMessage.error:type_name -> protowire.RPCError - 2, // 19: protowire.BlockAddedNotificationMessage.block:type_name -> protowire.RpcBlock - 26, // 20: protowire.GetPeerAddressesResponseMessage.addresses:type_name -> protowire.GetPeerAddressesKnownAddressMessage - 26, // 21: protowire.GetPeerAddressesResponseMessage.bannedAddresses:type_name -> protowire.GetPeerAddressesKnownAddressMessage - 1, // 22: protowire.GetPeerAddressesResponseMessage.error:type_name -> protowire.RPCError - 1, // 23: protowire.GetSelectedTipHashResponseMessage.error:type_name -> protowire.RPCError - 33, // 24: protowire.GetMempoolEntryResponseMessage.entry:type_name -> protowire.MempoolEntry - 1, // 25: protowire.GetMempoolEntryResponseMessage.error:type_name -> protowire.RPCError - 33, // 26: protowire.GetMempoolEntriesResponseMessage.entries:type_name -> protowire.MempoolEntry - 1, // 27: protowire.GetMempoolEntriesResponseMessage.error:type_name -> protowire.RPCError - 6, // 28: protowire.MempoolEntry.transaction:type_name -> protowire.RpcTransaction - 36, // 29: protowire.GetConnectedPeerInfoResponseMessage.infos:type_name -> protowire.GetConnectedPeerInfoMessage - 1, // 30: protowire.GetConnectedPeerInfoResponseMessage.error:type_name -> protowire.RPCError - 1, // 31: protowire.AddPeerResponseMessage.error:type_name -> protowire.RPCError - 6, // 32: protowire.SubmitTransactionRequestMessage.transaction:type_name -> protowire.RpcTransaction - 1, // 33: protowire.SubmitTransactionResponseMessage.error:type_name -> protowire.RPCError - 1, // 34: protowire.NotifyVirtualSelectedParentChainChangedResponseMessage.error:type_name -> protowire.RPCError - 49, // 35: protowire.VirtualSelectedParentChainChangedNotificationMessage.acceptedTransactionIds:type_name -> protowire.AcceptedTransactionIds - 2, // 36: protowire.GetBlockResponseMessage.block:type_name -> protowire.RpcBlock - 1, // 37: protowire.GetBlockResponseMessage.error:type_name -> protowire.RPCError - 1, // 38: protowire.GetSubnetworkResponseMessage.error:type_name -> protowire.RPCError - 49, // 39: protowire.GetVirtualSelectedParentChainFromBlockResponseMessage.acceptedTransactionIds:type_name -> protowire.AcceptedTransactionIds - 1, // 40: protowire.GetVirtualSelectedParentChainFromBlockResponseMessage.error:type_name -> protowire.RPCError - 2, // 41: protowire.GetBlocksResponseMessage.blocks:type_name -> protowire.RpcBlock - 1, // 42: protowire.GetBlocksResponseMessage.error:type_name -> protowire.RPCError - 1, // 43: protowire.GetBlockCountResponseMessage.error:type_name -> protowire.RPCError - 1, // 44: protowire.GetBlockDagInfoResponseMessage.error:type_name -> protowire.RPCError - 1, // 45: protowire.ResolveFinalityConflictResponseMessage.error:type_name -> protowire.RPCError - 1, // 46: protowire.NotifyFinalityConflictsResponseMessage.error:type_name -> protowire.RPCError - 1, // 47: protowire.ShutDownResponseMessage.error:type_name -> protowire.RPCError - 1, // 48: protowire.GetHeadersResponseMessage.error:type_name -> protowire.RPCError - 1, // 49: protowire.NotifyUtxosChangedResponseMessage.error:type_name -> protowire.RPCError - 70, // 50: protowire.UtxosChangedNotificationMessage.added:type_name -> protowire.UtxosByAddressesEntry - 70, // 51: protowire.UtxosChangedNotificationMessage.removed:type_name -> protowire.UtxosByAddressesEntry - 10, // 52: protowire.UtxosByAddressesEntry.outpoint:type_name -> protowire.RpcOutpoint - 11, // 53: protowire.UtxosByAddressesEntry.utxoEntry:type_name -> protowire.RpcUtxoEntry - 1, // 54: protowire.StopNotifyingUtxosChangedResponseMessage.error:type_name -> protowire.RPCError - 70, // 55: protowire.GetUtxosByAddressesResponseMessage.entries:type_name -> protowire.UtxosByAddressesEntry - 1, // 56: protowire.GetUtxosByAddressesResponseMessage.error:type_name -> protowire.RPCError - 1, // 57: protowire.GetBalanceByAddressResponseMessage.error:type_name -> protowire.RPCError - 1, // 58: protowire.BalancesByAddressEntry.error:type_name -> protowire.RPCError - 78, // 59: protowire.GetBalancesByAddressesResponseMessage.entries:type_name -> protowire.BalancesByAddressEntry - 1, // 60: protowire.GetBalancesByAddressesResponseMessage.error:type_name -> protowire.RPCError - 1, // 61: protowire.GetVirtualSelectedParentBlueScoreResponseMessage.error:type_name -> protowire.RPCError - 1, // 62: protowire.NotifyVirtualSelectedParentBlueScoreChangedResponseMessage.error:type_name -> protowire.RPCError - 1, // 63: protowire.NotifyVirtualDaaScoreChangedResponseMessage.error:type_name -> protowire.RPCError - 1, // 64: protowire.NotifyPruningPointUTXOSetOverrideResponseMessage.error:type_name -> protowire.RPCError - 1, // 65: protowire.StopNotifyingPruningPointUTXOSetOverrideResponseMessage.error:type_name -> protowire.RPCError - 1, // 66: protowire.BanResponseMessage.error:type_name -> protowire.RPCError - 1, // 67: protowire.UnbanResponseMessage.error:type_name -> protowire.RPCError - 1, // 68: protowire.GetInfoResponseMessage.error:type_name -> protowire.RPCError - 1, // 69: protowire.GetAcceptingBlockHashOfTxResponseMessage.error:type_name -> protowire.RPCError - 1, // 70: protowire.EstimateNetworkHashesPerSecondResponseMessage.error:type_name -> protowire.RPCError - 1, // 71: protowire.NotifyNewBlockTemplateResponseMessage.error:type_name -> protowire.RPCError - 33, // 72: protowire.MempoolEntryByAddress.sending:type_name -> protowire.MempoolEntry - 33, // 73: protowire.MempoolEntryByAddress.receiving:type_name -> protowire.MempoolEntry - 106, // 74: protowire.GetMempoolEntriesByAddressesResponseMessage.entries:type_name -> protowire.MempoolEntryByAddress - 1, // 75: protowire.GetMempoolEntriesByAddressesResponseMessage.error:type_name -> protowire.RPCError - 1, // 76: protowire.GetCoinSupplyResponseMessage.error:type_name -> protowire.RPCError - 2, // 77: protowire.RpcTxIDBlockPair.block:type_name -> protowire.RpcBlock - 112, // 78: protowire.GetAcceptingBlockHashesOfTxsResponseMessage.txIDBlockHashPairs:type_name -> protowire.RpcTxIDBlockHashPair - 1, // 79: protowire.GetAcceptingBlockHashesOfTxsResponseMessage.error:type_name -> protowire.RPCError - 2, // 80: protowire.GetAcceptingBlockOfTxResponseMessage.block:type_name -> protowire.RpcBlock - 1, // 81: protowire.GetAcceptingBlockOfTxResponseMessage.error:type_name -> protowire.RPCError - 113, // 82: protowire.GetAcceptingBlocksOfTxsResponseMessage.txIDBlockPairs:type_name -> protowire.RpcTxIDBlockPair - 1, // 83: protowire.GetAcceptingBlocksOfTxsResponseMessage.error:type_name -> protowire.RPCError - 1, // 84: protowire.GetIncludingBlockHashOfTxResponseMessage.error:type_name -> protowire.RPCError - 112, // 85: protowire.GetIncludingBlockHashesOfTxsResponseMessage.txIDBlockHashPairs:type_name -> protowire.RpcTxIDBlockHashPair - 1, // 86: protowire.GetIncludingBlockHashesOfTxsResponseMessage.error:type_name -> protowire.RPCError - 2, // 87: protowire.GetIncludingBlockOfTxResponseMessage.block:type_name -> protowire.RpcBlock - 1, // 88: protowire.GetIncludingBlockOfTxResponseMessage.error:type_name -> protowire.RPCError - 113, // 89: protowire.GetIncludingBlocksOfTxsResponseMessage.txIDBlockPairs:type_name -> protowire.RpcTxIDBlockPair - 1, // 90: protowire.GetIncludingBlocksOfTxsResponseMessage.error:type_name -> protowire.RPCError - 6, // 91: protowire.GetTxResponseMessage.transaction:type_name -> protowire.RpcTransaction - 1, // 92: protowire.GetTxResponseMessage.error:type_name -> protowire.RPCError - 6, // 93: protowire.GetTxsResponseMessage.transactions:type_name -> protowire.RpcTransaction - 1, // 94: protowire.GetTxsResponseMessage.error:type_name -> protowire.RPCError - 1, // 95: protowire.GetTxConfirmationsResponseMessage.error:type_name -> protowire.RPCError - 111, // 96: protowire.GetTxsConfirmationsResponseMessage.txIDConfirmationsPairs:type_name -> protowire.RpcTxIDConfirmationsPair - 1, // 97: protowire.GetTxsConfirmationsResponseMessage.error:type_name -> protowire.RPCError - 1, // 98: protowire.NotifyTxsConfirmationChangedResponseMessage.error:type_name -> protowire.RPCError - 111, // 99: protowire.TxsConfirmationChangedNotificationMessage.pending:type_name -> protowire.RpcTxIDConfirmationsPair - 111, // 100: protowire.TxsConfirmationChangedNotificationMessage.confirmed:type_name -> protowire.RpcTxIDConfirmationsPair - 1, // 101: protowire.TxsConfirmationChangedNotificationMessage.error:type_name -> protowire.RPCError - 1, // 102: protowire.StopNotifyTxsConfirmationChangedResponseMessage.error:type_name -> protowire.RPCError - 1, // 103: protowire.StartNotifyTxsConfirmationChangedResponseMessage.error:type_name -> protowire.RPCError - 1, // 104: protowire.ModifyNotifyTxsConfirmationChangedParamsResponseMessage.error:type_name -> protowire.RPCError - 145, // 105: protowire.TxEntriesByAddresses.sent:type_name -> protowire.TxEntryByAddress - 145, // 106: protowire.TxEntriesByAddresses.received:type_name -> protowire.TxEntryByAddress - 1, // 107: protowire.NotifyAddressesTxsResponseMessage.error:type_name -> protowire.RPCError - 1, // 108: protowire.StopNotifyAddressesTxsResponseMessage.error:type_name -> protowire.RPCError - 1, // 109: protowire.StartNotifyAddressesTxsResponseMessage.error:type_name -> protowire.RPCError - 1, // 110: protowire.ModifyNotifyAddressesTxsParamsResponseMessage.error:type_name -> protowire.RPCError - 146, // 111: protowire.AddressesTxsNotificationMessage.pending:type_name -> protowire.TxEntriesByAddresses - 146, // 112: protowire.AddressesTxsNotificationMessage.confirmed:type_name -> protowire.TxEntriesByAddresses - 146, // 113: protowire.AddressesTxsNotificationMessage.unconfirmed:type_name -> protowire.TxEntriesByAddresses - 114, // [114:114] is the sub-list for method output_type - 114, // [114:114] is the sub-list for method input_type - 114, // [114:114] is the sub-list for extension type_name - 114, // [114:114] is the sub-list for extension extendee - 0, // [0:114] is the sub-list for field type_name -} - -func init() { file_rpc_proto_init() } -func file_rpc_proto_init() { - if File_rpc_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_rpc_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RPCError); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RpcBlock); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RpcBlockHeader); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RpcBlockLevelParents); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RpcBlockVerboseData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RpcTransaction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RpcTransactionInput); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RpcScriptPublicKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RpcTransactionOutput); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RpcOutpoint); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RpcUtxoEntry); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RpcTransactionVerboseData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RpcTransactionInputVerboseData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RpcTransactionOutputVerboseData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCurrentNetworkRequestMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCurrentNetworkResponseMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitBlockRequestMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitBlockResponseMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockTemplateRequestMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockTemplateResponseMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyBlockAddedRequestMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyBlockAddedResponseMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockAddedNotificationMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPeerAddressesRequestMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPeerAddressesResponseMessage); i { +var file_rpc_proto_rawDesc = []byte{ + 0x0a, 0x09, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x22, 0x24, 0x0a, 0x08, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xbe, 0x01, 0x0a, + 0x08, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x31, 0x0a, 0x06, 0x68, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x0c, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x40, 0x0a, 0x0b, 0x76, + 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x0b, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0xab, 0x03, + 0x0a, 0x0e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x07, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x07, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x61, 0x73, 0x68, 0x4d, 0x65, 0x72, + 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x68, + 0x61, 0x73, 0x68, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x32, 0x0a, + 0x14, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x49, 0x64, 0x4d, 0x65, 0x72, 0x6b, 0x6c, + 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x61, 0x63, 0x63, + 0x65, 0x70, 0x74, 0x65, 0x64, 0x49, 0x64, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, + 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x75, 0x74, 0x78, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x75, 0x74, 0x78, 0x6f, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x69, 0x74, 0x73, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x62, 0x69, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, + 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x08, 0x64, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x62, 0x6c, 0x75, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x62, 0x6c, 0x75, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x75, + 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x62, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x62, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x3a, 0x0a, 0x14, 0x52, + 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x50, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, + 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x22, 0x91, 0x03, 0x0a, 0x13, 0x52, 0x70, 0x63, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 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, 0x01, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, + 0x6c, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x12, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x12, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, + 0x61, 0x73, 0x68, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x69, + 0x73, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0c, 0x69, 0x73, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x79, 0x12, + 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x09, 0x62, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x26, 0x0a, + 0x0e, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, + 0x11, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x48, + 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x65, + 0x74, 0x42, 0x6c, 0x75, 0x65, 0x73, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x12, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x13, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x65, 0x74, 0x42, 0x6c, 0x75, 0x65, + 0x73, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x6d, 0x65, 0x72, 0x67, 0x65, + 0x53, 0x65, 0x74, 0x52, 0x65, 0x64, 0x73, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x13, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x12, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x64, + 0x73, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x73, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, + 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0xd1, 0x02, 0x0a, 0x0e, + 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, + 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x06, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, + 0x12, 0x39, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, + 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6c, + 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, + 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, + 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, + 0x61, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, 0x61, 0x73, 0x12, 0x18, 0x0a, + 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x46, 0x0a, 0x0b, 0x76, 0x65, 0x72, 0x62, 0x6f, + 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x0b, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, + 0x8c, 0x02, 0x0a, 0x13, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x42, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x76, 0x69, + 0x6f, 0x75, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, + 0x63, 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x10, 0x70, 0x72, 0x65, 0x76, 0x69, + 0x6f, 0x75, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x4f, 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x4f, 0x70, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x4b, 0x0a, 0x0b, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x0b, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x58, + 0x0a, 0x12, 0x52, 0x70, 0x63, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, + 0x0a, 0x0f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x22, 0xc5, 0x01, 0x0a, 0x14, 0x52, 0x70, 0x63, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x0f, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x70, 0x63, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x52, 0x0f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, + 0x65, 0x79, 0x12, 0x4c, 0x0a, 0x0b, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x0b, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x22, 0x49, 0x0a, 0x0b, 0x52, 0x70, 0x63, 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, + 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xb5, 0x01, 0x0a, 0x0c, + 0x52, 0x70, 0x63, 0x55, 0x74, 0x78, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x0f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x53, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x0f, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x24, 0x0a, + 0x0d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x61, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x62, + 0x61, 0x73, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x19, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6d, + 0x61, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x6d, 0x61, 0x73, 0x73, 0x12, + 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, + 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x20, 0x0a, 0x1e, 0x52, + 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, + 0x75, 0x74, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x8b, 0x01, + 0x0a, 0x1f, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x30, 0x0a, 0x13, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x16, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x4b, 0x65, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x21, 0x0a, 0x1f, 0x47, + 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x76, + 0x0a, 0x20, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x74, 0x0a, 0x19, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2c, + 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x6f, 0x6e, 0x44, 0x41, 0x41, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x4e, 0x6f, 0x6e, 0x44, 0x41, 0x41, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x22, 0xdc, 0x01, 0x0a, + 0x1a, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x56, 0x0a, 0x0c, 0x72, + 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x0c, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, + 0x3a, 0x0a, 0x0c, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, + 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x42, 0x4c, 0x4f, + 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, + 0x49, 0x53, 0x5f, 0x49, 0x4e, 0x5f, 0x49, 0x42, 0x44, 0x10, 0x02, 0x22, 0x5e, 0x0a, 0x1e, 0x47, + 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, + 0x0a, 0x70, 0x61, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, + 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x44, 0x61, 0x74, 0x61, 0x22, 0x94, 0x01, 0x0a, 0x1f, + 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, + 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, + 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x20, 0x0a, 0x1e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x4d, 0x0a, 0x1f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0x4a, 0x0a, 0x1d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, + 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, + 0x20, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0xf5, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x0f, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0f, 0x62, 0x61, + 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x2a, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x39, 0x0a, 0x23, 0x47, 0x65, 0x74, + 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4b, 0x6e, 0x6f, + 0x77, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x41, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x41, 0x64, 0x64, 0x72, 0x22, 0x22, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x79, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, + 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0x97, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, + 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, + 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x34, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x7b, 0x0a, + 0x1e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x2d, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, + 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x2a, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x85, 0x01, 0x0a, 0x1f, 0x47, + 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2c, + 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, + 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x34, 0x0a, 0x15, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, + 0x6f, 0x6c, 0x22, 0x81, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, + 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x79, 0x0a, 0x0c, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, + 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x4f, 0x72, 0x70, 0x68, 0x61, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4f, 0x72, 0x70, 0x68, 0x61, + 0x6e, 0x22, 0x24, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x3c, 0x0a, 0x05, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x2a, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xd3, 0x02, 0x0a, 0x1b, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, + 0x66, 0x6f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x44, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6c, + 0x61, 0x73, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, + 0x1e, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, + 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x3c, 0x0a, + 0x19, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x19, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x74, + 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x49, 0x62, 0x64, 0x50, 0x65, 0x65, 0x72, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x49, 0x62, 0x64, 0x50, 0x65, 0x65, 0x72, 0x22, + 0x53, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x61, + 0x6e, 0x65, 0x6e, 0x74, 0x22, 0x44, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x80, 0x01, 0x0a, 0x1f, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, + 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x22, 0x74, 0x0a, + 0x20, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0x7d, 0x0a, 0x35, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, + 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x1d, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x63, 0x63, 0x65, + 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x73, 0x22, 0x64, 0x0a, 0x36, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, + 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x81, 0x02, 0x0a, 0x34, 0x56, 0x69, 0x72, + 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x38, 0x0a, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x61, + 0x64, 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, + 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x61, 0x64, 0x64, 0x65, + 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, + 0x73, 0x12, 0x59, 0x0a, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x63, + 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x73, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, 0x5e, 0x0a, 0x16, + 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x30, 0x0a, 0x13, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x70, 0x0a, 0x17, + 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x41, + 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, + 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, + 0x64, 0x22, 0x66, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2a, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x9a, 0x01, 0x0a, 0x34, 0x47, 0x65, + 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, + 0x12, 0x44, 0x0a, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x63, 0x63, 0x65, 0x70, + 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x16, 0x41, 0x63, 0x63, 0x65, 0x70, + 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x61, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, + 0x68, 0x12, 0x36, 0x0a, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, 0xae, 0x02, 0x0a, 0x35, 0x47, 0x65, + 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x34, 0x0a, + 0x15, 0x61, 0x64, 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x61, 0x64, + 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, + 0x68, 0x65, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2a, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x8b, 0x01, 0x0a, 0x17, 0x47, + 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x6f, 0x77, 0x48, 0x61, 0x73, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x6f, 0x77, 0x48, 0x61, 0x73, 0x68, + 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, + 0x73, 0x68, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x06, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x8c, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x1f, + 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x9e, 0x03, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x70, 0x48, 0x61, 0x73, + 0x68, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x70, 0x48, 0x61, + 0x73, 0x68, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, + 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, + 0x75, 0x6c, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x64, 0x69, + 0x61, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x61, + 0x73, 0x74, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x13, + 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, + 0x68, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x76, 0x69, 0x72, 0x74, 0x75, + 0x61, 0x6c, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x2a, + 0x0a, 0x10, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x48, 0x61, + 0x73, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, + 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x28, 0x0a, 0x0f, 0x76, 0x69, + 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x22, 0x55, 0x0a, 0x25, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, + 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x69, 0x6e, + 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x22, 0x54, 0x0a, 0x26, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, + 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, + 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x27, 0x0a, + 0x25, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, + 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x54, 0x0a, 0x26, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x55, 0x0a, 0x23, + 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x12, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, + 0x61, 0x73, 0x68, 0x22, 0x5b, 0x0a, 0x2b, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, + 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, + 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, + 0x22, 0x18, 0x0a, 0x16, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x45, 0x0a, 0x17, 0x53, 0x68, + 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x70, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x41, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x41, 0x73, 0x63, 0x65, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x22, 0x61, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x40, 0x0a, 0x20, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x4f, 0x0a, 0x21, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x95, 0x01, 0x0a, 0x1f, 0x55, 0x74, + 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, + 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, + 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x64, 0x22, 0x9c, 0x01, 0x0a, 0x15, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x32, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, + 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x09, 0x75, 0x74, 0x78, + 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x55, 0x74, 0x78, 0x6f, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x75, 0x74, 0x78, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x22, 0x47, 0x0a, 0x27, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, + 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x56, 0x0a, 0x28, 0x53, 0x74, 0x6f, + 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x41, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x22, 0x8c, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, + 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x65, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, + 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x22, 0x6a, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x44, + 0x0a, 0x24, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x18, + 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x90, + 0x01, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x31, 0x0a, 0x2f, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, + 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x7c, 0x0a, 0x30, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, + 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x75, 0x65, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x62, 0x6c, 0x75, + 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x3b, 0x0a, 0x39, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, + 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x68, 0x0a, 0x3a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, + 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x82, 0x01, 0x0a, 0x38, 0x56, 0x69, + 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x1e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, + 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, + 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1e, + 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x2c, + 0x0a, 0x2a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, + 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x59, 0x0a, 0x2b, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x55, 0x0a, 0x29, 0x56, 0x69, 0x72, 0x74, 0x75, + 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, + 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x76, + 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x31, + 0x0a, 0x2f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, + 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x5e, 0x0a, 0x30, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, + 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, + 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x30, 0x0a, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x38, 0x0a, 0x36, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x65, 0x0a, + 0x37, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, + 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, + 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x23, 0x0a, 0x11, 0x42, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x22, 0x40, 0x0a, 0x12, 0x42, 0x61, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x25, 0x0a, 0x13, 0x55, + 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x70, 0x22, 0x42, 0x0a, 0x14, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0xe4, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x32, + 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x32, 0x70, 0x49, 0x64, + 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x73, 0x55, 0x74, + 0x78, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0d, 0x69, 0x73, 0x55, 0x74, 0x78, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, + 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, + 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x6a, 0x0a, 0x28, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, + 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, + 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x6c, 0x0a, 0x2c, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x69, 0x7a, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x69, 0x7a, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x22, + 0x93, 0x01, 0x0a, 0x2d, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x36, 0x0a, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, + 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, + 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x26, 0x0a, 0x24, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, + 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x53, 0x0a, + 0x25, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x25, 0x0a, 0x23, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x9b, 0x01, 0x0a, 0x15, 0x4d, 0x65, + 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x31, 0x0a, + 0x07, 0x73, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, + 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x12, 0x35, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x72, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x22, 0xae, 0x01, 0x0a, 0x2a, 0x47, 0x65, 0x74, 0x4d, + 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, + 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, + 0x6f, 0x6c, 0x12, 0x34, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x95, 0x01, 0x0a, 0x2b, 0x47, 0x65, 0x74, + 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x65, 0x6e, 0x74, + 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x92, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x12, 0x2a, 0x0a, 0x10, + 0x63, 0x69, 0x72, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x6d, 0x70, 0x69, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6c, 0x61, 0x74, + 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x54, 0x0a, 0x18, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x78, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3e, 0x0a, 0x14, 0x52, 0x70, + 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, + 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x48, 0x61, 0x73, 0x68, 0x22, 0x51, 0x0a, 0x10, 0x52, 0x70, + 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, + 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, + 0x49, 0x44, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, + 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x42, 0x0a, + 0x2a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, + 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, + 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x2b, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, + 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, + 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x4f, 0x0a, 0x12, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, + 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, + 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x52, 0x12, + 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, + 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2c, + 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0x82, 0x01, 0x0a, + 0x15, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x39, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0xad, 0x01, 0x0a, + 0x22, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x5b, 0x0a, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, + 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xa0, 0x01, 0x0a, + 0x2a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, + 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, + 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, + 0x59, 0x0a, 0x2b, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xbb, 0x02, 0x0a, 0x29, 0x54, + 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3d, + 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, + 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x50, 0x61, 0x69, 0x72, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, + 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, + 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, + 0x12, 0x2a, 0x0a, 0x10, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x54, + 0x78, 0x49, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x75, 0x6e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xd1, 0x01, 0x0a, 0x33, 0x4d, 0x6f, 0x64, + 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x73, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x64, 0x64, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x08, 0x61, 0x64, 0x64, 0x54, 0x78, 0x49, 0x44, 0x73, 0x12, 0x20, 0x0a, 0x0b, + 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x78, 0x49, 0x44, 0x73, 0x12, 0x34, + 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x62, 0x0a, 0x34, + 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x54, + 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x22, 0x66, 0x0a, 0x10, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, + 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, + 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x54, 0x78, 0x45, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x04, 0x73, 0x65, + 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x22, 0xf2, 0x01, 0x0a, 0x20, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, + 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x34, + 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0e, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, + 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, + 0x22, 0x4f, 0x0a, 0x21, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0xab, 0x02, 0x0a, 0x29, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x69, 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x22, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x41, 0x64, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x34, 0x0a, + 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0e, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x22, + 0x58, 0x0a, 0x2a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, + 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x94, 0x02, 0x0a, 0x1f, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, + 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x39, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x3d, + 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, + 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x41, 0x0a, + 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, + 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x52, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, + 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, + 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_rpc_proto_rawDescOnce sync.Once + file_rpc_proto_rawDescData = file_rpc_proto_rawDesc +) + +func file_rpc_proto_rawDescGZIP() []byte { + file_rpc_proto_rawDescOnce.Do(func() { + file_rpc_proto_rawDescData = protoimpl.X.CompressGZIP(file_rpc_proto_rawDescData) + }) + return file_rpc_proto_rawDescData +} + +var file_rpc_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 131) +var file_rpc_proto_goTypes = []interface{}{ + (SubmitBlockResponseMessage_RejectReason)(0), // 0: protowire.SubmitBlockResponseMessage.RejectReason + (*RPCError)(nil), // 1: protowire.RPCError + (*RpcBlock)(nil), // 2: protowire.RpcBlock + (*RpcBlockHeader)(nil), // 3: protowire.RpcBlockHeader + (*RpcBlockLevelParents)(nil), // 4: protowire.RpcBlockLevelParents + (*RpcBlockVerboseData)(nil), // 5: protowire.RpcBlockVerboseData + (*RpcTransaction)(nil), // 6: protowire.RpcTransaction + (*RpcTransactionInput)(nil), // 7: protowire.RpcTransactionInput + (*RpcScriptPublicKey)(nil), // 8: protowire.RpcScriptPublicKey + (*RpcTransactionOutput)(nil), // 9: protowire.RpcTransactionOutput + (*RpcOutpoint)(nil), // 10: protowire.RpcOutpoint + (*RpcUtxoEntry)(nil), // 11: protowire.RpcUtxoEntry + (*RpcTransactionVerboseData)(nil), // 12: protowire.RpcTransactionVerboseData + (*RpcTransactionInputVerboseData)(nil), // 13: protowire.RpcTransactionInputVerboseData + (*RpcTransactionOutputVerboseData)(nil), // 14: protowire.RpcTransactionOutputVerboseData + (*GetCurrentNetworkRequestMessage)(nil), // 15: protowire.GetCurrentNetworkRequestMessage + (*GetCurrentNetworkResponseMessage)(nil), // 16: protowire.GetCurrentNetworkResponseMessage + (*SubmitBlockRequestMessage)(nil), // 17: protowire.SubmitBlockRequestMessage + (*SubmitBlockResponseMessage)(nil), // 18: protowire.SubmitBlockResponseMessage + (*GetBlockTemplateRequestMessage)(nil), // 19: protowire.GetBlockTemplateRequestMessage + (*GetBlockTemplateResponseMessage)(nil), // 20: protowire.GetBlockTemplateResponseMessage + (*NotifyBlockAddedRequestMessage)(nil), // 21: protowire.NotifyBlockAddedRequestMessage + (*NotifyBlockAddedResponseMessage)(nil), // 22: protowire.NotifyBlockAddedResponseMessage + (*BlockAddedNotificationMessage)(nil), // 23: protowire.BlockAddedNotificationMessage + (*GetPeerAddressesRequestMessage)(nil), // 24: protowire.GetPeerAddressesRequestMessage + (*GetPeerAddressesResponseMessage)(nil), // 25: protowire.GetPeerAddressesResponseMessage + (*GetPeerAddressesKnownAddressMessage)(nil), // 26: protowire.GetPeerAddressesKnownAddressMessage + (*GetSelectedTipHashRequestMessage)(nil), // 27: protowire.GetSelectedTipHashRequestMessage + (*GetSelectedTipHashResponseMessage)(nil), // 28: protowire.GetSelectedTipHashResponseMessage + (*GetMempoolEntryRequestMessage)(nil), // 29: protowire.GetMempoolEntryRequestMessage + (*GetMempoolEntryResponseMessage)(nil), // 30: protowire.GetMempoolEntryResponseMessage + (*GetMempoolEntriesRequestMessage)(nil), // 31: protowire.GetMempoolEntriesRequestMessage + (*GetMempoolEntriesResponseMessage)(nil), // 32: protowire.GetMempoolEntriesResponseMessage + (*MempoolEntry)(nil), // 33: protowire.MempoolEntry + (*GetConnectedPeerInfoRequestMessage)(nil), // 34: protowire.GetConnectedPeerInfoRequestMessage + (*GetConnectedPeerInfoResponseMessage)(nil), // 35: protowire.GetConnectedPeerInfoResponseMessage + (*GetConnectedPeerInfoMessage)(nil), // 36: protowire.GetConnectedPeerInfoMessage + (*AddPeerRequestMessage)(nil), // 37: protowire.AddPeerRequestMessage + (*AddPeerResponseMessage)(nil), // 38: protowire.AddPeerResponseMessage + (*SubmitTransactionRequestMessage)(nil), // 39: protowire.SubmitTransactionRequestMessage + (*SubmitTransactionResponseMessage)(nil), // 40: protowire.SubmitTransactionResponseMessage + (*NotifyVirtualSelectedParentChainChangedRequestMessage)(nil), // 41: protowire.NotifyVirtualSelectedParentChainChangedRequestMessage + (*NotifyVirtualSelectedParentChainChangedResponseMessage)(nil), // 42: protowire.NotifyVirtualSelectedParentChainChangedResponseMessage + (*VirtualSelectedParentChainChangedNotificationMessage)(nil), // 43: protowire.VirtualSelectedParentChainChangedNotificationMessage + (*GetBlockRequestMessage)(nil), // 44: protowire.GetBlockRequestMessage + (*GetBlockResponseMessage)(nil), // 45: protowire.GetBlockResponseMessage + (*GetSubnetworkRequestMessage)(nil), // 46: protowire.GetSubnetworkRequestMessage + (*GetSubnetworkResponseMessage)(nil), // 47: protowire.GetSubnetworkResponseMessage + (*GetVirtualSelectedParentChainFromBlockRequestMessage)(nil), // 48: protowire.GetVirtualSelectedParentChainFromBlockRequestMessage + (*AcceptedTransactionIds)(nil), // 49: protowire.AcceptedTransactionIds + (*GetVirtualSelectedParentChainFromBlockResponseMessage)(nil), // 50: protowire.GetVirtualSelectedParentChainFromBlockResponseMessage + (*GetBlocksRequestMessage)(nil), // 51: protowire.GetBlocksRequestMessage + (*GetBlocksResponseMessage)(nil), // 52: protowire.GetBlocksResponseMessage + (*GetBlockCountRequestMessage)(nil), // 53: protowire.GetBlockCountRequestMessage + (*GetBlockCountResponseMessage)(nil), // 54: protowire.GetBlockCountResponseMessage + (*GetBlockDagInfoRequestMessage)(nil), // 55: protowire.GetBlockDagInfoRequestMessage + (*GetBlockDagInfoResponseMessage)(nil), // 56: protowire.GetBlockDagInfoResponseMessage + (*ResolveFinalityConflictRequestMessage)(nil), // 57: protowire.ResolveFinalityConflictRequestMessage + (*ResolveFinalityConflictResponseMessage)(nil), // 58: protowire.ResolveFinalityConflictResponseMessage + (*NotifyFinalityConflictsRequestMessage)(nil), // 59: protowire.NotifyFinalityConflictsRequestMessage + (*NotifyFinalityConflictsResponseMessage)(nil), // 60: protowire.NotifyFinalityConflictsResponseMessage + (*FinalityConflictNotificationMessage)(nil), // 61: protowire.FinalityConflictNotificationMessage + (*FinalityConflictResolvedNotificationMessage)(nil), // 62: protowire.FinalityConflictResolvedNotificationMessage + (*ShutDownRequestMessage)(nil), // 63: protowire.ShutDownRequestMessage + (*ShutDownResponseMessage)(nil), // 64: protowire.ShutDownResponseMessage + (*GetHeadersRequestMessage)(nil), // 65: protowire.GetHeadersRequestMessage + (*GetHeadersResponseMessage)(nil), // 66: protowire.GetHeadersResponseMessage + (*NotifyUtxosChangedRequestMessage)(nil), // 67: protowire.NotifyUtxosChangedRequestMessage + (*NotifyUtxosChangedResponseMessage)(nil), // 68: protowire.NotifyUtxosChangedResponseMessage + (*UtxosChangedNotificationMessage)(nil), // 69: protowire.UtxosChangedNotificationMessage + (*UtxosByAddressesEntry)(nil), // 70: protowire.UtxosByAddressesEntry + (*StopNotifyingUtxosChangedRequestMessage)(nil), // 71: protowire.StopNotifyingUtxosChangedRequestMessage + (*StopNotifyingUtxosChangedResponseMessage)(nil), // 72: protowire.StopNotifyingUtxosChangedResponseMessage + (*GetUtxosByAddressesRequestMessage)(nil), // 73: protowire.GetUtxosByAddressesRequestMessage + (*GetUtxosByAddressesResponseMessage)(nil), // 74: protowire.GetUtxosByAddressesResponseMessage + (*GetBalanceByAddressRequestMessage)(nil), // 75: protowire.GetBalanceByAddressRequestMessage + (*GetBalanceByAddressResponseMessage)(nil), // 76: protowire.GetBalanceByAddressResponseMessage + (*GetBalancesByAddressesRequestMessage)(nil), // 77: protowire.GetBalancesByAddressesRequestMessage + (*BalancesByAddressEntry)(nil), // 78: protowire.BalancesByAddressEntry + (*GetBalancesByAddressesResponseMessage)(nil), // 79: protowire.GetBalancesByAddressesResponseMessage + (*GetVirtualSelectedParentBlueScoreRequestMessage)(nil), // 80: protowire.GetVirtualSelectedParentBlueScoreRequestMessage + (*GetVirtualSelectedParentBlueScoreResponseMessage)(nil), // 81: protowire.GetVirtualSelectedParentBlueScoreResponseMessage + (*NotifyVirtualSelectedParentBlueScoreChangedRequestMessage)(nil), // 82: protowire.NotifyVirtualSelectedParentBlueScoreChangedRequestMessage + (*NotifyVirtualSelectedParentBlueScoreChangedResponseMessage)(nil), // 83: protowire.NotifyVirtualSelectedParentBlueScoreChangedResponseMessage + (*VirtualSelectedParentBlueScoreChangedNotificationMessage)(nil), // 84: protowire.VirtualSelectedParentBlueScoreChangedNotificationMessage + (*NotifyVirtualDaaScoreChangedRequestMessage)(nil), // 85: protowire.NotifyVirtualDaaScoreChangedRequestMessage + (*NotifyVirtualDaaScoreChangedResponseMessage)(nil), // 86: protowire.NotifyVirtualDaaScoreChangedResponseMessage + (*VirtualDaaScoreChangedNotificationMessage)(nil), // 87: protowire.VirtualDaaScoreChangedNotificationMessage + (*NotifyPruningPointUTXOSetOverrideRequestMessage)(nil), // 88: protowire.NotifyPruningPointUTXOSetOverrideRequestMessage + (*NotifyPruningPointUTXOSetOverrideResponseMessage)(nil), // 89: protowire.NotifyPruningPointUTXOSetOverrideResponseMessage + (*PruningPointUTXOSetOverrideNotificationMessage)(nil), // 90: protowire.PruningPointUTXOSetOverrideNotificationMessage + (*StopNotifyingPruningPointUTXOSetOverrideRequestMessage)(nil), // 91: protowire.StopNotifyingPruningPointUTXOSetOverrideRequestMessage + (*StopNotifyingPruningPointUTXOSetOverrideResponseMessage)(nil), // 92: protowire.StopNotifyingPruningPointUTXOSetOverrideResponseMessage + (*BanRequestMessage)(nil), // 93: protowire.BanRequestMessage + (*BanResponseMessage)(nil), // 94: protowire.BanResponseMessage + (*UnbanRequestMessage)(nil), // 95: protowire.UnbanRequestMessage + (*UnbanResponseMessage)(nil), // 96: protowire.UnbanResponseMessage + (*GetInfoRequestMessage)(nil), // 97: protowire.GetInfoRequestMessage + (*GetInfoResponseMessage)(nil), // 98: protowire.GetInfoResponseMessage + (*GetAcceptingBlockHashOfTxRequestMessage)(nil), // 99: protowire.GetAcceptingBlockHashOfTxRequestMessage + (*GetAcceptingBlockHashOfTxResponseMessage)(nil), // 100: protowire.GetAcceptingBlockHashOfTxResponseMessage + (*EstimateNetworkHashesPerSecondRequestMessage)(nil), // 101: protowire.EstimateNetworkHashesPerSecondRequestMessage + (*EstimateNetworkHashesPerSecondResponseMessage)(nil), // 102: protowire.EstimateNetworkHashesPerSecondResponseMessage + (*NotifyNewBlockTemplateRequestMessage)(nil), // 103: protowire.NotifyNewBlockTemplateRequestMessage + (*NotifyNewBlockTemplateResponseMessage)(nil), // 104: protowire.NotifyNewBlockTemplateResponseMessage + (*NewBlockTemplateNotificationMessage)(nil), // 105: protowire.NewBlockTemplateNotificationMessage + (*MempoolEntryByAddress)(nil), // 106: protowire.MempoolEntryByAddress + (*GetMempoolEntriesByAddressesRequestMessage)(nil), // 107: protowire.GetMempoolEntriesByAddressesRequestMessage + (*GetMempoolEntriesByAddressesResponseMessage)(nil), // 108: protowire.GetMempoolEntriesByAddressesResponseMessage + (*GetCoinSupplyRequestMessage)(nil), // 109: protowire.GetCoinSupplyRequestMessage + (*GetCoinSupplyResponseMessage)(nil), // 110: protowire.GetCoinSupplyResponseMessage + (*RpcTxIDConfirmationsPair)(nil), // 111: protowire.RpcTxIDConfirmationsPair + (*RpcTxIDBlockHashPair)(nil), // 112: protowire.RpcTxIDBlockHashPair + (*RpcTxIDBlockPair)(nil), // 113: protowire.RpcTxIDBlockPair + (*GetAcceptingBlockHashesOfTxsRequestMessage)(nil), // 114: protowire.GetAcceptingBlockHashesOfTxsRequestMessage + (*GetAcceptingBlockHashesOfTxsResponseMessage)(nil), // 115: protowire.GetAcceptingBlockHashesOfTxsResponseMessage + (*GetTxsRequestMessage)(nil), // 116: protowire.GetTxsRequestMessage + (*GetTxsResponseMessage)(nil), // 117: protowire.GetTxsResponseMessage + (*GetTxsConfirmationsRequestMessage)(nil), // 118: protowire.GetTxsConfirmationsRequestMessage + (*GetTxsConfirmationsResponseMessage)(nil), // 119: protowire.GetTxsConfirmationsResponseMessage + (*NotifyTxsConfirmationChangedRequestMessage)(nil), // 120: protowire.NotifyTxsConfirmationChangedRequestMessage + (*NotifyTxsConfirmationChangedResponseMessage)(nil), // 121: protowire.NotifyTxsConfirmationChangedResponseMessage + (*TxsConfirmationChangedNotificationMessage)(nil), // 122: protowire.TxsConfirmationChangedNotificationMessage + (*ModifyNotifyingTxsConfirmationChangedRequestMessage)(nil), // 123: protowire.ModifyNotifyingTxsConfirmationChangedRequestMessage + (*ModifyNotifyingTxsConfirmationChangedResponseMessage)(nil), // 124: protowire.ModifyNotifyingTxsConfirmationChangedResponseMessage + (*TxEntryByAddress)(nil), // 125: protowire.TxEntryByAddress + (*TxEntriesByAddresses)(nil), // 126: protowire.TxEntriesByAddresses + (*NotifyAddressesTxsRequestMessage)(nil), // 127: protowire.NotifyAddressesTxsRequestMessage + (*NotifyAddressesTxsResponseMessage)(nil), // 128: protowire.NotifyAddressesTxsResponseMessage + (*ModifyNotifyingAddressesTxsRequestMessage)(nil), // 129: protowire.ModifyNotifyingAddressesTxsRequestMessage + (*ModifyNotifyingAddressesTxsResponseMessage)(nil), // 130: protowire.ModifyNotifyingAddressesTxsResponseMessage + (*AddressesTxsNotificationMessage)(nil), // 131: protowire.AddressesTxsNotificationMessage +} +var file_rpc_proto_depIdxs = []int32{ + 3, // 0: protowire.RpcBlock.header:type_name -> protowire.RpcBlockHeader + 6, // 1: protowire.RpcBlock.transactions:type_name -> protowire.RpcTransaction + 5, // 2: protowire.RpcBlock.verboseData:type_name -> protowire.RpcBlockVerboseData + 4, // 3: protowire.RpcBlockHeader.parents:type_name -> protowire.RpcBlockLevelParents + 7, // 4: protowire.RpcTransaction.inputs:type_name -> protowire.RpcTransactionInput + 9, // 5: protowire.RpcTransaction.outputs:type_name -> protowire.RpcTransactionOutput + 12, // 6: protowire.RpcTransaction.verboseData:type_name -> protowire.RpcTransactionVerboseData + 10, // 7: protowire.RpcTransactionInput.previousOutpoint:type_name -> protowire.RpcOutpoint + 13, // 8: protowire.RpcTransactionInput.verboseData:type_name -> protowire.RpcTransactionInputVerboseData + 8, // 9: protowire.RpcTransactionOutput.scriptPublicKey:type_name -> protowire.RpcScriptPublicKey + 14, // 10: protowire.RpcTransactionOutput.verboseData:type_name -> protowire.RpcTransactionOutputVerboseData + 8, // 11: protowire.RpcUtxoEntry.scriptPublicKey:type_name -> protowire.RpcScriptPublicKey + 1, // 12: protowire.GetCurrentNetworkResponseMessage.error:type_name -> protowire.RPCError + 2, // 13: protowire.SubmitBlockRequestMessage.block:type_name -> protowire.RpcBlock + 0, // 14: protowire.SubmitBlockResponseMessage.rejectReason:type_name -> protowire.SubmitBlockResponseMessage.RejectReason + 1, // 15: protowire.SubmitBlockResponseMessage.error:type_name -> protowire.RPCError + 2, // 16: protowire.GetBlockTemplateResponseMessage.block:type_name -> protowire.RpcBlock + 1, // 17: protowire.GetBlockTemplateResponseMessage.error:type_name -> protowire.RPCError + 1, // 18: protowire.NotifyBlockAddedResponseMessage.error:type_name -> protowire.RPCError + 2, // 19: protowire.BlockAddedNotificationMessage.block:type_name -> protowire.RpcBlock + 26, // 20: protowire.GetPeerAddressesResponseMessage.addresses:type_name -> protowire.GetPeerAddressesKnownAddressMessage + 26, // 21: protowire.GetPeerAddressesResponseMessage.bannedAddresses:type_name -> protowire.GetPeerAddressesKnownAddressMessage + 1, // 22: protowire.GetPeerAddressesResponseMessage.error:type_name -> protowire.RPCError + 1, // 23: protowire.GetSelectedTipHashResponseMessage.error:type_name -> protowire.RPCError + 33, // 24: protowire.GetMempoolEntryResponseMessage.entry:type_name -> protowire.MempoolEntry + 1, // 25: protowire.GetMempoolEntryResponseMessage.error:type_name -> protowire.RPCError + 33, // 26: protowire.GetMempoolEntriesResponseMessage.entries:type_name -> protowire.MempoolEntry + 1, // 27: protowire.GetMempoolEntriesResponseMessage.error:type_name -> protowire.RPCError + 6, // 28: protowire.MempoolEntry.transaction:type_name -> protowire.RpcTransaction + 36, // 29: protowire.GetConnectedPeerInfoResponseMessage.infos:type_name -> protowire.GetConnectedPeerInfoMessage + 1, // 30: protowire.GetConnectedPeerInfoResponseMessage.error:type_name -> protowire.RPCError + 1, // 31: protowire.AddPeerResponseMessage.error:type_name -> protowire.RPCError + 6, // 32: protowire.SubmitTransactionRequestMessage.transaction:type_name -> protowire.RpcTransaction + 1, // 33: protowire.SubmitTransactionResponseMessage.error:type_name -> protowire.RPCError + 1, // 34: protowire.NotifyVirtualSelectedParentChainChangedResponseMessage.error:type_name -> protowire.RPCError + 49, // 35: protowire.VirtualSelectedParentChainChangedNotificationMessage.acceptedTransactionIds:type_name -> protowire.AcceptedTransactionIds + 2, // 36: protowire.GetBlockResponseMessage.block:type_name -> protowire.RpcBlock + 1, // 37: protowire.GetBlockResponseMessage.error:type_name -> protowire.RPCError + 1, // 38: protowire.GetSubnetworkResponseMessage.error:type_name -> protowire.RPCError + 49, // 39: protowire.GetVirtualSelectedParentChainFromBlockResponseMessage.acceptedTransactionIds:type_name -> protowire.AcceptedTransactionIds + 1, // 40: protowire.GetVirtualSelectedParentChainFromBlockResponseMessage.error:type_name -> protowire.RPCError + 2, // 41: protowire.GetBlocksResponseMessage.blocks:type_name -> protowire.RpcBlock + 1, // 42: protowire.GetBlocksResponseMessage.error:type_name -> protowire.RPCError + 1, // 43: protowire.GetBlockCountResponseMessage.error:type_name -> protowire.RPCError + 1, // 44: protowire.GetBlockDagInfoResponseMessage.error:type_name -> protowire.RPCError + 1, // 45: protowire.ResolveFinalityConflictResponseMessage.error:type_name -> protowire.RPCError + 1, // 46: protowire.NotifyFinalityConflictsResponseMessage.error:type_name -> protowire.RPCError + 1, // 47: protowire.ShutDownResponseMessage.error:type_name -> protowire.RPCError + 1, // 48: protowire.GetHeadersResponseMessage.error:type_name -> protowire.RPCError + 1, // 49: protowire.NotifyUtxosChangedResponseMessage.error:type_name -> protowire.RPCError + 70, // 50: protowire.UtxosChangedNotificationMessage.added:type_name -> protowire.UtxosByAddressesEntry + 70, // 51: protowire.UtxosChangedNotificationMessage.removed:type_name -> protowire.UtxosByAddressesEntry + 10, // 52: protowire.UtxosByAddressesEntry.outpoint:type_name -> protowire.RpcOutpoint + 11, // 53: protowire.UtxosByAddressesEntry.utxoEntry:type_name -> protowire.RpcUtxoEntry + 1, // 54: protowire.StopNotifyingUtxosChangedResponseMessage.error:type_name -> protowire.RPCError + 70, // 55: protowire.GetUtxosByAddressesResponseMessage.entries:type_name -> protowire.UtxosByAddressesEntry + 1, // 56: protowire.GetUtxosByAddressesResponseMessage.error:type_name -> protowire.RPCError + 1, // 57: protowire.GetBalanceByAddressResponseMessage.error:type_name -> protowire.RPCError + 1, // 58: protowire.BalancesByAddressEntry.error:type_name -> protowire.RPCError + 78, // 59: protowire.GetBalancesByAddressesResponseMessage.entries:type_name -> protowire.BalancesByAddressEntry + 1, // 60: protowire.GetBalancesByAddressesResponseMessage.error:type_name -> protowire.RPCError + 1, // 61: protowire.GetVirtualSelectedParentBlueScoreResponseMessage.error:type_name -> protowire.RPCError + 1, // 62: protowire.NotifyVirtualSelectedParentBlueScoreChangedResponseMessage.error:type_name -> protowire.RPCError + 1, // 63: protowire.NotifyVirtualDaaScoreChangedResponseMessage.error:type_name -> protowire.RPCError + 1, // 64: protowire.NotifyPruningPointUTXOSetOverrideResponseMessage.error:type_name -> protowire.RPCError + 1, // 65: protowire.StopNotifyingPruningPointUTXOSetOverrideResponseMessage.error:type_name -> protowire.RPCError + 1, // 66: protowire.BanResponseMessage.error:type_name -> protowire.RPCError + 1, // 67: protowire.UnbanResponseMessage.error:type_name -> protowire.RPCError + 1, // 68: protowire.GetInfoResponseMessage.error:type_name -> protowire.RPCError + 1, // 69: protowire.GetAcceptingBlockHashOfTxResponseMessage.error:type_name -> protowire.RPCError + 1, // 70: protowire.EstimateNetworkHashesPerSecondResponseMessage.error:type_name -> protowire.RPCError + 1, // 71: protowire.NotifyNewBlockTemplateResponseMessage.error:type_name -> protowire.RPCError + 33, // 72: protowire.MempoolEntryByAddress.sending:type_name -> protowire.MempoolEntry + 33, // 73: protowire.MempoolEntryByAddress.receiving:type_name -> protowire.MempoolEntry + 106, // 74: protowire.GetMempoolEntriesByAddressesResponseMessage.entries:type_name -> protowire.MempoolEntryByAddress + 1, // 75: protowire.GetMempoolEntriesByAddressesResponseMessage.error:type_name -> protowire.RPCError + 1, // 76: protowire.GetCoinSupplyResponseMessage.error:type_name -> protowire.RPCError + 2, // 77: protowire.RpcTxIDBlockPair.block:type_name -> protowire.RpcBlock + 112, // 78: protowire.GetAcceptingBlockHashesOfTxsResponseMessage.txIDBlockHashPairs:type_name -> protowire.RpcTxIDBlockHashPair + 1, // 79: protowire.GetAcceptingBlockHashesOfTxsResponseMessage.error:type_name -> protowire.RPCError + 6, // 80: protowire.GetTxsResponseMessage.transactions:type_name -> protowire.RpcTransaction + 1, // 81: protowire.GetTxsResponseMessage.error:type_name -> protowire.RPCError + 111, // 82: protowire.GetTxsConfirmationsResponseMessage.txIDConfirmationsPairs:type_name -> protowire.RpcTxIDConfirmationsPair + 1, // 83: protowire.GetTxsConfirmationsResponseMessage.error:type_name -> protowire.RPCError + 1, // 84: protowire.NotifyTxsConfirmationChangedResponseMessage.error:type_name -> protowire.RPCError + 111, // 85: protowire.TxsConfirmationChangedNotificationMessage.pending:type_name -> protowire.RpcTxIDConfirmationsPair + 111, // 86: protowire.TxsConfirmationChangedNotificationMessage.confirmed:type_name -> protowire.RpcTxIDConfirmationsPair + 1, // 87: protowire.TxsConfirmationChangedNotificationMessage.error:type_name -> protowire.RPCError + 1, // 88: protowire.ModifyNotifyingTxsConfirmationChangedResponseMessage.error:type_name -> protowire.RPCError + 125, // 89: protowire.TxEntriesByAddresses.sent:type_name -> protowire.TxEntryByAddress + 125, // 90: protowire.TxEntriesByAddresses.received:type_name -> protowire.TxEntryByAddress + 1, // 91: protowire.NotifyAddressesTxsResponseMessage.error:type_name -> protowire.RPCError + 1, // 92: protowire.ModifyNotifyingAddressesTxsResponseMessage.error:type_name -> protowire.RPCError + 126, // 93: protowire.AddressesTxsNotificationMessage.pending:type_name -> protowire.TxEntriesByAddresses + 126, // 94: protowire.AddressesTxsNotificationMessage.confirmed:type_name -> protowire.TxEntriesByAddresses + 126, // 95: protowire.AddressesTxsNotificationMessage.unconfirmed:type_name -> protowire.TxEntriesByAddresses + 96, // [96:96] is the sub-list for method output_type + 96, // [96:96] is the sub-list for method input_type + 96, // [96:96] is the sub-list for extension type_name + 96, // [96:96] is the sub-list for extension extendee + 0, // [0:96] is the sub-list for field type_name +} + +func init() { file_rpc_proto_init() } +func file_rpc_proto_init() { + if File_rpc_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_rpc_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RPCError); i { case 0: return &v.state case 1: @@ -10412,8 +8731,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPeerAddressesKnownAddressMessage); i { + file_rpc_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RpcBlock); i { case 0: return &v.state case 1: @@ -10424,8 +8743,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSelectedTipHashRequestMessage); i { + file_rpc_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RpcBlockHeader); i { case 0: return &v.state case 1: @@ -10436,8 +8755,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSelectedTipHashResponseMessage); i { + file_rpc_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RpcBlockLevelParents); i { case 0: return &v.state case 1: @@ -10448,8 +8767,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMempoolEntryRequestMessage); i { + file_rpc_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RpcBlockVerboseData); i { case 0: return &v.state case 1: @@ -10460,8 +8779,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMempoolEntryResponseMessage); i { + file_rpc_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RpcTransaction); i { case 0: return &v.state case 1: @@ -10472,8 +8791,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMempoolEntriesRequestMessage); i { + file_rpc_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RpcTransactionInput); i { case 0: return &v.state case 1: @@ -10484,8 +8803,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMempoolEntriesResponseMessage); i { + file_rpc_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RpcScriptPublicKey); i { case 0: return &v.state case 1: @@ -10496,8 +8815,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MempoolEntry); i { + file_rpc_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RpcTransactionOutput); i { case 0: return &v.state case 1: @@ -10508,8 +8827,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetConnectedPeerInfoRequestMessage); i { + file_rpc_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RpcOutpoint); i { case 0: return &v.state case 1: @@ -10520,8 +8839,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetConnectedPeerInfoResponseMessage); i { + file_rpc_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RpcUtxoEntry); i { case 0: return &v.state case 1: @@ -10532,8 +8851,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetConnectedPeerInfoMessage); i { + file_rpc_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RpcTransactionVerboseData); i { case 0: return &v.state case 1: @@ -10544,8 +8863,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddPeerRequestMessage); i { + file_rpc_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RpcTransactionInputVerboseData); i { case 0: return &v.state case 1: @@ -10556,8 +8875,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddPeerResponseMessage); i { + file_rpc_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RpcTransactionOutputVerboseData); i { case 0: return &v.state case 1: @@ -10568,8 +8887,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitTransactionRequestMessage); i { + file_rpc_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetCurrentNetworkRequestMessage); i { case 0: return &v.state case 1: @@ -10580,8 +8899,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitTransactionResponseMessage); i { + file_rpc_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetCurrentNetworkResponseMessage); i { case 0: return &v.state case 1: @@ -10592,8 +8911,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyVirtualSelectedParentChainChangedRequestMessage); i { + file_rpc_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubmitBlockRequestMessage); i { case 0: return &v.state case 1: @@ -10604,8 +8923,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyVirtualSelectedParentChainChangedResponseMessage); i { + file_rpc_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubmitBlockResponseMessage); i { case 0: return &v.state case 1: @@ -10616,8 +8935,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VirtualSelectedParentChainChangedNotificationMessage); i { + file_rpc_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBlockTemplateRequestMessage); i { case 0: return &v.state case 1: @@ -10628,8 +8947,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockRequestMessage); i { + file_rpc_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBlockTemplateResponseMessage); i { case 0: return &v.state case 1: @@ -10640,8 +8959,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockResponseMessage); i { + file_rpc_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyBlockAddedRequestMessage); i { case 0: return &v.state case 1: @@ -10652,8 +8971,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSubnetworkRequestMessage); i { + file_rpc_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyBlockAddedResponseMessage); i { case 0: return &v.state case 1: @@ -10664,8 +8983,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSubnetworkResponseMessage); i { + file_rpc_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BlockAddedNotificationMessage); i { case 0: return &v.state case 1: @@ -10676,8 +8995,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetVirtualSelectedParentChainFromBlockRequestMessage); i { + file_rpc_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetPeerAddressesRequestMessage); i { case 0: return &v.state case 1: @@ -10688,8 +9007,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AcceptedTransactionIds); i { + file_rpc_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetPeerAddressesResponseMessage); i { case 0: return &v.state case 1: @@ -10700,8 +9019,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetVirtualSelectedParentChainFromBlockResponseMessage); i { + file_rpc_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetPeerAddressesKnownAddressMessage); i { case 0: return &v.state case 1: @@ -10712,8 +9031,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlocksRequestMessage); i { + file_rpc_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetSelectedTipHashRequestMessage); i { case 0: return &v.state case 1: @@ -10724,8 +9043,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlocksResponseMessage); i { + file_rpc_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetSelectedTipHashResponseMessage); i { case 0: return &v.state case 1: @@ -10736,8 +9055,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockCountRequestMessage); i { + file_rpc_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMempoolEntryRequestMessage); i { case 0: return &v.state case 1: @@ -10748,8 +9067,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockCountResponseMessage); i { + file_rpc_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMempoolEntryResponseMessage); i { case 0: return &v.state case 1: @@ -10760,8 +9079,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockDagInfoRequestMessage); i { + file_rpc_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMempoolEntriesRequestMessage); i { case 0: return &v.state case 1: @@ -10772,8 +9091,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockDagInfoResponseMessage); i { + file_rpc_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMempoolEntriesResponseMessage); i { case 0: return &v.state case 1: @@ -10784,8 +9103,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResolveFinalityConflictRequestMessage); i { + file_rpc_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MempoolEntry); i { case 0: return &v.state case 1: @@ -10796,8 +9115,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResolveFinalityConflictResponseMessage); i { + file_rpc_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetConnectedPeerInfoRequestMessage); i { case 0: return &v.state case 1: @@ -10808,8 +9127,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyFinalityConflictsRequestMessage); i { + file_rpc_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetConnectedPeerInfoResponseMessage); i { case 0: return &v.state case 1: @@ -10820,8 +9139,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyFinalityConflictsResponseMessage); i { + file_rpc_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetConnectedPeerInfoMessage); i { case 0: return &v.state case 1: @@ -10832,8 +9151,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FinalityConflictNotificationMessage); i { + file_rpc_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddPeerRequestMessage); i { case 0: return &v.state case 1: @@ -10844,8 +9163,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FinalityConflictResolvedNotificationMessage); i { + file_rpc_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddPeerResponseMessage); i { case 0: return &v.state case 1: @@ -10856,8 +9175,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ShutDownRequestMessage); i { + file_rpc_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubmitTransactionRequestMessage); i { case 0: return &v.state case 1: @@ -10868,8 +9187,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ShutDownResponseMessage); i { + file_rpc_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubmitTransactionResponseMessage); i { case 0: return &v.state case 1: @@ -10880,8 +9199,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetHeadersRequestMessage); i { + file_rpc_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyVirtualSelectedParentChainChangedRequestMessage); i { case 0: return &v.state case 1: @@ -10892,8 +9211,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetHeadersResponseMessage); i { + file_rpc_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyVirtualSelectedParentChainChangedResponseMessage); i { case 0: return &v.state case 1: @@ -10904,8 +9223,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyUtxosChangedRequestMessage); i { + file_rpc_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VirtualSelectedParentChainChangedNotificationMessage); i { case 0: return &v.state case 1: @@ -10916,8 +9235,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyUtxosChangedResponseMessage); i { + file_rpc_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBlockRequestMessage); i { case 0: return &v.state case 1: @@ -10928,8 +9247,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UtxosChangedNotificationMessage); i { + file_rpc_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBlockResponseMessage); i { case 0: return &v.state case 1: @@ -10940,8 +9259,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UtxosByAddressesEntry); i { + file_rpc_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetSubnetworkRequestMessage); i { case 0: return &v.state case 1: @@ -10952,8 +9271,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopNotifyingUtxosChangedRequestMessage); i { + file_rpc_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetSubnetworkResponseMessage); i { case 0: return &v.state case 1: @@ -10964,8 +9283,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopNotifyingUtxosChangedResponseMessage); i { + file_rpc_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetVirtualSelectedParentChainFromBlockRequestMessage); i { case 0: return &v.state case 1: @@ -10976,8 +9295,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUtxosByAddressesRequestMessage); i { + file_rpc_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AcceptedTransactionIds); i { case 0: return &v.state case 1: @@ -10988,8 +9307,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUtxosByAddressesResponseMessage); i { + file_rpc_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetVirtualSelectedParentChainFromBlockResponseMessage); i { case 0: return &v.state case 1: @@ -11000,8 +9319,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBalanceByAddressRequestMessage); i { + file_rpc_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBlocksRequestMessage); i { case 0: return &v.state case 1: @@ -11012,8 +9331,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBalanceByAddressResponseMessage); i { + file_rpc_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBlocksResponseMessage); i { case 0: return &v.state case 1: @@ -11024,8 +9343,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBalancesByAddressesRequestMessage); i { + file_rpc_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBlockCountRequestMessage); i { case 0: return &v.state case 1: @@ -11036,8 +9355,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BalancesByAddressEntry); i { + file_rpc_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBlockCountResponseMessage); i { case 0: return &v.state case 1: @@ -11048,8 +9367,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBalancesByAddressesResponseMessage); i { + file_rpc_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBlockDagInfoRequestMessage); i { case 0: return &v.state case 1: @@ -11060,8 +9379,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetVirtualSelectedParentBlueScoreRequestMessage); i { + file_rpc_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBlockDagInfoResponseMessage); i { case 0: return &v.state case 1: @@ -11072,8 +9391,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetVirtualSelectedParentBlueScoreResponseMessage); i { + file_rpc_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResolveFinalityConflictRequestMessage); i { case 0: return &v.state case 1: @@ -11084,8 +9403,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyVirtualSelectedParentBlueScoreChangedRequestMessage); i { + file_rpc_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResolveFinalityConflictResponseMessage); i { case 0: return &v.state case 1: @@ -11096,8 +9415,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyVirtualSelectedParentBlueScoreChangedResponseMessage); i { + file_rpc_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyFinalityConflictsRequestMessage); i { case 0: return &v.state case 1: @@ -11108,8 +9427,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VirtualSelectedParentBlueScoreChangedNotificationMessage); i { + file_rpc_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyFinalityConflictsResponseMessage); i { case 0: return &v.state case 1: @@ -11120,8 +9439,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyVirtualDaaScoreChangedRequestMessage); i { + file_rpc_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FinalityConflictNotificationMessage); i { case 0: return &v.state case 1: @@ -11132,8 +9451,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyVirtualDaaScoreChangedResponseMessage); i { + file_rpc_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FinalityConflictResolvedNotificationMessage); i { case 0: return &v.state case 1: @@ -11144,8 +9463,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VirtualDaaScoreChangedNotificationMessage); i { + file_rpc_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShutDownRequestMessage); i { case 0: return &v.state case 1: @@ -11156,8 +9475,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyPruningPointUTXOSetOverrideRequestMessage); i { + file_rpc_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShutDownResponseMessage); i { case 0: return &v.state case 1: @@ -11168,8 +9487,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyPruningPointUTXOSetOverrideResponseMessage); i { + file_rpc_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetHeadersRequestMessage); i { case 0: return &v.state case 1: @@ -11180,8 +9499,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PruningPointUTXOSetOverrideNotificationMessage); i { + file_rpc_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetHeadersResponseMessage); i { case 0: return &v.state case 1: @@ -11192,8 +9511,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopNotifyingPruningPointUTXOSetOverrideRequestMessage); i { + file_rpc_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyUtxosChangedRequestMessage); i { case 0: return &v.state case 1: @@ -11204,8 +9523,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopNotifyingPruningPointUTXOSetOverrideResponseMessage); i { + file_rpc_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyUtxosChangedResponseMessage); i { case 0: return &v.state case 1: @@ -11216,8 +9535,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BanRequestMessage); i { + file_rpc_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UtxosChangedNotificationMessage); i { case 0: return &v.state case 1: @@ -11228,8 +9547,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BanResponseMessage); i { + file_rpc_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UtxosByAddressesEntry); i { case 0: return &v.state case 1: @@ -11240,8 +9559,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnbanRequestMessage); i { + file_rpc_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StopNotifyingUtxosChangedRequestMessage); i { case 0: return &v.state case 1: @@ -11252,8 +9571,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnbanResponseMessage); i { + file_rpc_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StopNotifyingUtxosChangedResponseMessage); i { case 0: return &v.state case 1: @@ -11264,8 +9583,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetInfoRequestMessage); i { + file_rpc_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetUtxosByAddressesRequestMessage); i { case 0: return &v.state case 1: @@ -11276,8 +9595,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetInfoResponseMessage); i { + file_rpc_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetUtxosByAddressesResponseMessage); i { case 0: return &v.state case 1: @@ -11288,8 +9607,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAcceptingBlockHashOfTxRequestMessage); i { + file_rpc_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBalanceByAddressRequestMessage); i { case 0: return &v.state case 1: @@ -11300,8 +9619,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAcceptingBlockHashOfTxResponseMessage); i { + file_rpc_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBalanceByAddressResponseMessage); i { case 0: return &v.state case 1: @@ -11312,8 +9631,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EstimateNetworkHashesPerSecondRequestMessage); i { + file_rpc_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBalancesByAddressesRequestMessage); i { case 0: return &v.state case 1: @@ -11324,8 +9643,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EstimateNetworkHashesPerSecondResponseMessage); i { + file_rpc_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BalancesByAddressEntry); i { case 0: return &v.state case 1: @@ -11336,8 +9655,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyNewBlockTemplateRequestMessage); i { + file_rpc_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBalancesByAddressesResponseMessage); i { case 0: return &v.state case 1: @@ -11348,8 +9667,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyNewBlockTemplateResponseMessage); i { + file_rpc_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetVirtualSelectedParentBlueScoreRequestMessage); i { case 0: return &v.state case 1: @@ -11360,8 +9679,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewBlockTemplateNotificationMessage); i { + file_rpc_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetVirtualSelectedParentBlueScoreResponseMessage); i { case 0: return &v.state case 1: @@ -11372,8 +9691,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MempoolEntryByAddress); i { + file_rpc_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyVirtualSelectedParentBlueScoreChangedRequestMessage); i { case 0: return &v.state case 1: @@ -11384,8 +9703,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMempoolEntriesByAddressesRequestMessage); i { + file_rpc_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyVirtualSelectedParentBlueScoreChangedResponseMessage); i { case 0: return &v.state case 1: @@ -11396,8 +9715,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMempoolEntriesByAddressesResponseMessage); i { + file_rpc_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VirtualSelectedParentBlueScoreChangedNotificationMessage); i { case 0: return &v.state case 1: @@ -11408,8 +9727,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCoinSupplyRequestMessage); i { + file_rpc_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyVirtualDaaScoreChangedRequestMessage); i { case 0: return &v.state case 1: @@ -11420,8 +9739,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCoinSupplyResponseMessage); i { + file_rpc_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyVirtualDaaScoreChangedResponseMessage); i { case 0: return &v.state case 1: @@ -11432,8 +9751,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RpcTxIDConfirmationsPair); i { + file_rpc_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VirtualDaaScoreChangedNotificationMessage); i { case 0: return &v.state case 1: @@ -11444,8 +9763,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RpcTxIDBlockHashPair); i { + file_rpc_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyPruningPointUTXOSetOverrideRequestMessage); i { case 0: return &v.state case 1: @@ -11456,8 +9775,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RpcTxIDBlockPair); i { + file_rpc_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyPruningPointUTXOSetOverrideResponseMessage); i { case 0: return &v.state case 1: @@ -11468,8 +9787,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAcceptingBlockHashesOfTxsRequestMessage); i { + file_rpc_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PruningPointUTXOSetOverrideNotificationMessage); i { case 0: return &v.state case 1: @@ -11480,8 +9799,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAcceptingBlockHashesOfTxsResponseMessage); i { + file_rpc_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StopNotifyingPruningPointUTXOSetOverrideRequestMessage); i { case 0: return &v.state case 1: @@ -11492,8 +9811,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAcceptingBlockOfTxRequestMessage); i { + file_rpc_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StopNotifyingPruningPointUTXOSetOverrideResponseMessage); i { case 0: return &v.state case 1: @@ -11504,8 +9823,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[116].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAcceptingBlockOfTxResponseMessage); i { + file_rpc_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BanRequestMessage); i { case 0: return &v.state case 1: @@ -11516,8 +9835,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[117].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAcceptingBlocksOfTxsRequestMessage); i { + file_rpc_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BanResponseMessage); i { case 0: return &v.state case 1: @@ -11528,8 +9847,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[118].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAcceptingBlocksOfTxsResponseMessage); i { + file_rpc_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UnbanRequestMessage); i { case 0: return &v.state case 1: @@ -11540,8 +9859,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[119].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetIncludingBlockHashOfTxRequestMessage); i { + file_rpc_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UnbanResponseMessage); i { case 0: return &v.state case 1: @@ -11552,8 +9871,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[120].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetIncludingBlockHashOfTxResponseMessage); i { + file_rpc_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetInfoRequestMessage); i { case 0: return &v.state case 1: @@ -11564,8 +9883,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[121].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetIncludingBlockHashesOfTxsRequestMessage); i { + file_rpc_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetInfoResponseMessage); i { case 0: return &v.state case 1: @@ -11576,8 +9895,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[122].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetIncludingBlockHashesOfTxsResponseMessage); i { + file_rpc_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAcceptingBlockHashOfTxRequestMessage); i { case 0: return &v.state case 1: @@ -11588,8 +9907,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[123].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetIncludingBlockOfTxRequestMessage); i { + file_rpc_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAcceptingBlockHashOfTxResponseMessage); i { case 0: return &v.state case 1: @@ -11600,8 +9919,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[124].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetIncludingBlockOfTxResponseMessage); i { + file_rpc_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EstimateNetworkHashesPerSecondRequestMessage); i { case 0: return &v.state case 1: @@ -11612,8 +9931,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[125].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetIncludingBlocksOfTxsRequestMessage); i { + file_rpc_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EstimateNetworkHashesPerSecondResponseMessage); i { case 0: return &v.state case 1: @@ -11624,8 +9943,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[126].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetIncludingBlocksOfTxsResponseMessage); i { + file_rpc_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyNewBlockTemplateRequestMessage); i { case 0: return &v.state case 1: @@ -11636,8 +9955,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[127].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxRequestMessage); i { + file_rpc_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyNewBlockTemplateResponseMessage); i { case 0: return &v.state case 1: @@ -11648,8 +9967,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[128].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxResponseMessage); i { + file_rpc_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NewBlockTemplateNotificationMessage); i { case 0: return &v.state case 1: @@ -11660,8 +9979,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[129].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxsRequestMessage); i { + file_rpc_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MempoolEntryByAddress); i { case 0: return &v.state case 1: @@ -11672,8 +9991,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[130].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxsResponseMessage); i { + file_rpc_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMempoolEntriesByAddressesRequestMessage); i { case 0: return &v.state case 1: @@ -11684,8 +10003,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[131].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxConfirmationsRequestMessage); i { + file_rpc_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMempoolEntriesByAddressesResponseMessage); i { case 0: return &v.state case 1: @@ -11696,8 +10015,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[132].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxConfirmationsResponseMessage); i { + file_rpc_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetCoinSupplyRequestMessage); i { case 0: return &v.state case 1: @@ -11708,8 +10027,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[133].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxsConfirmationsRequestMessage); i { + file_rpc_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetCoinSupplyResponseMessage); i { case 0: return &v.state case 1: @@ -11720,8 +10039,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[134].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTxsConfirmationsResponseMessage); i { + file_rpc_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RpcTxIDConfirmationsPair); i { case 0: return &v.state case 1: @@ -11732,8 +10051,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[135].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyTxsConfirmationChangedRequestMessage); i { + file_rpc_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RpcTxIDBlockHashPair); i { case 0: return &v.state case 1: @@ -11744,8 +10063,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[136].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyTxsConfirmationChangedResponseMessage); i { + file_rpc_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RpcTxIDBlockPair); i { case 0: return &v.state case 1: @@ -11756,8 +10075,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[137].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TxsConfirmationChangedNotificationMessage); i { + file_rpc_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAcceptingBlockHashesOfTxsRequestMessage); i { case 0: return &v.state case 1: @@ -11768,8 +10087,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[138].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopNotifyTxsConfirmationChangedRequestMessage); i { + file_rpc_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAcceptingBlockHashesOfTxsResponseMessage); i { case 0: return &v.state case 1: @@ -11780,8 +10099,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[139].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopNotifyTxsConfirmationChangedResponseMessage); i { + file_rpc_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxsRequestMessage); i { case 0: return &v.state case 1: @@ -11792,8 +10111,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[140].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartNotifyTxsConfirmationChangedRequestMessage); i { + file_rpc_proto_msgTypes[116].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxsResponseMessage); i { case 0: return &v.state case 1: @@ -11804,8 +10123,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[141].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartNotifyTxsConfirmationChangedResponseMessage); i { + file_rpc_proto_msgTypes[117].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxsConfirmationsRequestMessage); i { case 0: return &v.state case 1: @@ -11816,8 +10135,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[142].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ModifyNotifyTxsConfirmationChangedParamsRequestMessage); i { + file_rpc_proto_msgTypes[118].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTxsConfirmationsResponseMessage); i { case 0: return &v.state case 1: @@ -11828,8 +10147,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[143].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ModifyNotifyTxsConfirmationChangedParamsResponseMessage); i { + file_rpc_proto_msgTypes[119].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyTxsConfirmationChangedRequestMessage); i { case 0: return &v.state case 1: @@ -11840,8 +10159,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[144].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TxEntryByAddress); i { + file_rpc_proto_msgTypes[120].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyTxsConfirmationChangedResponseMessage); i { case 0: return &v.state case 1: @@ -11852,8 +10171,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[145].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TxEntriesByAddresses); i { + file_rpc_proto_msgTypes[121].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TxsConfirmationChangedNotificationMessage); i { case 0: return &v.state case 1: @@ -11864,8 +10183,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[146].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyAddressesTxsRequestMessage); i { + file_rpc_proto_msgTypes[122].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ModifyNotifyingTxsConfirmationChangedRequestMessage); i { case 0: return &v.state case 1: @@ -11876,8 +10195,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[147].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyAddressesTxsResponseMessage); i { + file_rpc_proto_msgTypes[123].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ModifyNotifyingTxsConfirmationChangedResponseMessage); i { case 0: return &v.state case 1: @@ -11888,8 +10207,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[148].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopNotifyAddressesTxsRequestMessage); i { + file_rpc_proto_msgTypes[124].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TxEntryByAddress); i { case 0: return &v.state case 1: @@ -11900,8 +10219,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[149].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopNotifyAddressesTxsResponseMessage); i { + file_rpc_proto_msgTypes[125].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TxEntriesByAddresses); i { case 0: return &v.state case 1: @@ -11912,8 +10231,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[150].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartNotifyAddressesTxsRequestMessage); i { + file_rpc_proto_msgTypes[126].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyAddressesTxsRequestMessage); i { case 0: return &v.state case 1: @@ -11924,8 +10243,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[151].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartNotifyAddressesTxsResponseMessage); i { + file_rpc_proto_msgTypes[127].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotifyAddressesTxsResponseMessage); i { case 0: return &v.state case 1: @@ -11936,8 +10255,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[152].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ModifyNotifyAddressesTxsParamsRequestMessage); i { + file_rpc_proto_msgTypes[128].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ModifyNotifyingAddressesTxsRequestMessage); i { case 0: return &v.state case 1: @@ -11948,8 +10267,8 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[153].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ModifyNotifyAddressesTxsParamsResponseMessage); i { + file_rpc_proto_msgTypes[129].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ModifyNotifyingAddressesTxsResponseMessage); i { case 0: return &v.state case 1: @@ -11960,7 +10279,7 @@ func file_rpc_proto_init() { return nil } } - file_rpc_proto_msgTypes[154].Exporter = func(v interface{}, i int) interface{} { + file_rpc_proto_msgTypes[130].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AddressesTxsNotificationMessage); i { case 0: return &v.state @@ -11979,7 +10298,7 @@ func file_rpc_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_rpc_proto_rawDesc, NumEnums: 1, - NumMessages: 155, + NumMessages: 131, NumExtensions: 0, NumServices: 0, }, diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto index f1e983d658..4cb26c4acb 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto @@ -749,7 +749,7 @@ message RpcTxIDBlockPair { RpcBlock block = 2; } -//Kaspad most be started with the `--txindex` flag for this Request to work. +// Kaspad most be started with the `--txindex` flag for this Request to work. message GetAcceptingBlockHashesOfTxsRequestMessage{ repeated string txIDs = 1; } @@ -759,92 +759,7 @@ message GetAcceptingBlockHashesOfTxsResponseMessage{ RPCError error = 1000; } -//Kaspad most be started with the `--txindex` flag for this Request to work. -message GetAcceptingBlockOfTxRequestMessage{ - string txID = 1; - bool includeTransactions = 2; -} - -message GetAcceptingBlockOfTxResponseMessage{ - RpcBlock block = 1; - - RPCError error = 1000; -} - -//Kaspad most be started with the `--txindex` flag for this Request to work. -message GetAcceptingBlocksOfTxsRequestMessage{ - repeated string txIDs = 1; - bool includeTransactions = 2; -} - -message GetAcceptingBlocksOfTxsResponseMessage{ - repeated RpcTxIDBlockPair txIDBlockPairs = 1; - - RPCError error = 1000; -} - -//Kaspad most be started with the `--txindex` flag for this Request to work. -message GetIncludingBlockHashOfTxRequestMessage{ - string txID = 1; -} - -message GetIncludingBlockHashOfTxResponseMessage{ - string hash = 1; - - RPCError error = 1000; -} - - -//Kaspad most be started with the `--txindex` flag for this Request to work. -message GetIncludingBlockHashesOfTxsRequestMessage{ - repeated string txIDs = 1; -} - -message GetIncludingBlockHashesOfTxsResponseMessage{ - repeated RpcTxIDBlockHashPair txIDBlockHashPairs = 1; - - RPCError error = 1000; -} - - -//Kaspad most be started with the `--txindex` flag for this Request to work. -message GetIncludingBlockOfTxRequestMessage{ - string txID = 1; - bool includeTransactions = 2; -} - -message GetIncludingBlockOfTxResponseMessage{ - RpcBlock block = 1; - - RPCError error = 1000; -} - - -//Kaspad most be started with the `--txindex` flag for this Request to work. -message GetIncludingBlocksOfTxsRequestMessage{ - repeated string txIDs = 1; - bool includeTransactions = 2; -} - -message GetIncludingBlocksOfTxsResponseMessage{ - repeated RpcTxIDBlockPair txIDBlockPairs = 1; - - RPCError error = 1000; -} - -//Kaspad most be started with the `--txindex` flag for this Request to work. -message GetTxRequestMessage{ - string txID = 1; -} - -message GetTxResponseMessage{ - RpcTransaction transaction = 1; - - - RPCError error = 1000; -} - -//Kaspad most be started with the `--txindex` flag for this Request to work. +// Kaspad most be started with the `--txindex` flag for this Request to work. message GetTxsRequestMessage{ repeated string txIDs = 1; } @@ -856,16 +771,6 @@ message GetTxsResponseMessage{ RPCError error = 1000; } -//Kaspad most be started with the `--txindex` flag for this Request to work. -message GetTxConfirmationsRequestMessage{ - string txID = 1; -} - -message GetTxConfirmationsResponseMessage{ - int64 confirmations = 1; - - RPCError error = 1000; -} //Kaspad most be started with the `--txindex` flag for this Request to work. message GetTxsConfirmationsRequestMessage{ @@ -903,35 +808,16 @@ message TxsConfirmationChangedNotificationMessage{ RPCError error = 1000; } +// ModifyNotifyingTxsConfirmationChangedRequestMessage modfies the params of a registered `NotifyTxsConfirmationChangedRequstMessage` // most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work -message StopNotifyTxsConfirmationChangedRequestMessage{ - repeated string TxIDs = 1; +message ModifyNotifyingTxsConfirmationChangedRequestMessage{ + repeated string addTxIDs = 1; + repeated string removeTxIDs = 2; + uint32 requiredConfirmations = 3; + bool includePending = 4; } -message StopNotifyTxsConfirmationChangedResponseMessage{ - - RPCError error = 1000; -} - -// StartNotifyTxsConfirmationChangedRequestMessage starts listening for Transaction confirmations with the specified TxIDs -// Most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work -message StartNotifyTxsConfirmationChangedRequestMessage{ - repeated string TxIDs = 1; -} - -message StartNotifyTxsConfirmationChangedResponseMessage{ - - RPCError error = 1000; -} - -// ModifyNotifyTxsConfirmationChangedParamsRequestMessage modfies the params of a registered `NotifyTxsConfirmationChangedRequstMessage` -// most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work -message ModifyNotifyTxsConfirmationChangedParamsRequestMessage{ - uint32 requiredConfirmations = 1; - bool includePending = 2; -} - -message ModifyNotifyTxsConfirmationChangedParamsResponseMessage{ +message ModifyNotifyingTxsConfirmationChangedResponseMessage{ RPCError error = 1000; } @@ -960,38 +846,18 @@ message NotifyAddressesTxsResponseMessage{ RPCError error = 1000; } -// StopNotifyAddressesTxsRequestMessage stops listening for Txs pertaining to specified addresses -// Most be registered to NotifyAddressTxChangedRequestMessage for this command to work -message StopNotifyAddressesTxsRequestMessage{ - repeated string addresses = 1; -} - -message StopNotifyAddressesTxsResponseMessage{ - - RPCError error = 1000; -} - -// StartNotifyAddressesTxsRequestMessage starts listening for Txs pertaining to specified addresses -// Most be registered to NotifyAddressTxChangedRequestMessage for this command to work -message StartNotifyAddressesTxsRequestMessage{ - repeated string addresses = 1; -} - -message StartNotifyAddressesTxsResponseMessage{ - - RPCError error = 1000; -} - // ModifyNotifyAddressesTxsParamsRequestMessage modifies the params used for a regesitered `NotifyAddressesTxsRequest` // Most be registered to NotifyAddressTxChangedRequestMessage for this command to work -message ModifyNotifyAddressesTxsParamsRequestMessage{ - uint32 requiredConfirmations = 1; - bool includePending = 3; - bool includeSending = 4; - bool includeReceiving = 5; +message ModifyNotifyingAddressesTxsRequestMessage{ + repeated string AddAddresses = 1; + repeated string RemoveAddresses = 2; + uint32 requiredConfirmations = 3; + bool includePending = 4; + bool includeSending = 5; + bool includeReceiving = 6; } -message ModifyNotifyAddressesTxsParamsResponseMessage{ +message ModifyNotifyingAddressesTxsResponseMessage{ RPCError error = 1000; } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_block_of_tx.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_block_of_tx.go deleted file mode 100644 index 598ff37776..0000000000 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_block_of_tx.go +++ /dev/null @@ -1,83 +0,0 @@ -package protowire - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/pkg/errors" -) - -func (x *KaspadMessage_GetAcceptingBlockOfTxRequest) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_GetAcceptingBlockOfTxRequest") - } - return x.GetAcceptingBlockOfTxRequest.toAppMessage() -} - -func (x *KaspadMessage_GetAcceptingBlockOfTxRequest) fromAppMessage(message *appmessage.GetAcceptingBlockOfTxRequestMessage) error { - x.GetAcceptingBlockOfTxRequest = &GetAcceptingBlockOfTxRequestMessage{ - TxID: message.TxID, - IncludeTransactions: message.IncludeTransactions, - } - return nil -} - -func (x *GetAcceptingBlockOfTxRequestMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "GetAcceptingBlockOfTxRequestMessage is nil") - } - return &appmessage.GetAcceptingBlockOfTxRequestMessage{ - TxID: x.TxID, - IncludeTransactions: x.IncludeTransactions, - }, nil -} - -func (x *KaspadMessage_GetAcceptingBlockOfTxResponse) toAppMessage() (appmessage.Message, error) { - - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_GetAcceptingBlockOfTxResponse is nil") - } - return x.GetAcceptingBlockOfTxResponse.toAppMessage() -} - -func (x *KaspadMessage_GetAcceptingBlockOfTxResponse) fromAppMessage(message *appmessage.GetAcceptingBlockOfTxResponseMessage) error { - var rpcErr *RPCError - if message.Error != nil { - rpcErr = &RPCError{Message: message.Error.Message} - } - rpcBlock := &RpcBlock{} - - err := rpcBlock.fromAppMessage(message.Block) - if err != nil { - return err - } - x.GetAcceptingBlockOfTxResponse = &GetAcceptingBlockOfTxResponseMessage{ - Block: rpcBlock, - - Error: rpcErr, - } - return nil -} - -func (x *GetAcceptingBlockOfTxResponseMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "GetAcceptingBlockOfTxResponseMessage is nil") - } - rpcErr, err := x.Error.toAppMessage() - // Error is an optional field - if err != nil && !errors.Is(err, errorNil) { - return nil, err - } - - if rpcErr != nil && x.Block != nil { - return nil, errors.New("GetAcceptingBlockOfTxResponseMessage contains both an error and a response") - } - - appBlock, err := x.Block.toAppMessage() - if err != nil { - return nil, err - } - - return &appmessage.GetAcceptingBlockOfTxResponseMessage{ - Block: appBlock, - Error: rpcErr, - }, nil -} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blockhash_of_tx.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blockhash_of_tx.go deleted file mode 100644 index 426394780f..0000000000 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blockhash_of_tx.go +++ /dev/null @@ -1,70 +0,0 @@ -package protowire - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/pkg/errors" -) - -func (x *KaspadMessage_GetAcceptingBlockHashOfTxRequest) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_GetAcceptingBlockHashOfTxRequest") - } - return x.GetAcceptingBlockHashOfTxRequest.toAppMessage() -} - -func (x *KaspadMessage_GetAcceptingBlockHashOfTxRequest) fromAppMessage(message *appmessage.GetAcceptingBlockHashOfTxRequestMessage) error { - x.GetAcceptingBlockHashOfTxRequest = &GetAcceptingBlockHashOfTxRequestMessage{ - TxID: message.TxID, - } - return nil -} - -func (x *GetAcceptingBlockHashOfTxRequestMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "GetAcceptingBlockHashOfTxRequestMessage is nil") - } - return &appmessage.GetAcceptingBlockHashOfTxRequestMessage{ - TxID: x.TxID, - }, nil -} - -func (x *KaspadMessage_GetAcceptingBlockHashOfTxResponse) toAppMessage() (appmessage.Message, error) { - - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_GetAcceptingBlockHashOfTxResponse is nil") - } - return x.GetAcceptingBlockHashOfTxResponse.toAppMessage() -} - -func (x *KaspadMessage_GetAcceptingBlockHashOfTxResponse) fromAppMessage(message *appmessage.GetAcceptingBlockHashOfTxResponseMessage) error { - var err *RPCError - if message.Error != nil { - err = &RPCError{Message: message.Error.Message} - } - x.GetAcceptingBlockHashOfTxResponse = &GetAcceptingBlockHashOfTxResponseMessage{ - Hash: message.Hash, - - Error: err, - } - return nil -} - -func (x *GetAcceptingBlockHashOfTxResponseMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "GetAcceptingBlockHashOfTxResponseMessage is nil") - } - rpcErr, err := x.Error.toAppMessage() - // Error is an optional field - if err != nil && !errors.Is(err, errorNil) { - return nil, err - } - - if rpcErr != nil && x.Hash != "" { - return nil, errors.New("GetAcceptingBlockHashOfTxResponseMessage contains both an error and a response") - } - - return &appmessage.GetAcceptingBlockHashOfTxResponseMessage{ - Hash: x.Hash, - Error: rpcErr, - }, nil -} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blocks_of_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blocks_of_txs.go deleted file mode 100644 index 6110e13ddd..0000000000 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_accepting_blocks_of_txs.go +++ /dev/null @@ -1,121 +0,0 @@ -package protowire - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/pkg/errors" -) - -func (x *KaspadMessage_GetAcceptingBlocksOfTxsRequest) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_GetAcceptingBlocksOfTxsRequest") - } - return x.GetAcceptingBlocksOfTxsRequest.toAppMessage() -} - -func (x *KaspadMessage_GetAcceptingBlocksOfTxsRequest) fromAppMessage(message *appmessage.GetAcceptingBlocksOfTxsRequestMessage) error { - x.GetAcceptingBlocksOfTxsRequest = &GetAcceptingBlocksOfTxsRequestMessage{ - TxIDs: message.TxIDs, - IncludeTransactions: message.IncludeTransactions, - } - return nil -} - -func (x *GetAcceptingBlocksOfTxsRequestMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "GetAcceptingBlocksOfTxsRequestMessage is nil") - } - return &appmessage.GetAcceptingBlocksOfTxsRequestMessage{ - TxIDs: x.TxIDs, - IncludeTransactions: x.IncludeTransactions, - }, nil -} - -func (x *KaspadMessage_GetAcceptingBlocksOfTxsResponse) toAppMessage() (appmessage.Message, error) { - - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_GetAcceptingBlocksOfTxsResponse is nil") - } - return x.GetAcceptingBlocksOfTxsResponse.toAppMessage() -} - -func (x *KaspadMessage_GetAcceptingBlocksOfTxsResponse) fromAppMessage(message *appmessage.GetAcceptingBlocksOfTxsResponseMessage) error { - var rpcErr *RPCError - if message.Error != nil { - rpcErr = &RPCError{Message: message.Error.Message} - } - - rpcTxIDBlockPairs := make([]*RpcTxIDBlockPair, len(message.TxIDBlockPairs)) - for i := range rpcTxIDBlockPairs { - rpcTxIDBlockPairs[i] = &RpcTxIDBlockPair{} - err := rpcTxIDBlockPairs[i].fromAppMessage(message.TxIDBlockPairs[i]) - if err != nil { - return err - } - } - - x.GetAcceptingBlocksOfTxsResponse = &GetAcceptingBlocksOfTxsResponseMessage{ - TxIDBlockPairs: rpcTxIDBlockPairs, - - Error: rpcErr, - } - return nil -} - -func (x *GetAcceptingBlocksOfTxsResponseMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "GetAcceptingBlocksOfTxsResponseMessage is nil") - } - rpcErr, err := x.Error.toAppMessage() - // Error is an optional field - if err != nil && !errors.Is(err, errorNil) { - return nil, err - } - - if rpcErr != nil && x.TxIDBlockPairs != nil { - return nil, errors.New("GetAcceptingBlocksOfTxsResponseMessage contains both an error and a response") - } - - appTxIDBlockPairs := make([]*appmessage.TxIDBlockPair, len(x.TxIDBlockPairs)) - for i := range appTxIDBlockPairs { - appTxIDBlockPairs[i], err = x.TxIDBlockPairs[i].toAppMessage() - if err != nil { - return nil, err - } - } - - return &appmessage.GetAcceptingBlocksOfTxsResponseMessage{ - TxIDBlockPairs: appTxIDBlockPairs, - Error: rpcErr, - }, nil -} - -func (x *RpcTxIDBlockPair) toAppMessage() (*appmessage.TxIDBlockPair, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "TxIDBlockPair is nil") - } - - appBlock, err := x.Block.toAppMessage() - if err != nil { - return nil, err - } - - return &appmessage.TxIDBlockPair{ - TxID: x.TxID, - Block: appBlock, - }, nil -} - -func (x *RpcTxIDBlockPair) fromAppMessage(message *appmessage.TxIDBlockPair) error { - - rpcBlock := &RpcBlock{} - - err := rpcBlock.fromAppMessage(message.Block) - if err != nil { - return err - } - *x = RpcTxIDBlockPair{ - TxID: message.TxID, - Block: rpcBlock, - } - return nil -} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_block_of_tx.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_block_of_tx.go deleted file mode 100644 index bd71ae2efc..0000000000 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_block_of_tx.go +++ /dev/null @@ -1,83 +0,0 @@ -package protowire - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/pkg/errors" -) - -func (x *KaspadMessage_GetIncludingBlockOfTxRequest) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_GetIncludingBlockOfTxRequest") - } - return x.GetIncludingBlockOfTxRequest.toAppMessage() -} - -func (x *KaspadMessage_GetIncludingBlockOfTxRequest) fromAppMessage(message *appmessage.GetIncludingBlockOfTxRequestMessage) error { - x.GetIncludingBlockOfTxRequest = &GetIncludingBlockOfTxRequestMessage{ - TxID: message.TxID, - IncludeTransactions: message.IncludeTransactions, - } - return nil -} - -func (x *GetIncludingBlockOfTxRequestMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "GetIncludingBlockOfTxRequestMessage is nil") - } - return &appmessage.GetIncludingBlockOfTxRequestMessage{ - TxID: x.TxID, - IncludeTransactions: x.IncludeTransactions, - }, nil -} - -func (x *KaspadMessage_GetIncludingBlockOfTxResponse) toAppMessage() (appmessage.Message, error) { - - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_GetIncludingBlockOfTxResponse is nil") - } - return x.GetIncludingBlockOfTxResponse.toAppMessage() -} - -func (x *KaspadMessage_GetIncludingBlockOfTxResponse) fromAppMessage(message *appmessage.GetIncludingBlockOfTxResponseMessage) error { - var rpcErr *RPCError - if message.Error != nil { - rpcErr = &RPCError{Message: message.Error.Message} - } - rpcBlock := &RpcBlock{} - - err := rpcBlock.fromAppMessage(message.Block) - if err != nil { - return err - } - x.GetIncludingBlockOfTxResponse = &GetIncludingBlockOfTxResponseMessage{ - Block: rpcBlock, - - Error: rpcErr, - } - return nil -} - -func (x *GetIncludingBlockOfTxResponseMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "GetIncludingBlockOfTxResponseMessage is nil") - } - rpcErr, err := x.Error.toAppMessage() - // Error is an optional field - if err != nil && !errors.Is(err, errorNil) { - return nil, err - } - - if rpcErr != nil && x.Block != nil { - return nil, errors.New("GetIncludingBlockOfTxResponseMessage contains both an error and a response") - } - - appBlock, err := x.Block.toAppMessage() - if err != nil { - return nil, err - } - - return &appmessage.GetIncludingBlockOfTxResponseMessage{ - Block: appBlock, - Error: rpcErr, - }, nil -} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blockhash_of_tx.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blockhash_of_tx.go deleted file mode 100644 index 4ae30ec77d..0000000000 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blockhash_of_tx.go +++ /dev/null @@ -1,70 +0,0 @@ -package protowire - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/pkg/errors" -) - -func (x *KaspadMessage_GetIncludingBlockHashOfTxRequest) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_GetIncludingBlockHashOfTxRequest") - } - return x.GetIncludingBlockHashOfTxRequest.toAppMessage() -} - -func (x *KaspadMessage_GetIncludingBlockHashOfTxRequest) fromAppMessage(message *appmessage.GetIncludingBlockHashOfTxRequestMessage) error { - x.GetIncludingBlockHashOfTxRequest = &GetIncludingBlockHashOfTxRequestMessage{ - TxID: message.TxID, - } - return nil -} - -func (x *GetIncludingBlockHashOfTxRequestMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "GetIncludingBlockHashOfTxRequestMessage is nil") - } - return &appmessage.GetIncludingBlockHashOfTxRequestMessage{ - TxID: x.TxID, - }, nil -} - -func (x *KaspadMessage_GetIncludingBlockHashOfTxResponse) toAppMessage() (appmessage.Message, error) { - - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_GetIncludingBlockHashOfTxResponse is nil") - } - return x.GetIncludingBlockHashOfTxResponse.toAppMessage() -} - -func (x *KaspadMessage_GetIncludingBlockHashOfTxResponse) fromAppMessage(message *appmessage.GetIncludingBlockHashOfTxResponseMessage) error { - var err *RPCError - if message.Error != nil { - err = &RPCError{Message: message.Error.Message} - } - x.GetIncludingBlockHashOfTxResponse = &GetIncludingBlockHashOfTxResponseMessage{ - Hash: message.Hash, - - Error: err, - } - return nil -} - -func (x *GetIncludingBlockHashOfTxResponseMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "GetIncludingBlockHashOfTxResponseMessage is nil") - } - rpcErr, err := x.Error.toAppMessage() - // Error is an optional field - if err != nil && !errors.Is(err, errorNil) { - return nil, err - } - - if rpcErr != nil && x.Hash != "" { - return nil, errors.New("GetIncludingBlockHashOfTxResponseMessage contains both an error and a response") - } - - return &appmessage.GetIncludingBlockHashOfTxResponseMessage{ - Hash: x.Hash, - Error: rpcErr, - }, nil -} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blockhashes_of_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blockhashes_of_txs.go deleted file mode 100644 index fafb0c46db..0000000000 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blockhashes_of_txs.go +++ /dev/null @@ -1,85 +0,0 @@ -package protowire - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/pkg/errors" -) - -func (x *KaspadMessage_GetIncludingBlockHashesOfTxsRequest) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_GetIncludingBlockHashesOfTxsRequest") - } - return x.GetIncludingBlockHashesOfTxsRequest.toAppMessage() -} - -func (x *KaspadMessage_GetIncludingBlockHashesOfTxsRequest) fromAppMessage(message *appmessage.GetIncludingBlockHashesOfTxsRequestMessage) error { - x.GetIncludingBlockHashesOfTxsRequest = &GetIncludingBlockHashesOfTxsRequestMessage{ - TxIDs: message.TxIDs, - } - return nil -} - -func (x *GetIncludingBlockHashesOfTxsRequestMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "GetIncludingBlockHashesOfTxsRequestMessage is nil") - } - return &appmessage.GetIncludingBlockHashesOfTxsRequestMessage{ - TxIDs: x.TxIDs, - }, nil -} - -func (x *KaspadMessage_GetIncludingBlockHashesOfTxsResponse) toAppMessage() (appmessage.Message, error) { - - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_GetIncludinglockHashesOfTxsResponse is nil") - } - return x.GetIncludingBlockHashesOfTxsResponse.toAppMessage() -} - -func (x *KaspadMessage_GetIncludingBlockHashesOfTxsResponse) fromAppMessage(message *appmessage.GetIncludingBlockHashesOfTxsResponseMessage) error { - var rpcErr *RPCError - if message.Error != nil { - rpcErr = &RPCError{Message: message.Error.Message} - } - - rpcTxIDBlockHashPairs := make([]*RpcTxIDBlockHashPair, len(message.TxIDBlockHashPairs)) - for i := range rpcTxIDBlockHashPairs { - rpcTxIDBlockHashPairs[i] = &RpcTxIDBlockHashPair{} - rpcTxIDBlockHashPairs[i].fromAppMessage(message.TxIDBlockHashPairs[i]) - } - - x.GetIncludingBlockHashesOfTxsResponse = &GetIncludingBlockHashesOfTxsResponseMessage{ - TxIDBlockHashPairs: rpcTxIDBlockHashPairs, - - Error: rpcErr, - } - return nil -} - -func (x *GetIncludingBlockHashesOfTxsResponseMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "GetIncludingBlockHashesOfTxsResponseMessage is nil") - } - rpcErr, err := x.Error.toAppMessage() - // Error is an optional field - if err != nil && !errors.Is(err, errorNil) { - return nil, err - } - - if rpcErr != nil && x.TxIDBlockHashPairs != nil { - return nil, errors.New("GetIncludingBlockHashesfTxsResponseMessage contains both an error and a response") - } - - appTxIDBlockHashPairs := make([]*appmessage.TxIDBlockHashPair, len(x.TxIDBlockHashPairs)) - for i := range appTxIDBlockHashPairs { - appTxIDBlockHashPairs[i], err = x.TxIDBlockHashPairs[i].toAppMessage() - if err != nil { - return nil, err - } - } - - return &appmessage.GetIncludingBlockHashesOfTxsResponseMessage{ - TxIDBlockHashPairs: appTxIDBlockHashPairs, - Error: rpcErr, - }, nil -} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blocks_of_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blocks_of_txs.go deleted file mode 100644 index 928768cfdb..0000000000 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_including_blocks_of_txs.go +++ /dev/null @@ -1,90 +0,0 @@ -package protowire - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/pkg/errors" -) - -func (x *KaspadMessage_GetIncludingBlocksOfTxsRequest) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_GetIncludingBlocksOfTxsRequest") - } - return x.GetIncludingBlocksOfTxsRequest.toAppMessage() -} - -func (x *KaspadMessage_GetIncludingBlocksOfTxsRequest) fromAppMessage(message *appmessage.GetIncludingBlocksOfTxsRequestMessage) error { - x.GetIncludingBlocksOfTxsRequest = &GetIncludingBlocksOfTxsRequestMessage{ - TxIDs: message.TxIDs, - IncludeTransactions: message.IncludeTransactions, - } - return nil -} - -func (x *GetIncludingBlocksOfTxsRequestMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "GetIncludingBlocksOfTxsRequestMessage is nil") - } - return &appmessage.GetIncludingBlocksOfTxsRequestMessage{ - TxIDs: x.TxIDs, - IncludeTransactions: x.IncludeTransactions, - }, nil -} - -func (x *KaspadMessage_GetIncludingBlocksOfTxsResponse) toAppMessage() (appmessage.Message, error) { - - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_GetIncludingBlocksOfTxsResponse is nil") - } - return x.GetIncludingBlocksOfTxsResponse.toAppMessage() -} - -func (x *KaspadMessage_GetIncludingBlocksOfTxsResponse) fromAppMessage(message *appmessage.GetIncludingBlocksOfTxsResponseMessage) error { - var rpcErr *RPCError - if message.Error != nil { - rpcErr = &RPCError{Message: message.Error.Message} - } - - rpcTxIDBlockPairs := make([]*RpcTxIDBlockPair, len(message.TxIDBlockPairs)) - for i := range rpcTxIDBlockPairs { - rpcTxIDBlockPairs[i] = &RpcTxIDBlockPair{} - err := rpcTxIDBlockPairs[i].fromAppMessage(message.TxIDBlockPairs[i]) - if err != nil { - return err - } - } - - x.GetIncludingBlocksOfTxsResponse = &GetIncludingBlocksOfTxsResponseMessage{ - TxIDBlockPairs: rpcTxIDBlockPairs, - - Error: rpcErr, - } - return nil -} - -func (x *GetIncludingBlocksOfTxsResponseMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "GetIncludingBlocksOfTxsResponseMessage is nil") - } - rpcErr, err := x.Error.toAppMessage() - // Error is an optional field - if err != nil && !errors.Is(err, errorNil) { - return nil, err - } - - if rpcErr != nil && x.TxIDBlockPairs != nil { - return nil, errors.New("GetIncludingBlocksOfTxsResponseMessage contains both an error and a response") - } - - appTxIDBlockPairs := make([]*appmessage.TxIDBlockPair, len(x.TxIDBlockPairs)) - for i := range appTxIDBlockPairs { - appTxIDBlockPairs[i], err = x.TxIDBlockPairs[i].toAppMessage() - if err != nil { - return nil, err - } - } - - return &appmessage.GetIncludingBlocksOfTxsResponseMessage{ - TxIDBlockPairs: appTxIDBlockPairs, - Error: rpcErr, - }, nil -} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx.go deleted file mode 100644 index 310c67d1c4..0000000000 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx.go +++ /dev/null @@ -1,78 +0,0 @@ -package protowire - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/pkg/errors" -) - -func (x *KaspadMessage_GetTxRequest) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_GetTxRequest") - } - return x.GetTxRequest.toAppMessage() -} - -func (x *KaspadMessage_GetTxRequest) fromAppMessage(message *appmessage.GetTxRequestMessage) error { - x.GetTxRequest = &GetTxRequestMessage{ - TxID: message.TxID, - } - return nil -} - -func (x *GetTxRequestMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "GetTxRequestMessage is nil") - } - return &appmessage.GetTxRequestMessage{ - TxID: x.TxID, - }, nil -} - -func (x *KaspadMessage_GetTxResponse) toAppMessage() (appmessage.Message, error) { - - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_GetTxResponse is nil") - } - return x.GetTxResponse.toAppMessage() -} - -func (x *KaspadMessage_GetTxResponse) fromAppMessage(message *appmessage.GetTxResponseMessage) error { - var rpcErr *RPCError - if message.Error != nil { - rpcErr = &RPCError{Message: message.Error.Message} - } - rpcTransaction := &RpcTransaction{} - rpcTransaction.fromAppMessage(message.Transaction) - - x.GetTxResponse = &GetTxResponseMessage{ - Transaction: rpcTransaction, - - Error: rpcErr, - } - return nil -} - -func (x *GetTxResponseMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "GetTxResponseMessage is nil") - } - rpcErr, err := x.Error.toAppMessage() - // Error is an optional field - if err != nil && !errors.Is(err, errorNil) { - return nil, err - } - - if rpcErr != nil && x.Transaction != nil { - return nil, errors.New("GetTxResponseMessage contains both an error and a response") - } - - appTransaction, err := x.Transaction.toAppMessage() - if err != nil { - return nil, err - } - - return &appmessage.GetTxResponseMessage{ - Transaction: appTransaction, - Error: rpcErr, - }, nil -} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx_confirmations.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx_confirmations.go deleted file mode 100644 index 4ea36692c4..0000000000 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_tx_confirmations.go +++ /dev/null @@ -1,71 +0,0 @@ -package protowire - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/pkg/errors" -) - -func (x *KaspadMessage_GetTxConfirmationsRequest) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_GetTxConfirmationsRequest") - } - return x.GetTxConfirmationsRequest.toAppMessage() -} - -func (x *KaspadMessage_GetTxConfirmationsRequest) fromAppMessage(message *appmessage.GetTxConfirmationsRequestMessage) error { - x.GetTxConfirmationsRequest = &GetTxConfirmationsRequestMessage{ - TxID: message.TxID, - } - return nil -} - -func (x *GetTxConfirmationsRequestMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "GetTxConfirmationsRequestMessage is nil") - } - return &appmessage.GetTxConfirmationsRequestMessage{ - TxID: x.TxID, - }, nil -} - -func (x *KaspadMessage_GetTxConfirmationsResponse) toAppMessage() (appmessage.Message, error) { - - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_GetTxConfirmationsResponse is nil") - } - return x.GetTxConfirmationsResponse.toAppMessage() -} - -func (x *KaspadMessage_GetTxConfirmationsResponse) fromAppMessage(message *appmessage.GetTxConfirmationsResponseMessage) error { - var rpcErr *RPCError - if message.Error != nil { - rpcErr = &RPCError{Message: message.Error.Message} - } - - x.GetTxConfirmationsResponse = &GetTxConfirmationsResponseMessage{ - Confirmations: message.Confirmations, - - Error: rpcErr, - } - return nil -} - -func (x *GetTxConfirmationsResponseMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "GetTxConfirmationsResponseMessage is nil") - } - rpcErr, err := x.Error.toAppMessage() - // Error is an optional field - if err != nil && !errors.Is(err, errorNil) { - return nil, err - } - - if err != nil { - return nil, err - } - - return &appmessage.GetTxConfirmationsResponseMessage{ - Confirmations: x.Confirmations, - Error: rpcErr, - }, nil -} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notify_addresses_txs_params.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notify_addresses_txs_params.go deleted file mode 100644 index 11cbe9496c..0000000000 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notify_addresses_txs_params.go +++ /dev/null @@ -1,53 +0,0 @@ -package protowire - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/pkg/errors" -) - -func (x *KaspadMessage_ModifyNotifyAddressesTxsParamsRequest) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_ModifyNotifyAddressesTxsParamsRequest is nil") - } - return x.ModifyNotifyAddressesTxsParamsRequest.toAppMessage() -} - -func (x *KaspadMessage_ModifyNotifyAddressesTxsParamsRequest) fromAppMessage(message *appmessage.ModifyNotifyAddressesTxsParamsRequestMessage) error { - x.ModifyNotifyAddressesTxsParamsRequest = &ModifyNotifyAddressesTxsParamsRequestMessage{ - RequiredConfirmations: message.RequiredConfirmations, - IncludePending: message.IncludePending, - IncludeSending: message.IncludeSending, - IncludeReceiving: message.IncludeReceiving, - } - return nil -} - -func (x *ModifyNotifyAddressesTxsParamsRequestMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "ModifyNotifyAddressesTxsParamsRequestMessage is nil") - } - return &appmessage.ModifyNotifyAddressesTxsParamsRequestMessage{ - RequiredConfirmations: x.RequiredConfirmations, - IncludePending: x.IncludePending, - IncludeSending: x.IncludeSending, - IncludeReceiving: x.IncludeReceiving, - }, nil -} - -func (x *KaspadMessage_ModifyNotifyAddressesTxsParamsResponse) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "ModifyNotifyAddressesTxsParamsResponseMessage is nil") - } - return x.ModifyNotifyAddressesTxsParamsResponse.toAppMessage() -} - -func (x *KaspadMessage_ModifyNotifyAddressesTxsParamsResponse) fromAppMessage(message *appmessage.ModifyNotifyAddressesTxsParamsResponseMessage) error { - var err *RPCError - if message.Error != nil { - err = &RPCError{Message: message.Error.Message} - } - x.ModifyNotifyAddressesTxsParamsResponse = &ModifyNotifytTxsConfirmationChangedParamsResponseMessage{ - Error: err, - } - return nil -} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notify_txs_confirmation_changed_params.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notify_txs_confirmation_changed_params.go deleted file mode 100644 index afc3cfd1f3..0000000000 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notify_txs_confirmation_changed_params.go +++ /dev/null @@ -1,49 +0,0 @@ -package protowire - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/pkg/errors" -) - -func (x *KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsRequest) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsRequest is nil") - } - return x.ModifyNotifyTxsConfirmationChangedParamsRequest.toAppMessage() -} - -func (x *KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsRequest) fromAppMessage(message *appmessage.ModifyNotifyTxsConfirmationChangedParamsRequestMessage) error { - x.ModifyNotifyTxsConfirmationChangedParamsRequest = &ModifyNotifyTxsConfirmationChangedParamsRequestMessage{ - RequiredConfirmations: message.RequiredConfirmations, - IncludePending: message.IncludePending, - } - return nil -} - -func (x *ModifyNotifyTxsConfirmationChangedParamsRequestMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "ModifyNotifyTxsConfirmationChangedParamsRequestMessage is nil") - } - return &appmessage.ModifyNotifyTxsConfirmationChangedParamsRequestMessage{ - RequiredConfirmations: x.RequiredConfirmations, - IncludePending: x.IncludePending, - }, nil -} - -func (x *KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsResponse) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "ModifyNotifyTxsConfirmationChangedParamsResponseMessage is nil") - } - return x.ModifyNotifyTxsConfirmationChangedParamsResponse.toAppMessage() -} - -func (x *KaspadMessage_ModifyNotifyTxsConfirmationChangedParamsResponse) fromAppMessage(message *appmessage.ModifyNotifyTxsConfirmationChangedParamsResponseMessage) error { - var err *RPCError - if message.Error != nil { - err = &RPCError{Message: message.Error.Message} - } - x.ModifyNotifyTxsConfirmationChangedParamsResponse = &ModifyNotifytTxsConfirmationChangedParamsResponseMessage{ - Error: err, - } - return nil -} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_addresses_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_addresses_txs.go new file mode 100644 index 0000000000..29a5806dee --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_addresses_txs.go @@ -0,0 +1,53 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_ModifyNotifyingAddressesTxsRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_ModifyNotifyingAddressesTxsRequest is nil") + } + return x.ModifyNotifyingAddressesTxsRequest.toAppMessage() +} + +func (x *KaspadMessage_ModifyNotifyingAddressesTxsRequest) fromAppMessage(message *appmessage.ModifyNotifyingAddressesTxsRequestMessage) error { + x.ModifyNotifyingAddressesTxsRequest = &ModifyNotifyingAddressesTxsRequestMessage{ + RequiredConfirmations: message.RequiredConfirmations, + IncludePending: message.IncludePending, + IncludeSending: message.IncludeSending, + IncludeReceiving: message.IncludeReceiving, + } + return nil +} + +func (x *ModifyNotifyingAddressesTxsRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "ModifyNotifyingAddressesTxsRequestMessage is nil") + } + return &appmessage.ModifyNotifyingAddressesTxsRequestMessage{ + RequiredConfirmations: x.RequiredConfirmations, + IncludePending: x.IncludePending, + IncludeSending: x.IncludeSending, + IncludeReceiving: x.IncludeReceiving, + }, nil +} + +func (x *KaspadMessage_ModifyNotifyingAddressesTxsResponse) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "ModifyNotifyingAddressesTxsResponseMessage is nil") + } + return x.ModifyNotifyingAddressesTxsResponse.toAppMessage() +} + +func (x *KaspadMessage_ModifyNotifyingAddressesTxsResponse) fromAppMessage(message *appmessage.ModifyNotifyingAddressesTxsResponseMessage) error { + var err *RPCError + if message.Error != nil { + err = &RPCError{Message: message.Error.Message} + } + x.ModifyNotifyingAddressesTxsResponse = &ModifyNotifytTxsConfirmingationChangedResponseMessage{ + Error: err, + } + return nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_txs_confirmation_changed.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_txs_confirmation_changed.go new file mode 100644 index 0000000000..353e0127b9 --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_txs_confirmation_changed.go @@ -0,0 +1,49 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_ModifyNotifyingTxsConfirmationChangedRequest) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_ModifyNotifyingTxsConfirmationChangedRequest is nil") + } + return x.ModifyNotifyingTxsConfirmationChangedRequest.toAppMessage() +} + +func (x *KaspadMessage_ModifyNotifyingTxsConfirmationChangedRequest) fromAppMessage(message *appmessage.ModifyNotifyingTxsConfirmationChangedRequestMessage) error { + x.ModifyNotifyingTxsConfirmationChangedRequest = &ModifyNotifyingTxsConfirmationChangedRequestMessage{ + RequiredConfirmations: message.RequiredConfirmations, + IncludePending: message.IncludePending, + } + return nil +} + +func (x *ModifyNotifyingTxsConfirmationChangedRequestMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "ModifyNotifyingTxsConfirmationChangedRequestMessage is nil") + } + return &appmessage.ModifyNotifyingTxsConfirmationChangedRequestMessage{ + RequiredConfirmations: x.RequiredConfirmations, + IncludePending: x.IncludePending, + }, nil +} + +func (x *KaspadMessage_ModifyNotifyingTxsConfirmationChangedResponse) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "ModifyNotifyingTxsConfirmationChangedResponseMessage is nil") + } + return x.ModifyNotifyingTxsConfirmationChangedResponse.toAppMessage() +} + +func (x *KaspadMessage_ModifyNotifyingTxsConfirmationChangedResponse) fromAppMessage(message *appmessage.ModifyNotifyingTxsConfirmationChangedResponseMessage) error { + var err *RPCError + if message.Error != nil { + err = &RPCError{Message: message.Error.Message} + } + x.ModifyNotifyingTxsConfirmationChangedResponse = &ModifyNotifytingTxsConfirmationChangedResponseMessage{ + Error: err, + } + return nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go index fb9554640e..33804f41d7 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go @@ -3,17 +3,17 @@ package protowire import ( "github.com/kaspanet/kaspad/app/appmessage" "github.com/pkg/errors" -) NotifyAddressesTxsParams +) func (x *KaspadMessage_NotifyAddressesTxsRequest) toAppMessage() (appmessage.Message, error) { if x == nil { return nil, errors.Wrapf(errorNil, "KaspadMessage_NotifyAddressesTxsRequest is nil") } - return x.NotifyAddressesTxsRequst.toAppMessage() + return x.NotifyAddressesTxsRequest.toAppMessage() } -func (x *KaspadMessage_NotifyAddressesTxsRequest) fromAppMessage(message *appmessage.NotifyAddressesTxsRequstMessage) error { - x.NotifyAddressesTxsRequest = &NotifyAddressesTxsRequstMessage{ +func (x *KaspadMessage_NotifyAddressesTxsRequest) fromAppMessage(message *appmessage.NotifyAddressesTxsRequestMessage) error { + x.NotifyAddressesTxsRequest = &NotifyAddressesTxsRequestMessage{ Addresses : message.Addresses, RequiredConfirmations: message.RequiredConfirmations, IncludePending: message.IncludePending, @@ -76,23 +76,12 @@ func (x *KaspadMessage_AddressesTxsNotification) toAppMessage() (appmessage.Mess } func (x *KaspadMessage_AddressesTxsNotification) fromAppMessage(message *appmessage.AddressesTxsNotificationMessage) error { - pending := make([]*TxEntriesByAddresses, len(message.Pending)) - for i, entry := range message.Pending { - entry[i] = &TxEntriesByAddresses{} - entry[i].fromAppMessage(entry) - } - confirmed := make([]*TxEntriesByAddresses, len(message.Confirmed)) - for i, entry := range message.Confirmed { - entry[i] = &TxEntriesByAddresses{} - entry[i].fromAppMessage(entry) - } + pending := message.Pending.fromAppMessage() - unconfirmed := make([]*TxEntriesByAddresses, len(message.Unconfirmed)) - for i, entry := range message.Confirmed { - entry[i] = &TxEntriesByAddresses{} - entry[i].fromAppMessage(entry) - } + confirmed := message.Confirmed.fromAppMessage() + + unconfirmed := message.Unconfirmed.fromAppMessage() x.AddressesTxsNotification = &AddressesTxsNotificationMessage{ RequiredConfirmations: message.RequiredConfirmations, @@ -107,34 +96,21 @@ func (x *AddressesTxsNotificationMessage) toAppMessage() (appmessage.Message, er if x == nil { return nil, errors.Wrapf(errorNil, "AddressesTxsNotificationMessage is nil") } - pending := make([]*appmessage.TxEntriesByAddresses, len(x.Pending)) - for i, entry := range x.Pending { - entry, err := entry.toAppMessage() - if err != nil { - return nil, err - } - pending[i] = entry + pending, err := x.Pending.toAppMessage() + if err != nil { + return nil, err } - confirmed := make([]*appmessage.TxEntriesByAddresses, len(x.Confirmed)) - for i, entry := range x.Confirmed { - entry, err := entry.toAppMessage() - if err != nil { - return nil, err - } - confirmed[i] = entry + confirmed, err := x.Pending.toAppMessage() + if err != nil { + return nil, err } - unconfirmed := make([]*appmessage.TxEntriesByAddresses, len(x.Unconfirmed)) - for i, entry := range x.Unconfirmed { - entry, err := entry.toAppMessage() - if err != nil { - return nil, err - } - confirmed[i] = entry + unconfirmed, err := x.Unconfirmed.toAppMessage() + if err != nil { + return nil, err } - return &appmessage.AddressesTxsNotificationMessage{ RequiredConfirmations: x.RequiredConfirmations, Pending: pending, diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go b/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go index 532cbcb9cb..a23fb4fe55 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go @@ -968,20 +968,6 @@ func toRPCPayload(message appmessage.Message) (isKaspadMessage_Payload, error) { return nil, err } return payload, nil - case *appmessage.GetAcceptingBlockHashOfTxRequestMessage: - payload := new(KaspadMessage_GetAcceptingBlockHashOfTxRequest) - err := payload.fromAppMessage(message) - if err != nil { - return nil, err - } - return payload, nil - case *appmessage.GetAcceptingBlockHashOfTxResponseMessage: - payload := new(KaspadMessage_GetAcceptingBlockHashOfTxResponse) - err := payload.fromAppMessage(message) - if err != nil { - return nil, err - } - return payload, nil case *appmessage.GetAcceptingBlockHashesOfTxsRequestMessage: payload := new(KaspadMessage_GetAcceptingBlockHashesOfTxsRequest) err := payload.fromAppMessage(message) @@ -996,104 +982,6 @@ func toRPCPayload(message appmessage.Message) (isKaspadMessage_Payload, error) { return nil, err } return payload, nil - case *appmessage.GetAcceptingBlockOfTxRequestMessage: - payload := new(KaspadMessage_GetAcceptingBlockOfTxRequest) - err := payload.fromAppMessage(message) - if err != nil { - return nil, err - } - return payload, nil - case *appmessage.GetAcceptingBlockOfTxResponseMessage: - payload := new(KaspadMessage_GetAcceptingBlockOfTxResponse) - err := payload.fromAppMessage(message) - if err != nil { - return nil, err - } - return payload, nil - case *appmessage.GetAcceptingBlocksOfTxsRequestMessage: - payload := new(KaspadMessage_GetAcceptingBlocksOfTxsRequest) - err := payload.fromAppMessage(message) - if err != nil { - return nil, err - } - return payload, nil - case *appmessage.GetAcceptingBlocksOfTxsResponseMessage: - payload := new(KaspadMessage_GetAcceptingBlocksOfTxsResponse) - err := payload.fromAppMessage(message) - if err != nil { - return nil, err - } - return payload, nil - case *appmessage.GetIncludingBlockHashesOfTxsRequestMessage: - payload := new(KaspadMessage_GetIncludingBlockHashesOfTxsRequest) - err := payload.fromAppMessage(message) - if err != nil { - return nil, err - } - return payload, nil - case *appmessage.GetIncludingBlockHashesOfTxsResponseMessage: - payload := new(KaspadMessage_GetIncludingBlockHashesOfTxsResponse) - err := payload.fromAppMessage(message) - if err != nil { - return nil, err - } - return payload, nil - case *appmessage.GetIncludingBlockOfTxRequestMessage: - payload := new(KaspadMessage_GetIncludingBlockOfTxRequest) - err := payload.fromAppMessage(message) - if err != nil { - return nil, err - } - return payload, nil - case *appmessage.GetIncludingBlockOfTxResponseMessage: - payload := new(KaspadMessage_GetIncludingBlockOfTxResponse) - err := payload.fromAppMessage(message) - if err != nil { - return nil, err - } - return payload, nil - case *appmessage.GetIncludingBlocksOfTxsRequestMessage: - payload := new(KaspadMessage_GetIncludingBlocksOfTxsRequest) - err := payload.fromAppMessage(message) - if err != nil { - return nil, err - } - return payload, nil - case *appmessage.GetIncludingBlocksOfTxsResponseMessage: - payload := new(KaspadMessage_GetIncludingBlocksOfTxsResponse) - err := payload.fromAppMessage(message) - if err != nil { - return nil, err - } - return payload, nil - case *appmessage.GetIncludingBlockHashOfTxRequestMessage: - payload := new(KaspadMessage_GetIncludingBlockHashOfTxRequest) - err := payload.fromAppMessage(message) - if err != nil { - return nil, err - } - return payload, nil - case *appmessage.GetIncludingBlockHashOfTxResponseMessage: - payload := new(KaspadMessage_GetIncludingBlockHashOfTxResponse) - err := payload.fromAppMessage(message) - if err != nil { - return nil, err - } - return payload, nil - case *appmessage.GetTxRequestMessage: - payload := new(KaspadMessage_GetTxRequest) - err := payload.fromAppMessage(message) - if err != nil { - return nil, err - } - return payload, nil - case *appmessage.GetTxResponseMessage: - payload := new(KaspadMessage_GetTxResponse) - err := payload.fromAppMessage(message) - if err != nil { - return nil, err - } - return payload, nil case *appmessage.GetTxsRequestMessage: payload := new(KaspadMessage_GetTxsRequest) err := payload.fromAppMessage(message) @@ -1108,20 +996,6 @@ func toRPCPayload(message appmessage.Message) (isKaspadMessage_Payload, error) { return nil, err } return payload, nil - case *appmessage.GetTxConfirmationsRequestMessage: - payload := new(KaspadMessage_GetTxConfirmationsRequest) - err := payload.fromAppMessage(message) - if err != nil { - return nil, err - } - return payload, nil - case *appmessage.GetTxConfirmationsResponseMessage: - payload := new(KaspadMessage_GetTxConfirmationsResponse) - err := payload.fromAppMessage(message) - if err != nil { - return nil, err - } - return payload, nil case *appmessage.GetTxsConfirmationsRequestMessage: payload := new(KaspadMessage_GetTxsConfirmationsRequest) err := payload.fromAppMessage(message) diff --git a/infrastructure/network/rpcclient/rpc_get_accepting_block_of_tx.go b/infrastructure/network/rpcclient/rpc_get_accepting_block_of_tx.go deleted file mode 100644 index a202e34cf2..0000000000 --- a/infrastructure/network/rpcclient/rpc_get_accepting_block_of_tx.go +++ /dev/null @@ -1,20 +0,0 @@ -package rpcclient - -import "github.com/kaspanet/kaspad/app/appmessage" - -// GetAcceptingBlockOfTx sends an RPC request respective to the function's name and returns the RPC server's response -func (c *RPCClient) GetAcceptingBlockOfTx(txID string, includeTransactions bool) (*appmessage.GetAcceptingBlockOfTxResponseMessage, error) { - err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetAcceptingBlockOfTxRequest(txID, includeTransactions)) - if err != nil { - return nil, err - } - response, err := c.route(appmessage.CmdGetAcceptingBlockOfTxResponseMessage).DequeueWithTimeout(c.timeout) - if err != nil { - return nil, err - } - getAcceptingBlockOfTxResponse := response.(*appmessage.GetAcceptingBlockOfTxResponseMessage) - if getAcceptingBlockOfTxResponse.Error != nil { - return nil, c.convertRPCError(getAcceptingBlockOfTxResponse.Error) - } - return getAcceptingBlockOfTxResponse, nil -} diff --git a/infrastructure/network/rpcclient/rpc_get_accepting_blockhash_of_tx.go b/infrastructure/network/rpcclient/rpc_get_accepting_blockhash_of_tx.go deleted file mode 100644 index 577764d60d..0000000000 --- a/infrastructure/network/rpcclient/rpc_get_accepting_blockhash_of_tx.go +++ /dev/null @@ -1,20 +0,0 @@ -package rpcclient - -import "github.com/kaspanet/kaspad/app/appmessage" - -// GetAcceptingBlockHashOfTx sends an RPC request respective to the function's name and returns the RPC server's response -func (c *RPCClient) GetAcceptingBlockHashOfTx(txID string) (*appmessage.GetAcceptingBlockHashOfTxResponseMessage, error) { - err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetAcceptingBlockHashOfTxRequest(txID)) - if err != nil { - return nil, err - } - response, err := c.route(appmessage.CmdGetAcceptingBlockHashOfTxResponseMessage).DequeueWithTimeout(c.timeout) - if err != nil { - return nil, err - } - getAcceptingBlockHashOfTxResponse := response.(*appmessage.GetAcceptingBlockHashOfTxResponseMessage) - if getAcceptingBlockHashOfTxResponse.Error != nil { - return nil, c.convertRPCError(getAcceptingBlockHashOfTxResponse.Error) - } - return getAcceptingBlockHashOfTxResponse, nil -} diff --git a/infrastructure/network/rpcclient/rpc_get_accepting_blocks_of_txs.go b/infrastructure/network/rpcclient/rpc_get_accepting_blocks_of_txs.go deleted file mode 100644 index a7f8b1a1e0..0000000000 --- a/infrastructure/network/rpcclient/rpc_get_accepting_blocks_of_txs.go +++ /dev/null @@ -1,20 +0,0 @@ -package rpcclient - -import "github.com/kaspanet/kaspad/app/appmessage" - -// GetAcceptingBlocksTxs sends an RPC request respective to the function's name and returns the RPC server's response -func (c *RPCClient) GetAcceptingBlocksTxs(txIDs []string, includeTransactions bool) (*appmessage.GetAcceptingBlocksOfTxsResponseMessage, error) { - err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetAcceptingBlocksOfTxsRequest(txIDs, includeTransactions)) - if err != nil { - return nil, err - } - response, err := c.route(appmessage.CmdGetAcceptingBlocksOfTxsResponseMessage).DequeueWithTimeout(c.timeout) - if err != nil { - return nil, err - } - getAcceptingBlocksOfTxsResponse := response.(*appmessage.GetAcceptingBlocksOfTxsResponseMessage) - if getAcceptingBlocksOfTxsResponse.Error != nil { - return nil, c.convertRPCError(getAcceptingBlocksOfTxsResponse.Error) - } - return getAcceptingBlocksOfTxsResponse, nil -} diff --git a/infrastructure/network/rpcclient/rpc_get_including_block_of_tx.go b/infrastructure/network/rpcclient/rpc_get_including_block_of_tx.go deleted file mode 100644 index c048db6881..0000000000 --- a/infrastructure/network/rpcclient/rpc_get_including_block_of_tx.go +++ /dev/null @@ -1,20 +0,0 @@ -package rpcclient - -import "github.com/kaspanet/kaspad/app/appmessage" - -// GetIncludingBlockOfTx sends an RPC request respective to the function's name and returns the RPC server's response -func (c *RPCClient) GetIncludingBlockOfTx(txID string, includeTransactions bool) (*appmessage.GetIncludingBlockOfTxResponseMessage, error) { - err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetIncludingBlockOfTxRequest(txID, includeTransactions)) - if err != nil { - return nil, err - } - response, err := c.route(appmessage.CmdGetIncludingBlockOfTxResponseMessage).DequeueWithTimeout(c.timeout) - if err != nil { - return nil, err - } - getIncludingBlockOfTxResponse := response.(*appmessage.GetIncludingBlockOfTxResponseMessage) - if getIncludingBlockOfTxResponse.Error != nil { - return nil, c.convertRPCError(getIncludingBlockOfTxResponse.Error) - } - return getIncludingBlockOfTxResponse, nil -} diff --git a/infrastructure/network/rpcclient/rpc_get_including_blockhash_of_tx.go b/infrastructure/network/rpcclient/rpc_get_including_blockhash_of_tx.go deleted file mode 100644 index b6b8f34a31..0000000000 --- a/infrastructure/network/rpcclient/rpc_get_including_blockhash_of_tx.go +++ /dev/null @@ -1,20 +0,0 @@ -package rpcclient - -import "github.com/kaspanet/kaspad/app/appmessage" - -// GetIncludingBlockHashOfTxs sends an RPC request respective to the function's name and returns the RPC server's response -func (c *RPCClient) GetIncludingBlockHashOfTxs(txID string) (*appmessage.GetIncludingBlockHashOfTxResponseMessage, error) { - err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetIncludingBlockHashOfTxRequest(txID)) - if err != nil { - return nil, err - } - response, err := c.route(appmessage.CmdGetIncludingBlockHashOfTxResponseMessage).DequeueWithTimeout(c.timeout) - if err != nil { - return nil, err - } - getIncludingBlockHashOfTxResponse := response.(*appmessage.GetIncludingBlockHashOfTxResponseMessage) - if getIncludingBlockHashOfTxResponse.Error != nil { - return nil, c.convertRPCError(getIncludingBlockHashOfTxResponse.Error) - } - return getIncludingBlockHashOfTxResponse, nil -} diff --git a/infrastructure/network/rpcclient/rpc_get_including_blockhashes_of_txs.go b/infrastructure/network/rpcclient/rpc_get_including_blockhashes_of_txs.go deleted file mode 100644 index ecdf5c7861..0000000000 --- a/infrastructure/network/rpcclient/rpc_get_including_blockhashes_of_txs.go +++ /dev/null @@ -1,20 +0,0 @@ -package rpcclient - -import "github.com/kaspanet/kaspad/app/appmessage" - -// GetIncludingBlockHashesOfTxs sends an RPC request respective to the function's name and returns the RPC server's response -func (c *RPCClient) GetIncludingBlockHashesOfTxs(txIDs []string) (*appmessage.GetIncludingBlockHashesOfTxsResponseMessage, error) { - err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetIncludingBlockHashesOfTxsRequest(txIDs)) - if err != nil { - return nil, err - } - response, err := c.route(appmessage.CmdGetIncludingBlockHashesOfTxsResponseMessage).DequeueWithTimeout(c.timeout) - if err != nil { - return nil, err - } - getIncludingBlockHashesOfTxsResponse := response.(*appmessage.GetIncludingBlockHashesOfTxsResponseMessage) - if getIncludingBlockHashesOfTxsResponse.Error != nil { - return nil, c.convertRPCError(getIncludingBlockHashesOfTxsResponse.Error) - } - return getIncludingBlockHashesOfTxsResponse, nil -} diff --git a/infrastructure/network/rpcclient/rpc_get_including_blocks_of_txs.go b/infrastructure/network/rpcclient/rpc_get_including_blocks_of_txs.go deleted file mode 100644 index 459db71751..0000000000 --- a/infrastructure/network/rpcclient/rpc_get_including_blocks_of_txs.go +++ /dev/null @@ -1,20 +0,0 @@ -package rpcclient - -import "github.com/kaspanet/kaspad/app/appmessage" - -// GetIncludingBlocksTxs sends an RPC request respective to the function's name and returns the RPC server's response -func (c *RPCClient) GetIncludingBlocksTxs(txIDs []string, includeTransactions bool) (*appmessage.GetIncludingBlocksOfTxsResponseMessage, error) { - err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetIncludingBlocksOfTxsRequest(txIDs, includeTransactions)) - if err != nil { - return nil, err - } - response, err := c.route(appmessage.CmdGetIncludingBlocksOfTxsResponseMessage).DequeueWithTimeout(c.timeout) - if err != nil { - return nil, err - } - getIncludingBlocksOfTxsResponse := response.(*appmessage.GetIncludingBlocksOfTxsResponseMessage) - if getIncludingBlocksOfTxsResponse.Error != nil { - return nil, c.convertRPCError(getIncludingBlocksOfTxsResponse.Error) - } - return getIncludingBlocksOfTxsResponse, nil -} diff --git a/infrastructure/network/rpcclient/rpc_get_tx.go b/infrastructure/network/rpcclient/rpc_get_tx.go deleted file mode 100644 index 9a80a83937..0000000000 --- a/infrastructure/network/rpcclient/rpc_get_tx.go +++ /dev/null @@ -1,20 +0,0 @@ -package rpcclient - -import "github.com/kaspanet/kaspad/app/appmessage" - -// GetTx sends an RPC request respective to the function's name and returns the RPC server's response -func (c *RPCClient) GetTx(txID string) (*appmessage.GetTxResponseMessage, error) { - err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetTxRequest(txID)) - if err != nil { - return nil, err - } - response, err := c.route(appmessage.CmdGetTxResponseMessage).DequeueWithTimeout(c.timeout) - if err != nil { - return nil, err - } - getTxResponse := response.(*appmessage.GetTxResponseMessage) - if getTxResponse.Error != nil { - return nil, c.convertRPCError(getTxResponse.Error) - } - return getTxResponse, nil -} diff --git a/infrastructure/network/rpcclient/rpc_get_tx_confirmations.go b/infrastructure/network/rpcclient/rpc_get_tx_confirmations.go deleted file mode 100644 index d165db9d9f..0000000000 --- a/infrastructure/network/rpcclient/rpc_get_tx_confirmations.go +++ /dev/null @@ -1,20 +0,0 @@ -package rpcclient - -import "github.com/kaspanet/kaspad/app/appmessage" - -// GetTxConfirmations sends an RPC request respective to the function's name and returns the RPC server's response -func (c *RPCClient) GetTxConfirmations(txID string) (*appmessage.GetTxConfirmationsResponseMessage, error) { - err := c.rpcRouter.outgoingRoute().Enqueue(appmessage.NewGetTxConfirmationsRequest(txID)) - if err != nil { - return nil, err - } - response, err := c.route(appmessage.CmdGetTxConfirmationsResponseMessage).DequeueWithTimeout(c.timeout) - if err != nil { - return nil, err - } - getTxConfirmationsResponse := response.(*appmessage.GetTxConfirmationsResponseMessage) - if getTxConfirmationsResponse.Error != nil { - return nil, c.convertRPCError(getTxConfirmationsResponse.Error) - } - return getTxConfirmationsResponse, nil -} From 231633f31a38d38f505b8bf4bf0545b753aa46be Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Sun, 16 Oct 2022 11:13:23 +0200 Subject: [PATCH 37/47] remove excess functions from txindex --- domain/txindex/txindex.go | 216 -------------------------------------- 1 file changed, 216 deletions(-) diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 9df8cd45ac..19f4e91a3a 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -249,26 +249,6 @@ func (ti *TXIndex) removeTXIDs(selectedParentChainChanges *externalapi.SelectedC return nil } -// TXAcceptingBlockHash returns the accepting block hash for for the given txID -func (ti *TXIndex) TXAcceptingBlockHash(txID *externalapi.DomainTransactionID) ( - acceptingBlockHash *externalapi.DomainHash, found bool, err error) { - onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlockHash") - defer onEnd() - - ti.mutex.Lock() - defer ti.mutex.Unlock() - - txData, found, err := ti.store.getTxData(txID) - if err != nil { - return nil, false, err - } - if !found { - return nil, false, nil - } - - return txData.AcceptingBlockHash, found, nil -} - // TXAcceptingBlockHashes returns the accepting block hashes for for the given txIDs func (ti *TXIndex) TXAcceptingBlockHashes(txIDs []*externalapi.DomainTransactionID) ( txIDsToAcceptingBlockHashes TxIDsToBlockHashes, missingTxIds []*externalapi.DomainTransactionID, err error) { @@ -291,82 +271,6 @@ func (ti *TXIndex) TXAcceptingBlockHashes(txIDs []*externalapi.DomainTransaction return txIDsToAcceptingBlockHashes, missingTxIds, nil } -// TXAcceptingBlock returns the accepting block for for the given txID -func (ti *TXIndex) TXAcceptingBlock(txID *externalapi.DomainTransactionID) ( - block *externalapi.DomainBlock, found bool, err error) { - onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlock") - defer onEnd() - - ti.mutex.Lock() - defer ti.mutex.Unlock() - - txIndexData, found, err := ti.store.getTxData(txID) - if err != nil { - return nil, false, err - } - - acceptingBlock, err := ti.domain.Consensus().GetBlockEvenIfHeaderOnly(txIndexData.AcceptingBlockHash) - - if err != nil { - if database.IsNotFoundError(err) { - return nil, false, fmt.Errorf("accepting block %s missing for txID %s ", txIndexData.AcceptingBlockHash.String(), txID.String()) - } - return nil, false, err - } - return acceptingBlock, true, nil -} - -// TXAcceptingBlocks returns the accepting blocks for for the given txIDs -func (ti *TXIndex) TXAcceptingBlocks(txIDs []*externalapi.DomainTransactionID) ( - txIDsToAcceptingBlocks TxIDsToBlocks, notFound []*externalapi.DomainTransactionID, err error) { - onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlocks") - defer onEnd() - - ti.mutex.Lock() - defer ti.mutex.Unlock() - - txIDsToTxIndexData, notFound, err := ti.store.getTxsData(txIDs) - if err != nil { - return nil, nil, err - } - - txIDsToAcceptingBlocks = make(TxIDsToBlocks) - - for txID, txIndexData := range txIDsToTxIndexData { - txIDsToAcceptingBlocks[txID], err = ti.domain.Consensus().GetBlockEvenIfHeaderOnly(txIndexData.AcceptingBlockHash) - if err != nil { - if database.IsNotFoundError(err) { - return nil, nil, fmt.Errorf("accepting block %s missing for txID %s ", txIndexData.IncludingBlockHash.String(), txID.String()) - } - return nil, notFound, err - } - } - - return txIDsToAcceptingBlocks, notFound, nil -} - -// GetTX returns the domain transaction for for the given txID -func (ti *TXIndex) GetTX(txID *externalapi.DomainTransactionID) ( - tx *externalapi.DomainTransaction, found bool, err error) { - onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTX") - defer onEnd() - - ti.mutex.Lock() - defer ti.mutex.Unlock() - - txIndexData, found, err := ti.store.getTxData(txID) - if err != nil { - return nil, false, err - } - - acceptingBlock, err := ti.domain.Consensus().GetBlock(txIndexData.AcceptingBlockHash) - if err != nil { - return nil, false, err - } - - return acceptingBlock.Transactions[txIndexData.IncludingIndex], true, nil -} - // GetTXs returns the domain transaction for for the given txIDs func (ti *TXIndex) GetTXs(txIDs []*externalapi.DomainTransactionID) ( txs []*externalapi.DomainTransaction, notFound []*externalapi.DomainTransactionID, err error) { @@ -401,33 +305,6 @@ func (ti *TXIndex) GetTXs(txIDs []*externalapi.DomainTransactionID) ( return txs, notFound, nil } -// GetTXConfirmations returns the tx confirmations for for the given txID -func (ti *TXIndex) GetTXConfirmations(txID *externalapi.DomainTransactionID) ( - confirmations int64, found bool, err error) { - onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTXConfirmations") - defer onEnd() - - ti.mutex.Lock() - defer ti.mutex.Unlock() - - txdata, found, err := ti.store.getTxData(txID) - if err != nil { - return 0, false, err - } - - acceptingBlockHeader, err := ti.domain.Consensus().GetBlockHeader(txdata.AcceptingBlockHash) - if err != nil { - return -1, false, err - } - - virtualBlock, err := ti.domain.Consensus().GetVirtualInfo() - if err != nil { - return 0, false, err - } - - return int64(virtualBlock.BlueScore - acceptingBlockHeader.BlueScore()), true, nil -} - // GetTXsConfirmations returns the tx confirmations for for the given txIDs func (ti *TXIndex) GetTXsConfirmations(txIDs []*externalapi.DomainTransactionID) ( txIDsToConfirmations TxIDsToConfirmations, notFound []*externalapi.DomainTransactionID, err error) { @@ -462,99 +339,6 @@ func (ti *TXIndex) GetTXsConfirmations(txIDs []*externalapi.DomainTransactionID) return txIDsToConfirmations, notFound, nil } -// TXIncludingBlockHash returns the including block hash for the given txID -func (ti *TXIndex) TXIncludingBlockHash(txID *externalapi.DomainTransactionID) (includingBlockHash *externalapi.DomainHash, found bool, err error) { - onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXIncludingBlockHash") - defer onEnd() - - ti.mutex.Lock() - defer ti.mutex.Unlock() - - txIndexData, found, err := ti.store.getTxData(txID) - if err != nil { - return nil, false, err - } - - return txIndexData.IncludingBlockHash, true, nil -} - -// TXIncludingBlock returns the including block hashes for for the given txIDs -func (ti *TXIndex) TXIncludingBlock(txID *externalapi.DomainTransactionID) ( - block *externalapi.DomainBlock, found bool, err error) { - onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXIncludingBlock") - defer onEnd() - - ti.mutex.Lock() - defer ti.mutex.Unlock() - - txIndexData, found, err := ti.store.getTxData(txID) - if err != nil { - return nil, false, err - } - - includingBlock, err := ti.domain.Consensus().GetBlockEvenIfHeaderOnly(txIndexData.IncludingBlockHash) - - if err != nil { - if database.IsNotFoundError(err) { - return nil, false, fmt.Errorf("including block %s missing for txID %s ", txIndexData.IncludingBlockHash.String(), txID.String()) - } - return nil, false, err - } - return includingBlock, true, nil -} - -// TXIncludingBlockHashes returns the including block hashes for for the given txI -func (ti *TXIndex) TXIncludingBlockHashes(txIDs []*externalapi.DomainTransactionID) ( - txIDsToIncludinglockHashes TxIDsToBlockHashes, missingTxIds []*externalapi.DomainTransactionID, err error) { - onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXIncludingBlockHashes") - defer onEnd() - - ti.mutex.Lock() - defer ti.mutex.Unlock() - - txIDsToTxIndexData, notFound, err := ti.store.getTxsData(txIDs) - if err != nil { - return nil, nil, err - } - - txIDsToIncludinglockHashes = make(TxIDsToBlockHashes) - - for txID, txIndexData := range txIDsToTxIndexData { - txIDsToIncludinglockHashes[txID] = txIndexData.IncludingBlockHash - } - - return txIDsToIncludinglockHashes, notFound, nil -} - -// TXIncludingBlocks returns the including block hashes for for the given txIDs -func (ti *TXIndex) TXIncludingBlocks(txIDs []*externalapi.DomainTransactionID) ( - txIDsToIncludingBlocks TxIDsToBlocks, notFound []*externalapi.DomainTransactionID, err error) { - onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXIncludingBlocks") - defer onEnd() - - ti.mutex.Lock() - defer ti.mutex.Unlock() - - txIDsToTxIndexData, notFound, err := ti.store.getTxsData(txIDs) - if err != nil { - return nil, nil, err - } - - txIDsToIncludingBlocks = make(TxIDsToBlocks) - - for txID, txIndexData := range txIDsToTxIndexData { - txIDsToIncludingBlocks[txID], err = ti.domain.Consensus().GetBlockEvenIfHeaderOnly(txIndexData.IncludingBlockHash) - if err != nil { - if database.IsNotFoundError(err) { - return nil, nil, fmt.Errorf("including block %s missing for txID %s ", txIndexData.IncludingBlockHash.String(), txID.String()) - } - return nil, nil, err - } - } - - return txIDsToIncludingBlocks, notFound, nil -} - // GetTXsBlueScores returns the tx's accepting bluescore for for the given txID // Note: this is a optimization function to store and dynamically calc. tx confirmations with access to to virtual bluescore // such as in the case of rpc confirmation notification listeners From f820acd7df7460d5b6ffadd7de3c0c678d5733eb Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Sun, 16 Oct 2022 11:40:35 +0200 Subject: [PATCH 38/47] remove some more --- .../rpc_get_accepting_block_of_tx.go | 43 ---------------- .../rpc_get_accepting_blockhash_of_tx.go | 41 --------------- .../rpc_get_accepting_blocks_of_txs.go | 50 ------------------- .../rpc_get_including_block_of_tx.go | 43 ---------------- .../rpc_get_including_blockhash_of_tx.go | 41 --------------- .../rpc_get_including_blockhashes_of_txs.go | 41 --------------- .../rpc_get_including_blocks_of_txs.go | 43 ---------------- app/appmessage/rpc_get_tx.go | 41 --------------- app/appmessage/rpc_get_tx_confirmations.go | 41 --------------- 9 files changed, 384 deletions(-) delete mode 100644 app/appmessage/rpc_get_accepting_block_of_tx.go delete mode 100644 app/appmessage/rpc_get_accepting_blockhash_of_tx.go delete mode 100644 app/appmessage/rpc_get_accepting_blocks_of_txs.go delete mode 100644 app/appmessage/rpc_get_including_block_of_tx.go delete mode 100644 app/appmessage/rpc_get_including_blockhash_of_tx.go delete mode 100644 app/appmessage/rpc_get_including_blockhashes_of_txs.go delete mode 100644 app/appmessage/rpc_get_including_blocks_of_txs.go delete mode 100644 app/appmessage/rpc_get_tx.go delete mode 100644 app/appmessage/rpc_get_tx_confirmations.go diff --git a/app/appmessage/rpc_get_accepting_block_of_tx.go b/app/appmessage/rpc_get_accepting_block_of_tx.go deleted file mode 100644 index 85c0e4f236..0000000000 --- a/app/appmessage/rpc_get_accepting_block_of_tx.go +++ /dev/null @@ -1,43 +0,0 @@ -package appmessage - -// GetAcceptingBlockOfTxRequestMessage is an appmessage corresponding to -// its respective RPC message -type GetAcceptingBlockOfTxRequestMessage struct { - baseMessage - TxID string - IncludeTransactions bool -} - -// Command returns the protocol command string for the message -func (msg *GetAcceptingBlockOfTxRequestMessage) Command() MessageCommand { - return CmdGetAcceptingBlockOfTxRequestMessage -} - -// NewGetAcceptingBlockOfTxRequest returns a instance of the message -func NewGetAcceptingBlockOfTxRequest(txID string, includeTransactions bool) *GetAcceptingBlockOfTxRequestMessage { - return &GetAcceptingBlockOfTxRequestMessage{ - TxID: txID, - IncludeTransactions: includeTransactions, - } -} - -// GetAcceptingBlockOfTxResponseMessage is an appmessage corresponding to -// its respective RPC message -type GetAcceptingBlockOfTxResponseMessage struct { - baseMessage - Block *RPCBlock - - Error *RPCError -} - -// Command returns the protocol command string for the message -func (msg *GetAcceptingBlockOfTxResponseMessage) Command() MessageCommand { - return CmdGetAcceptingBlockOfTxResponseMessage -} - -// NewGetAcceptingBlockOfTxResponse returns an instance of the message -func NewGetAcceptingBlockOfTxResponse(block *RPCBlock) *GetAcceptingBlockOfTxResponseMessage { - return &GetAcceptingBlockOfTxResponseMessage{ - Block: block, - } -} diff --git a/app/appmessage/rpc_get_accepting_blockhash_of_tx.go b/app/appmessage/rpc_get_accepting_blockhash_of_tx.go deleted file mode 100644 index 4996befafe..0000000000 --- a/app/appmessage/rpc_get_accepting_blockhash_of_tx.go +++ /dev/null @@ -1,41 +0,0 @@ -package appmessage - -// GetAcceptingBlockHashOfTxRequestMessage is an appmessage corresponding to -// its respective RPC message -type GetAcceptingBlockHashOfTxRequestMessage struct { - baseMessage - TxID string -} - -// Command returns the protocol command string for the message -func (msg *GetAcceptingBlockHashOfTxRequestMessage) Command() MessageCommand { - return CmdGetAcceptingBlockHashOfTxRequestMessage -} - -// NewGetAcceptingBlockHashOfTxRequest returns a instance of the message -func NewGetAcceptingBlockHashOfTxRequest(txID string) *GetAcceptingBlockHashOfTxRequestMessage { - return &GetAcceptingBlockHashOfTxRequestMessage{ - TxID: txID, - } -} - -// GetAcceptingBlockHashOfTxResponseMessage is an appmessage corresponding to -// its respective RPC message -type GetAcceptingBlockHashOfTxResponseMessage struct { - baseMessage - Hash string - - Error *RPCError -} - -// Command returns the protocol command string for the message -func (msg *GetAcceptingBlockHashOfTxResponseMessage) Command() MessageCommand { - return CmdGetAcceptingBlockHashOfTxResponseMessage -} - -// NewGetAcceptingBlockHashOfTxResponse returns an instance of the message -func NewGetAcceptingBlockHashOfTxResponse(hash string) *GetAcceptingBlockHashOfTxResponseMessage { - return &GetAcceptingBlockHashOfTxResponseMessage{ - Hash: hash, - } -} diff --git a/app/appmessage/rpc_get_accepting_blocks_of_txs.go b/app/appmessage/rpc_get_accepting_blocks_of_txs.go deleted file mode 100644 index 09b181cb84..0000000000 --- a/app/appmessage/rpc_get_accepting_blocks_of_txs.go +++ /dev/null @@ -1,50 +0,0 @@ -package appmessage - -// TxIDBlockPair is an appmessage corresponding to -// its respective RPC message -type TxIDBlockPair struct { - TxID string - Block *RPCBlock -} - -// GetAcceptingBlocksOfTxsRequestMessage is an appmessage corresponding to -// its respective RPC message -type GetAcceptingBlocksOfTxsRequestMessage struct { - baseMessage - TxIDs []string - IncludeTransactions bool -} - -// Command returns the protocol command string for the message -func (msg *GetAcceptingBlocksOfTxsRequestMessage) Command() MessageCommand { - return CmdGetAcceptingBlocksOfTxsRequestMessage -} - -// NewGetAcceptingBlocksOfTxsRequest returns a instance of the message -func NewGetAcceptingBlocksOfTxsRequest(txIDs []string, includeTransactions bool) *GetAcceptingBlocksOfTxsRequestMessage { - return &GetAcceptingBlocksOfTxsRequestMessage{ - TxIDs: txIDs, - IncludeTransactions: includeTransactions, - } -} - -// GetAcceptingBlocksOfTxsResponseMessage is an appmessage corresponding to -// its respective RPC message -type GetAcceptingBlocksOfTxsResponseMessage struct { - baseMessage - TxIDBlockPairs []*TxIDBlockPair - - Error *RPCError -} - -// Command returns the protocol command string for the message -func (msg *GetAcceptingBlocksOfTxsResponseMessage) Command() MessageCommand { - return CmdGetAcceptingBlocksOfTxsResponseMessage -} - -// NewGetAcceptingBlocksOfTxsResponse returns an instance of the message -func NewGetAcceptingBlocksOfTxsResponse(txIDBlockPairs []*TxIDBlockPair) *GetAcceptingBlocksOfTxsResponseMessage { - return &GetAcceptingBlocksOfTxsResponseMessage{ - TxIDBlockPairs: txIDBlockPairs, - } -} diff --git a/app/appmessage/rpc_get_including_block_of_tx.go b/app/appmessage/rpc_get_including_block_of_tx.go deleted file mode 100644 index 69399a00b5..0000000000 --- a/app/appmessage/rpc_get_including_block_of_tx.go +++ /dev/null @@ -1,43 +0,0 @@ -package appmessage - -// GetIncludingBlockOfTxRequestMessage is an appmessage corresponding to -// its respective RPC message -type GetIncludingBlockOfTxRequestMessage struct { - baseMessage - TxID string - IncludeTransactions bool -} - -// Command returns the protocol command string for the message -func (msg *GetIncludingBlockOfTxRequestMessage) Command() MessageCommand { - return CmdGetIncludingBlockOfTxRequestMessage -} - -// NewGetIncludingBlockOfTxRequest returns a instance of the message -func NewGetIncludingBlockOfTxRequest(txID string, includeTransactions bool) *GetIncludingBlockOfTxRequestMessage { - return &GetIncludingBlockOfTxRequestMessage{ - TxID: txID, - IncludeTransactions: includeTransactions, - } -} - -// GetIncludingBlockOfTxResponseMessage is an appmessage corresponding to -// its respective RPC message -type GetIncludingBlockOfTxResponseMessage struct { - baseMessage - Block *RPCBlock - - Error *RPCError -} - -// Command returns the protocol command string for the message -func (msg *GetIncludingBlockOfTxResponseMessage) Command() MessageCommand { - return CmdGetIncludingBlockOfTxResponseMessage -} - -// NewGetIncludingBlockOfTxResponse returns an instance of the message -func NewGetIncludingBlockOfTxResponse(block *RPCBlock) *GetIncludingBlockOfTxResponseMessage { - return &GetIncludingBlockOfTxResponseMessage{ - Block: block, - } -} diff --git a/app/appmessage/rpc_get_including_blockhash_of_tx.go b/app/appmessage/rpc_get_including_blockhash_of_tx.go deleted file mode 100644 index 71a86cf784..0000000000 --- a/app/appmessage/rpc_get_including_blockhash_of_tx.go +++ /dev/null @@ -1,41 +0,0 @@ -package appmessage - -// GetIncludingBlockHashOfTxRequestMessage is an appmessage corresponding to -// its respective RPC message -type GetIncludingBlockHashOfTxRequestMessage struct { - baseMessage - TxID string -} - -// Command returns the protocol command string for the message -func (msg *GetIncludingBlockHashOfTxRequestMessage) Command() MessageCommand { - return CmdGetIncludingBlockHashOfTxRequestMessage -} - -// NewGetIncludingBlockHashOfTxRequest returns a instance of the message -func NewGetIncludingBlockHashOfTxRequest(txID string) *GetIncludingBlockHashOfTxRequestMessage { - return &GetIncludingBlockHashOfTxRequestMessage{ - TxID: txID, - } -} - -// GetIncludingBlockHashOfTxResponseMessage is an appmessage corresponding to -// its respective RPC message -type GetIncludingBlockHashOfTxResponseMessage struct { - baseMessage - Hash string - - Error *RPCError -} - -// Command returns the protocol command string for the message -func (msg *GetIncludingBlockHashOfTxResponseMessage) Command() MessageCommand { - return CmdGetIncludingBlockHashOfTxResponseMessage -} - -// NewGetIncludingBlockHashOfTxResponse returns an instance of the message -func NewGetIncludingBlockHashOfTxResponse(hash string) *GetIncludingBlockHashOfTxResponseMessage { - return &GetIncludingBlockHashOfTxResponseMessage{ - Hash: hash, - } -} diff --git a/app/appmessage/rpc_get_including_blockhashes_of_txs.go b/app/appmessage/rpc_get_including_blockhashes_of_txs.go deleted file mode 100644 index 0315458d0c..0000000000 --- a/app/appmessage/rpc_get_including_blockhashes_of_txs.go +++ /dev/null @@ -1,41 +0,0 @@ -package appmessage - -// GetIncludingBlockHashesOfTxsRequestMessage is an appmessage corresponding to -// its respective RPC message -type GetIncludingBlockHashesOfTxsRequestMessage struct { - baseMessage - TxIDs []string -} - -// Command returns the protocol command string for the message -func (msg *GetIncludingBlockHashesOfTxsRequestMessage) Command() MessageCommand { - return CmdGetIncludingBlockHashesOfTxsRequestMessage -} - -// NewGetIncludingBlockHashesOfTxsRequest returns a instance of the message -func NewGetIncludingBlockHashesOfTxsRequest(txIDs []string) *GetIncludingBlockHashesOfTxsRequestMessage { - return &GetIncludingBlockHashesOfTxsRequestMessage{ - TxIDs: txIDs, - } -} - -// GetIncludingBlockHashesOfTxsResponseMessage is an appmessage corresponding to -// its respective RPC message -type GetIncludingBlockHashesOfTxsResponseMessage struct { - baseMessage - TxIDBlockHashPairs []*TxIDBlockHashPair - - Error *RPCError -} - -// Command returns the protocol command string for the message -func (msg *GetIncludingBlockHashesOfTxsResponseMessage) Command() MessageCommand { - return CmdGetIncludingBlockHashesOfTxsResponseMessage -} - -// NewGetIncludingBlockHashesOfTxsResponse returns an instance of the message -func NewGetIncludingBlockHashesOfTxsResponse(txIDBlockHashPairs []*TxIDBlockHashPair) *GetIncludingBlockHashesOfTxsResponseMessage { - return &GetIncludingBlockHashesOfTxsResponseMessage{ - TxIDBlockHashPairs: txIDBlockHashPairs, - } -} diff --git a/app/appmessage/rpc_get_including_blocks_of_txs.go b/app/appmessage/rpc_get_including_blocks_of_txs.go deleted file mode 100644 index 8e285edeea..0000000000 --- a/app/appmessage/rpc_get_including_blocks_of_txs.go +++ /dev/null @@ -1,43 +0,0 @@ -package appmessage - -// GetIncludingBlocksOfTxsRequestMessage is an appmessage corresponding to -// its respective RPC message -type GetIncludingBlocksOfTxsRequestMessage struct { - baseMessage - TxIDs []string - IncludeTransactions bool -} - -// Command returns the protocol command string for the message -func (msg *GetIncludingBlocksOfTxsRequestMessage) Command() MessageCommand { - return CmdGetIncludingBlocksOfTxsRequestMessage -} - -// NewGetIncludingBlocksOfTxsRequest returns a instance of the message -func NewGetIncludingBlocksOfTxsRequest(txIDs []string, includeTransactions bool) *GetIncludingBlocksOfTxsRequestMessage { - return &GetIncludingBlocksOfTxsRequestMessage{ - TxIDs: txIDs, - IncludeTransactions: includeTransactions, - } -} - -// GetIncludingBlocksOfTxsResponseMessage is an appmessage corresponding to -// its respective RPC message -type GetIncludingBlocksOfTxsResponseMessage struct { - baseMessage - TxIDBlockPairs []*TxIDBlockPair - - Error *RPCError -} - -// Command returns the protocol command string for the message -func (msg *GetIncludingBlocksOfTxsResponseMessage) Command() MessageCommand { - return CmdGetIncludingBlocksOfTxsResponseMessage -} - -// NewGetIncludingBlocksOfTxsResponse returns an instance of the message -func NewGetIncludingBlocksOfTxsResponse(txIDBlockPairs []*TxIDBlockPair) *GetIncludingBlocksOfTxsResponseMessage { - return &GetIncludingBlocksOfTxsResponseMessage{ - TxIDBlockPairs: txIDBlockPairs, - } -} diff --git a/app/appmessage/rpc_get_tx.go b/app/appmessage/rpc_get_tx.go deleted file mode 100644 index 1909168756..0000000000 --- a/app/appmessage/rpc_get_tx.go +++ /dev/null @@ -1,41 +0,0 @@ -package appmessage - -// GetTxRequestMessage is an appmessage corresponding to -// its respective RPC message -type GetTxRequestMessage struct { - baseMessage - TxID string -} - -// Command returns the protocol command string for the message -func (msg *GetTxRequestMessage) Command() MessageCommand { - return CmdGetTxRequestMessage -} - -// NewGetTxRequest returns a instance of the message -func NewGetTxRequest(txID string) *GetTxRequestMessage { - return &GetTxRequestMessage{ - TxID: txID, - } -} - -// GetTxResponseMessage is an appmessage corresponding to -// its respective RPC message -type GetTxResponseMessage struct { - baseMessage - Transaction *RPCTransaction - - Error *RPCError -} - -// Command returns the protocol command string for the message -func (msg *GetTxResponseMessage) Command() MessageCommand { - return CmdGetTxResponseMessage -} - -// NewGetTxResponse returns an instance of the message -func NewGetTxResponse(transaction *RPCTransaction) *GetTxResponseMessage { - return &GetTxResponseMessage{ - Transaction: transaction, - } -} diff --git a/app/appmessage/rpc_get_tx_confirmations.go b/app/appmessage/rpc_get_tx_confirmations.go deleted file mode 100644 index 44ddc90648..0000000000 --- a/app/appmessage/rpc_get_tx_confirmations.go +++ /dev/null @@ -1,41 +0,0 @@ -package appmessage - -// GetTxConfirmationsRequestMessage is an appmessage corresponding to -// its respective RPC message -type GetTxConfirmationsRequestMessage struct { - baseMessage - TxID string -} - -// Command returns the protocol command string for the message -func (msg *GetTxConfirmationsRequestMessage) Command() MessageCommand { - return CmdGetTxConfirmationsRequestMessage -} - -// NewGetTxConfirmationsRequest returns a instance of the message -func NewGetTxConfirmationsRequest(txID string) *GetTxConfirmationsRequestMessage { - return &GetTxConfirmationsRequestMessage{ - TxID: txID, - } -} - -// GetTxConfirmationsResponseMessage is an appmessage corresponding to -// its respective RPC message -type GetTxConfirmationsResponseMessage struct { - baseMessage - Confirmations int64 - - Error *RPCError -} - -// Command returns the protocol command string for the message -func (msg *GetTxConfirmationsResponseMessage) Command() MessageCommand { - return CmdGetTxConfirmationsResponseMessage -} - -// NewGetTxConfirmationsResponse returns an instance of the message -func NewGetTxConfirmationsResponse(confirmations int64) *GetTxConfirmationsResponseMessage { - return &GetTxConfirmationsResponseMessage{ - Confirmations: confirmations, - } -} From 735f9c29e01307dbc49f7b6bc8b24874de553c1f Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Sun, 16 Oct 2022 12:15:17 +0200 Subject: [PATCH 39/47] add to verbose data and getInfo --- app/appmessage/rpc_get_info.go | 7 +- ... => rpc_modify_notifying_addresses_txs.go} | 0 ...ify_notifying_txs_confirmation_changed.go} | 0 app/appmessage/rpc_submit_transaction.go | 3 + app/rpc/rpccontext/verbosedata.go | 20 + app/rpc/rpchandlers/get_info.go | 2 + domain/txindex/txindex.go | 47 + .../server/grpcserver/protowire/rpc.md | 23 +- .../server/grpcserver/protowire/rpc.pb.go | 1670 +++++++++-------- .../server/grpcserver/protowire/rpc.proto | 29 +- .../grpcserver/protowire/rpc_get_info.go | 4 + .../rpc_modify_notifying_addresses_txs.go | 4 + ...dify_notifying_txs_confirmation_changed.go | 4 + .../protowire/rpc_submit_transaction.go | 6 + 14 files changed, 977 insertions(+), 842 deletions(-) rename app/appmessage/{rpc_modify_notify_addresses_txs_params.go => rpc_modify_notifying_addresses_txs.go} (100%) rename app/appmessage/{rpc_modify_notify_txs_confirmation_changed_params.go => rpc_modify_notifying_txs_confirmation_changed.go} (100%) diff --git a/app/appmessage/rpc_get_info.go b/app/appmessage/rpc_get_info.go index 00c9882e7d..af7b4e0426 100644 --- a/app/appmessage/rpc_get_info.go +++ b/app/appmessage/rpc_get_info.go @@ -24,6 +24,8 @@ type GetInfoResponseMessage struct { MempoolSize uint64 ServerVersion string IsUtxoIndexed bool + IsTxIndexed bool + IsArchival bool IsSynced bool Error *RPCError @@ -35,12 +37,15 @@ func (msg *GetInfoResponseMessage) Command() MessageCommand { } // NewGetInfoResponseMessage returns a instance of the message -func NewGetInfoResponseMessage(p2pID string, mempoolSize uint64, serverVersion string, isUtxoIndexed bool, isSynced bool) *GetInfoResponseMessage { +func NewGetInfoResponseMessage(p2pID string, mempoolSize uint64, serverVersion string, isUtxoIndexed bool, + isTxIndexed bool, isArchival bool, isSynced bool) *GetInfoResponseMessage { return &GetInfoResponseMessage{ P2PID: p2pID, MempoolSize: mempoolSize, ServerVersion: serverVersion, IsUtxoIndexed: isUtxoIndexed, + IsTxIndexed: isTxIndexed, + IsArchival: isArchival, IsSynced: isSynced, } } diff --git a/app/appmessage/rpc_modify_notify_addresses_txs_params.go b/app/appmessage/rpc_modify_notifying_addresses_txs.go similarity index 100% rename from app/appmessage/rpc_modify_notify_addresses_txs_params.go rename to app/appmessage/rpc_modify_notifying_addresses_txs.go diff --git a/app/appmessage/rpc_modify_notify_txs_confirmation_changed_params.go b/app/appmessage/rpc_modify_notifying_txs_confirmation_changed.go similarity index 100% rename from app/appmessage/rpc_modify_notify_txs_confirmation_changed_params.go rename to app/appmessage/rpc_modify_notifying_txs_confirmation_changed.go diff --git a/app/appmessage/rpc_submit_transaction.go b/app/appmessage/rpc_submit_transaction.go index a39e7e5746..01a90b5af1 100644 --- a/app/appmessage/rpc_submit_transaction.go +++ b/app/appmessage/rpc_submit_transaction.go @@ -102,6 +102,9 @@ type RPCTransactionVerboseData struct { Mass uint64 BlockHash string BlockTime uint64 + TxIndexed bool + AcceptingBlockHash string + Confirmations uint32 } // RPCTransactionInputVerboseData holds data about a transaction input diff --git a/app/rpc/rpccontext/verbosedata.go b/app/rpc/rpccontext/verbosedata.go index e42d3ed8d3..7b3e5b99d6 100644 --- a/app/rpc/rpccontext/verbosedata.go +++ b/app/rpc/rpccontext/verbosedata.go @@ -128,6 +128,26 @@ func (ctx *Context) PopulateTransactionWithVerboseData( Hash: consensushashing.TransactionHash(domainTransaction).String(), Mass: domainTransaction.Mass, } + if ctx.Config.TXIndex { + acceptingBlockHash, foundAcceptingBlockHash, err := ctx.TXIndex.TXAcceptingBlockHash(domainTransaction.ID) + if err != nil { + return err + } + confirmations, foundConfirmations, err := ctx.TXIndex.GetTXConfirmations(domainTransaction.ID) + if err != nil { + return err + } + if !foundAcceptingBlockHash || !foundConfirmations { + transaction.VerboseData.TxIndexed = false + } else { + transaction.VerboseData.TxIndexed = true + transaction.VerboseData.AcceptingBlockHash = acceptingBlockHash.String() + transaction.VerboseData.Confirmations = uint32(confirmations) + } + } else { + transaction.VerboseData.TxIndexed = false + } + if domainBlockHeader != nil { transaction.VerboseData.BlockHash = consensushashing.HeaderHash(domainBlockHeader).String() transaction.VerboseData.BlockTime = uint64(domainBlockHeader.TimeInMilliseconds()) diff --git a/app/rpc/rpchandlers/get_info.go b/app/rpc/rpchandlers/get_info.go index 308e47615d..3c6cf5c5c8 100644 --- a/app/rpc/rpchandlers/get_info.go +++ b/app/rpc/rpchandlers/get_info.go @@ -19,6 +19,8 @@ func HandleGetInfo(context *rpccontext.Context, _ *router.Router, _ appmessage.M uint64(context.Domain.MiningManager().TransactionCount(true, false)), version.Version(), context.Config.UTXOIndex, + context.Config.TXIndex, + context.Config.IsArchivalNode, context.ProtocolManager.Context().HasPeers() && isNearlySynced, ) diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 19f4e91a3a..1c751c517a 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -249,6 +249,26 @@ func (ti *TXIndex) removeTXIDs(selectedParentChainChanges *externalapi.SelectedC return nil } +// TXAcceptingBlockHash returns the accepting block hash for for the given txID +func (ti *TXIndex) TXAcceptingBlockHash(txID *externalapi.DomainTransactionID) ( + acceptingBlockHash *externalapi.DomainHash, found bool, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlockHash") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + txData, found, err := ti.store.getTxData(txID) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + + return txData.AcceptingBlockHash, found, nil +} + // TXAcceptingBlockHashes returns the accepting block hashes for for the given txIDs func (ti *TXIndex) TXAcceptingBlockHashes(txIDs []*externalapi.DomainTransactionID) ( txIDsToAcceptingBlockHashes TxIDsToBlockHashes, missingTxIds []*externalapi.DomainTransactionID, err error) { @@ -305,6 +325,33 @@ func (ti *TXIndex) GetTXs(txIDs []*externalapi.DomainTransactionID) ( return txs, notFound, nil } +// GetTXConfirmations returns the tx confirmations for for the given txID +func (ti *TXIndex) GetTXConfirmations(txID *externalapi.DomainTransactionID) ( + confirmations int64, found bool, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTXConfirmations") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + txdata, found, err := ti.store.getTxData(txID) + if err != nil { + return 0, false, err + } + + acceptingBlockHeader, err := ti.domain.Consensus().GetBlockHeader(txdata.AcceptingBlockHash) + if err != nil { + return -1, false, err + } + + virtualBlock, err := ti.domain.Consensus().GetVirtualInfo() + if err != nil { + return 0, false, err + } + + return int64(virtualBlock.BlueScore - acceptingBlockHeader.BlueScore()), true, nil +} + // GetTXsConfirmations returns the tx confirmations for for the given txIDs func (ti *TXIndex) GetTXsConfirmations(txIDs []*externalapi.DomainTransactionID) ( txIDsToConfirmations TxIDsToConfirmations, notFound []*externalapi.DomainTransactionID, err error) { diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md index 12d9dcd443..4b24bdaf5e 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md @@ -376,6 +376,9 @@ Receivers of any ResponseMessage are expected to check whether its error field i | mass | [uint64](#uint64) | | | | blockHash | [string](#string) | | | | blockTime | [uint64](#uint64) | | | +| txIndexed | [bool](#bool) | | whether the transaction is stored in the txindex database. Kaspad must be started with the `--txindex` flag, for parameter to display. | +| acceptingBlockHash | [string](#string) | | Kaspad must be started with the `--txindex` flag, for parameter to display. | +| confirmations | [uint32](#uint32) | | Kaspad must be started with the `--txindex` flag for parameter to display. | @@ -1963,7 +1966,7 @@ See NotifyNewBlockTemplateRequestMessage ### GetAcceptingBlockHashesOfTxsRequestMessage -Kaspad most be started with the `--txindex` flag for this Request to work. +Kaspad must be started with the `--txindex` flag for this Request to work. | Field | Type | Label | Description | @@ -1994,7 +1997,7 @@ Kaspad most be started with the `--txindex` flag for this Request to work. ### GetTxsRequestMessage -Kaspad most be started with the `--txindex` flag for this Request to work. +Kaspad must be started with the `--txindex` flag for this Request to work. | Field | Type | Label | Description | @@ -2025,7 +2028,7 @@ Kaspad most be started with the `--txindex` flag for this Request to work. ### GetTxsConfirmationsRequestMessage -Kaspad most be started with the `--txindex` flag for this Request to work. +Kaspad must be started with the `--txindex` flag for this Request to work. | Field | Type | Label | Description | @@ -2057,7 +2060,7 @@ Kaspad most be started with the `--txindex` flag for this Request to work. ### NotifyTxsConfirmationChangedRequestMessage NotifyTxsConfirmationChangedRequstMessage is a listener that registers confirmations from supplied TxIDs -Kaspad most be started with the `--txindex` flag for this Request to work. +Kaspad must be started with the `--txindex` flag for this Request to work. | Field | Type | Label | Description | @@ -2109,13 +2112,13 @@ TxsConfirmationChangedNotificationMessage is the notification about txs pertaini ### ModifyNotifyingTxsConfirmationChangedRequestMessage ModifyNotifyingTxsConfirmationChangedRequestMessage modfies the params of a registered `NotifyTxsConfirmationChangedRequstMessage` -most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work +must be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| addTxIDs | [string](#string) | repeated | | -| removeTxIDs | [string](#string) | repeated | | +| addTxIDs | [string](#string) | repeated | add txIds to the notification stream | +| removeTxIDs | [string](#string) | repeated | remove txIds to the notification stream | | requiredConfirmations | [uint32](#uint32) | | | | includePending | [bool](#bool) | | | @@ -2210,13 +2213,13 @@ NotifyAddressesTxsChangedRequestMessage Listens for Txs pertaining to specified ### ModifyNotifyingAddressesTxsRequestMessage ModifyNotifyAddressesTxsParamsRequestMessage modifies the params used for a regesitered `NotifyAddressesTxsRequest` -Most be registered to NotifyAddressTxChangedRequestMessage for this command to work +Must be registered to NotifyAddressTxChangedRequestMessage for this command to work | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| AddAddresses | [string](#string) | repeated | | -| RemoveAddresses | [string](#string) | repeated | | +| AddAddresses | [string](#string) | repeated | add addresses to the notification stream | +| RemoveAddresses | [string](#string) | repeated | remove addresses to the notification stream | | requiredConfirmations | [uint32](#uint32) | | | | includePending | [bool](#bool) | | | | includeSending | [bool](#bool) | | | diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go index b9846c67cf..47193a5781 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go @@ -924,11 +924,14 @@ type RpcTransactionVerboseData struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TransactionId string `protobuf:"bytes,1,opt,name=transactionId,proto3" json:"transactionId,omitempty"` - Hash string `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"` - Mass uint64 `protobuf:"varint,4,opt,name=mass,proto3" json:"mass,omitempty"` - BlockHash string `protobuf:"bytes,12,opt,name=blockHash,proto3" json:"blockHash,omitempty"` - BlockTime uint64 `protobuf:"varint,14,opt,name=blockTime,proto3" json:"blockTime,omitempty"` + TransactionId string `protobuf:"bytes,1,opt,name=transactionId,proto3" json:"transactionId,omitempty"` + Hash string `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"` + Mass uint64 `protobuf:"varint,4,opt,name=mass,proto3" json:"mass,omitempty"` + BlockHash string `protobuf:"bytes,12,opt,name=blockHash,proto3" json:"blockHash,omitempty"` + BlockTime uint64 `protobuf:"varint,14,opt,name=blockTime,proto3" json:"blockTime,omitempty"` + TxIndexed bool `protobuf:"varint,15,opt,name=txIndexed,proto3" json:"txIndexed,omitempty"` //whether the transaction is stored in the txindex database. Kaspad must be started with the `--txindex` flag, for parameter to display. + AcceptingBlockHash string `protobuf:"bytes,16,opt,name=acceptingBlockHash,proto3" json:"acceptingBlockHash,omitempty"` // Kaspad must be started with the `--txindex` flag, for parameter to display. + Confirmations uint32 `protobuf:"varint,17,opt,name=confirmations,proto3" json:"confirmations,omitempty"` // Kaspad must be started with the `--txindex` flag for parameter to display. } func (x *RpcTransactionVerboseData) Reset() { @@ -998,6 +1001,27 @@ func (x *RpcTransactionVerboseData) GetBlockTime() uint64 { return 0 } +func (x *RpcTransactionVerboseData) GetTxIndexed() bool { + if x != nil { + return x.TxIndexed + } + return false +} + +func (x *RpcTransactionVerboseData) GetAcceptingBlockHash() string { + if x != nil { + return x.AcceptingBlockHash + } + return "" +} + +func (x *RpcTransactionVerboseData) GetConfirmations() uint32 { + if x != nil { + return x.Confirmations + } + return 0 +} + type RpcTransactionInputVerboseData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6380,7 +6404,7 @@ func (x *RpcTxIDBlockPair) GetBlock() *RpcBlock { return nil } -// Kaspad most be started with the `--txindex` flag for this Request to work. +// Kaspad must be started with the `--txindex` flag for this Request to work. type GetAcceptingBlockHashesOfTxsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6483,7 +6507,7 @@ func (x *GetAcceptingBlockHashesOfTxsResponseMessage) GetError() *RPCError { return nil } -// Kaspad most be started with the `--txindex` flag for this Request to work. +// Kaspad must be started with the `--txindex` flag for this Request to work. type GetTxsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6586,7 +6610,7 @@ func (x *GetTxsResponseMessage) GetError() *RPCError { return nil } -//Kaspad most be started with the `--txindex` flag for this Request to work. +// Kaspad must be started with the `--txindex` flag for this Request to work. type GetTxsConfirmationsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6690,7 +6714,7 @@ func (x *GetTxsConfirmationsResponseMessage) GetError() *RPCError { } // NotifyTxsConfirmationChangedRequstMessage is a listener that registers confirmations from supplied TxIDs -// Kaspad most be started with the `--txindex` flag for this Request to work. +// Kaspad must be started with the `--txindex` flag for this Request to work. type NotifyTxsConfirmationChangedRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6882,14 +6906,14 @@ func (x *TxsConfirmationChangedNotificationMessage) GetError() *RPCError { } // ModifyNotifyingTxsConfirmationChangedRequestMessage modfies the params of a registered `NotifyTxsConfirmationChangedRequstMessage` -// most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work +// must be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work type ModifyNotifyingTxsConfirmationChangedRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - AddTxIDs []string `protobuf:"bytes,1,rep,name=addTxIDs,proto3" json:"addTxIDs,omitempty"` - RemoveTxIDs []string `protobuf:"bytes,2,rep,name=removeTxIDs,proto3" json:"removeTxIDs,omitempty"` + AddTxIDs []string `protobuf:"bytes,1,rep,name=addTxIDs,proto3" json:"addTxIDs,omitempty"` //add txIds to the notification stream + RemoveTxIDs []string `protobuf:"bytes,2,rep,name=removeTxIDs,proto3" json:"removeTxIDs,omitempty"` //remove txIds to the notification stream RequiredConfirmations uint32 `protobuf:"varint,3,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` IncludePending bool `protobuf:"varint,4,opt,name=includePending,proto3" json:"includePending,omitempty"` } @@ -7247,14 +7271,14 @@ func (x *NotifyAddressesTxsResponseMessage) GetError() *RPCError { } // ModifyNotifyAddressesTxsParamsRequestMessage modifies the params used for a regesitered `NotifyAddressesTxsRequest` -// Most be registered to NotifyAddressTxChangedRequestMessage for this command to work +// Must be registered to NotifyAddressTxChangedRequestMessage for this command to work type ModifyNotifyingAddressesTxsRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - AddAddresses []string `protobuf:"bytes,1,rep,name=AddAddresses,proto3" json:"AddAddresses,omitempty"` - RemoveAddresses []string `protobuf:"bytes,2,rep,name=RemoveAddresses,proto3" json:"RemoveAddresses,omitempty"` + AddAddresses []string `protobuf:"bytes,1,rep,name=AddAddresses,proto3" json:"AddAddresses,omitempty"` //add addresses to the notification stream + RemoveAddresses []string `protobuf:"bytes,2,rep,name=RemoveAddresses,proto3" json:"RemoveAddresses,omitempty"` //remove addresses to the notification stream RequiredConfirmations uint32 `protobuf:"varint,3,opt,name=requiredConfirmations,proto3" json:"requiredConfirmations,omitempty"` IncludePending bool `protobuf:"varint,4,opt,name=includePending,proto3" json:"includePending,omitempty"` IncludeSending bool `protobuf:"varint,5,opt,name=includeSending,proto3" json:"includeSending,omitempty"` @@ -7601,7 +7625,7 @@ var file_rpc_proto_rawDesc = []byte{ 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x62, - 0x61, 0x73, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x19, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x73, 0x65, 0x22, 0x99, 0x02, 0x0a, 0x19, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, @@ -7611,854 +7635,862 @@ var file_rpc_proto_rawDesc = []byte{ 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x20, 0x0a, 0x1e, 0x52, - 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, - 0x75, 0x74, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x8b, 0x01, - 0x0a, 0x1f, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x30, 0x0a, 0x13, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x16, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x21, 0x0a, 0x1f, 0x47, - 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x76, - 0x0a, 0x20, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x74, 0x0a, 0x19, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2c, - 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x6f, 0x6e, 0x44, 0x41, 0x41, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x4e, 0x6f, 0x6e, 0x44, 0x41, 0x41, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x22, 0xdc, 0x01, 0x0a, - 0x1a, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x56, 0x0a, 0x0c, 0x72, - 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x0c, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0x3a, 0x0a, 0x0c, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, - 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x42, 0x4c, 0x4f, - 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, - 0x49, 0x53, 0x5f, 0x49, 0x4e, 0x5f, 0x49, 0x42, 0x44, 0x10, 0x02, 0x22, 0x5e, 0x0a, 0x1e, 0x47, - 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, - 0x0a, 0x70, 0x61, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, - 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x44, 0x61, 0x74, 0x61, 0x22, 0x94, 0x01, 0x0a, 0x1f, - 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, + 0x78, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x74, 0x78, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x12, 0x61, 0x63, 0x63, + 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, + 0x20, 0x0a, 0x1e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x22, 0x8b, 0x01, 0x0a, 0x1f, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x30, 0x0a, 0x13, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x13, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, + 0x21, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0x76, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x2a, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x74, 0x0a, 0x19, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x12, 0x2c, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x6f, 0x6e, 0x44, 0x41, + 0x41, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x6f, 0x6e, 0x44, 0x41, 0x41, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, + 0x22, 0xdc, 0x01, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, - 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, - 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x20, 0x0a, 0x1e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x4d, 0x0a, 0x1f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x56, 0x0a, 0x0c, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x0c, 0x72, 0x65, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x4a, 0x0a, 0x1d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, - 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, - 0x20, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0xf5, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x65, 0x73, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x0f, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, + 0x72, 0x6f, 0x72, 0x22, 0x3a, 0x0a, 0x0c, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x11, 0x0a, + 0x0d, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x01, + 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x53, 0x5f, 0x49, 0x4e, 0x5f, 0x49, 0x42, 0x44, 0x10, 0x02, 0x22, + 0x5e, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x44, 0x61, 0x74, 0x61, 0x22, + 0x94, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1a, + 0x0a, 0x08, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x20, 0x0a, 0x1e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x4d, 0x0a, 0x1f, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4a, 0x0a, 0x1d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x41, 0x64, 0x64, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x22, 0x20, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xf5, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, + 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4c, 0x0a, 0x09, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0f, 0x62, 0x61, - 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x2a, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x39, 0x0a, 0x23, 0x47, 0x65, 0x74, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x09, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x0f, 0x62, 0x61, 0x6e, 0x6e, 0x65, + 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x41, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x41, 0x64, 0x64, 0x72, 0x22, 0x22, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x79, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x53, + 0x52, 0x0f, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, + 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x39, 0x0a, + 0x23, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x41, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x41, 0x64, 0x64, 0x72, 0x22, 0x22, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, - 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x97, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, - 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, - 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x34, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x7b, 0x0a, - 0x1e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x2d, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, - 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x2a, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x85, 0x01, 0x0a, 0x1f, 0x47, - 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2c, - 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, - 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x34, 0x0a, 0x15, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, - 0x6f, 0x6c, 0x22, 0x81, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, - 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x79, 0x0a, 0x0c, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, - 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x4f, 0x72, 0x70, 0x68, 0x61, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4f, 0x72, 0x70, 0x68, 0x61, - 0x6e, 0x22, 0x24, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x3c, 0x0a, 0x05, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x2a, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xd3, 0x02, 0x0a, 0x1b, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, - 0x66, 0x6f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6c, - 0x61, 0x73, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, - 0x1e, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, - 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x3c, 0x0a, - 0x19, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x19, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x74, - 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x49, 0x62, 0x64, 0x50, 0x65, 0x65, 0x72, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x49, 0x62, 0x64, 0x50, 0x65, 0x65, 0x72, 0x22, - 0x53, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x61, - 0x6e, 0x65, 0x6e, 0x74, 0x22, 0x44, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x79, 0x0a, 0x21, + 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, + 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, + 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x97, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x4d, + 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x2c, 0x0a, + 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, + 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x34, 0x0a, 0x15, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, + 0x6c, 0x22, 0x7b, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, + 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x85, + 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, + 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, + 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, + 0x12, 0x34, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x81, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x65, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x80, 0x01, 0x0a, 0x1f, 0x53, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, - 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x61, - 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x22, 0x74, 0x0a, - 0x20, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x7d, 0x0a, 0x35, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, - 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x1d, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x63, 0x63, 0x65, - 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x73, 0x22, 0x64, 0x0a, 0x36, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, - 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x81, 0x02, 0x0a, 0x34, 0x56, 0x69, 0x72, - 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x38, 0x0a, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x61, - 0x64, 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x61, 0x64, 0x64, 0x65, - 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, - 0x73, 0x12, 0x59, 0x0a, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x63, - 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x73, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, 0x5e, 0x0a, 0x16, - 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x30, 0x0a, 0x13, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x70, 0x0a, 0x17, - 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, + 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x79, 0x0a, 0x0c, 0x4d, 0x65, + 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x65, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x3b, 0x0a, 0x0b, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, + 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x4f, + 0x72, 0x70, 0x68, 0x61, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4f, + 0x72, 0x70, 0x68, 0x61, 0x6e, 0x22, 0x24, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x23, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x3c, 0x0a, 0x05, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, + 0x6e, 0x66, 0x6f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x6e, 0x66, 0x6f, + 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, + 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xd3, 0x02, + 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, + 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x50, + 0x69, 0x6e, 0x67, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x44, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x4f, 0x75, 0x74, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, + 0x74, 0x12, 0x3c, 0x0a, 0x19, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x19, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x24, 0x0a, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x49, 0x62, 0x64, 0x50, 0x65, + 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x49, 0x62, 0x64, 0x50, + 0x65, 0x65, 0x72, 0x22, 0x53, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x50, 0x65, 0x72, 0x6d, + 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x50, + 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x22, 0x44, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x50, + 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x41, - 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, - 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, - 0x64, 0x22, 0x66, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2a, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x9a, 0x01, 0x0a, 0x34, 0x47, 0x65, - 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, + 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x80, + 0x01, 0x0a, 0x1f, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x20, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x70, 0x68, 0x61, + 0x6e, 0x22, 0x74, 0x0a, 0x20, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x7d, 0x0a, 0x35, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x16, 0x41, 0x63, 0x63, 0x65, 0x70, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, 0x64, 0x0a, 0x36, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x81, 0x02, 0x0a, + 0x34, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, + 0x34, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, + 0x61, 0x64, 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, + 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, + 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, + 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, + 0x22, 0x5e, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, + 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x30, + 0x0a, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x22, 0x70, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, + 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x41, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x22, 0x66, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, + 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x9a, 0x01, + 0x0a, 0x34, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, + 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, + 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x48, 0x61, 0x73, 0x68, 0x12, 0x44, 0x0a, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x16, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, + 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x12, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x36, 0x0a, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, + 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, 0xae, 0x02, + 0x0a, 0x35, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, + 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, + 0x73, 0x12, 0x34, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x15, 0x61, 0x64, 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x61, - 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, - 0x68, 0x12, 0x36, 0x0a, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x22, 0xae, 0x02, 0x0a, 0x35, 0x47, 0x65, - 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x34, 0x0a, - 0x15, 0x61, 0x64, 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x61, 0x64, - 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, - 0x68, 0x65, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2a, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x8b, 0x01, 0x0a, 0x17, 0x47, - 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x6f, 0x77, 0x48, 0x61, 0x73, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x6f, 0x77, 0x48, 0x61, 0x73, 0x68, - 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x06, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x8c, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, + 0x70, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x1f, - 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x9e, 0x03, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, + 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x8b, + 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x6f, + 0x77, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x6f, 0x77, + 0x48, 0x61, 0x73, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x95, 0x01, 0x0a, + 0x18, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x06, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x8c, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x70, 0x48, 0x61, 0x73, - 0x68, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x70, 0x48, 0x61, - 0x73, 0x68, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, - 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, - 0x75, 0x6c, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x64, 0x69, - 0x61, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x61, - 0x73, 0x74, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x13, - 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, - 0x68, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x76, 0x69, 0x72, 0x74, 0x75, - 0x61, 0x6c, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x2a, - 0x0a, 0x10, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x48, 0x61, - 0x73, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, - 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x28, 0x0a, 0x0f, 0x76, 0x69, - 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, + 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x1f, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, + 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x9e, 0x03, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, + 0x70, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x74, + 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, + 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x64, 0x69, + 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x61, 0x73, 0x74, + 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0e, 0x70, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x30, 0x0a, 0x13, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x76, + 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, + 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, + 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x28, + 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, + 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x55, 0x0a, 0x25, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, + 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, + 0x11, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, + 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, + 0x74, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x22, 0x54, 0x0a, 0x26, 0x52, + 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, + 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x27, 0x0a, 0x25, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, + 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x54, 0x0a, 0x26, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, + 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0x55, 0x0a, 0x25, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x69, 0x6e, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x22, 0x54, 0x0a, 0x26, 0x52, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, - 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x22, 0x55, 0x0a, 0x23, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, + 0x6c, 0x69, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x76, 0x69, 0x6f, 0x6c, 0x61, + 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x12, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x22, 0x5b, 0x0a, 0x2b, 0x46, 0x69, 0x6e, 0x61, 0x6c, + 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, + 0x74, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x11, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x48, 0x61, 0x73, 0x68, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x45, + 0x0a, 0x17, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x70, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, + 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x41, 0x73, 0x63, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x41, 0x73, + 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x61, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x2a, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x40, 0x0a, 0x20, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x4f, 0x0a, 0x21, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, - 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x27, 0x0a, - 0x25, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, - 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x54, 0x0a, 0x26, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x55, 0x0a, 0x23, - 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x12, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x61, 0x73, 0x68, 0x22, 0x5b, 0x0a, 0x2b, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, - 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, - 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, - 0x22, 0x18, 0x0a, 0x16, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x45, 0x0a, 0x17, 0x53, 0x68, - 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x70, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x41, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x41, 0x73, 0x63, 0x65, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x22, 0x61, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x40, 0x0a, 0x20, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x95, 0x01, + 0x0a, 0x1f, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x36, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x55, 0x74, 0x78, + 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x22, 0x9c, 0x01, 0x0a, 0x15, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, + 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x32, 0x0a, 0x08, 0x6f, 0x75, 0x74, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x4f, 0x75, 0x74, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x52, 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x35, 0x0a, + 0x09, 0x75, 0x74, 0x78, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, + 0x55, 0x74, 0x78, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x75, 0x74, 0x78, 0x6f, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x22, 0x47, 0x0a, 0x27, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x56, 0x0a, + 0x28, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, 0x74, + 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x41, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, + 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x4f, 0x0a, 0x21, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x95, 0x01, 0x0a, 0x1f, 0x55, 0x74, - 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, - 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, - 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x64, 0x22, 0x9c, 0x01, 0x0a, 0x15, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x32, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, - 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x09, 0x75, 0x74, 0x78, - 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x55, 0x74, 0x78, 0x6f, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x75, 0x74, 0x78, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x22, 0x47, 0x0a, 0x27, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, - 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x56, 0x0a, 0x28, 0x53, 0x74, 0x6f, - 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x41, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x22, 0x8c, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x55, 0x74, 0x78, 0x6f, - 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x65, - 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, - 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x22, 0x6a, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x44, - 0x0a, 0x24, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x18, - 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x90, - 0x01, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, - 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x31, 0x0a, 0x2f, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, - 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x7c, 0x0a, 0x30, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, - 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x75, 0x65, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x62, 0x6c, 0x75, - 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x8c, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, + 0x55, 0x74, 0x78, 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x3a, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x55, 0x74, 0x78, + 0x6f, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x42, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x6a, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x62, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x44, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x42, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x62, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x3b, 0x0a, 0x39, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, + 0x6f, 0x72, 0x22, 0x90, 0x01, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x07, + 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x31, 0x0a, 0x2f, 0x47, 0x65, 0x74, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x68, 0x0a, 0x3a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, - 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x82, 0x01, 0x0a, 0x38, 0x56, 0x69, + 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x7c, 0x0a, 0x30, 0x47, 0x65, 0x74, 0x56, + 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x62, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x62, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3b, 0x0a, 0x39, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x68, 0x0a, 0x3a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, + 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, + 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x82, 0x01, + 0x0a, 0x38, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x1e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x1e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, - 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, - 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1e, - 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x2c, - 0x0a, 0x2a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, - 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x59, 0x0a, 0x2b, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x55, 0x0a, 0x29, 0x56, 0x69, 0x72, 0x74, 0x75, - 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, - 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x76, - 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x31, - 0x0a, 0x2f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, - 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x5e, 0x0a, 0x30, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, 0x69, - 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, - 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x30, 0x0a, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x38, 0x0a, 0x36, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x65, 0x0a, - 0x37, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, - 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, - 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x23, 0x0a, 0x11, 0x42, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x22, 0x40, 0x0a, 0x12, 0x42, 0x61, 0x6e, + 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x1e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x22, 0x2c, 0x0a, 0x2a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, + 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x59, 0x0a, 0x2b, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, + 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x25, 0x0a, 0x13, 0x55, - 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x70, 0x22, 0x42, 0x0a, 0x14, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x55, 0x0a, 0x29, 0x56, + 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, + 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x61, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x22, 0x31, 0x0a, 0x2f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, 0x72, 0x75, 0x6e, + 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, + 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x5e, 0x0a, 0x30, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x50, + 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, + 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x30, 0x0a, 0x2e, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, + 0x72, 0x69, 0x64, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x38, 0x0a, 0x36, 0x53, 0x74, 0x6f, 0x70, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, + 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x65, 0x0a, 0x37, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, + 0x6e, 0x67, 0x50, 0x72, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x54, + 0x58, 0x4f, 0x53, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x23, 0x0a, 0x11, 0x42, 0x61, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x22, 0x40, 0x0a, + 0x12, 0x42, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, + 0x25, 0x0a, 0x13, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x22, 0x42, 0x0a, 0x14, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, + 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0xe4, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x70, 0x32, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, + 0x32, 0x70, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53, + 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x70, 0x6f, + 0x6f, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, + 0x69, 0x73, 0x55, 0x74, 0x78, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x73, 0x55, 0x74, 0x78, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x12, 0x2a, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x27, 0x47, 0x65, + 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, + 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x6a, 0x0a, 0x28, 0x47, 0x65, 0x74, + 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, + 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x6c, 0x0a, 0x2c, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, + 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, + 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, + 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, + 0x77, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, + 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, + 0x61, 0x73, 0x68, 0x22, 0x93, 0x01, 0x0a, 0x2d, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, + 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, + 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x12, 0x2a, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x26, 0x0a, 0x24, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x53, 0x0a, 0x25, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0xe4, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x32, - 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x32, 0x70, 0x49, 0x64, - 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x73, 0x55, 0x74, - 0x78, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0d, 0x69, 0x73, 0x55, 0x74, 0x78, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, - 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, - 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x6a, 0x0a, 0x28, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, - 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, - 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x6c, 0x0a, 0x2c, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x69, 0x7a, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x69, 0x7a, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x22, - 0x93, 0x01, 0x0a, 0x2d, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x36, 0x0a, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, - 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, - 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x26, 0x0a, 0x24, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, - 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x53, 0x0a, - 0x25, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x25, 0x0a, 0x23, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x9b, 0x01, + 0x0a, 0x15, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x31, 0x0a, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, + 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x73, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x12, 0x35, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, + 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x22, 0xae, 0x01, 0x0a, 0x2a, + 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, + 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, + 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x34, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x95, 0x01, 0x0a, + 0x2b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, + 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x07, + 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, + 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, + 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, + 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x92, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, + 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x6f, 0x6d, 0x70, 0x69, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x6f, 0x6d, 0x70, 0x69, + 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x53, + 0x6f, 0x6d, 0x70, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x63, 0x69, 0x72, 0x63, + 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x12, 0x2a, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x54, 0x0a, 0x18, 0x52, 0x70, 0x63, 0x54, + 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3e, + 0x0a, 0x14, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, + 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x61, + 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x48, 0x61, 0x73, 0x68, 0x22, 0x51, + 0x0a, 0x10, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, + 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x22, 0x42, 0x0a, 0x2a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, + 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, + 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x2b, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, + 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, + 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4f, 0x0a, 0x12, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, + 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, + 0x69, 0x72, 0x52, 0x12, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, + 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x25, 0x0a, 0x23, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x9b, 0x01, 0x0a, 0x15, 0x4d, 0x65, - 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x31, 0x0a, - 0x07, 0x73, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, - 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x12, 0x35, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x72, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x22, 0xae, 0x01, 0x0a, 0x2a, 0x47, 0x65, 0x74, 0x4d, - 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, - 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, - 0x6f, 0x6c, 0x12, 0x34, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x95, 0x01, 0x0a, 0x2b, 0x47, 0x65, 0x74, - 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x65, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, + 0x6f, 0x72, 0x22, 0x2c, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, + 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, + 0x22, 0x82, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x39, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, + 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, + 0x22, 0xad, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5b, 0x0a, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x16, 0x74, 0x78, + 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, + 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x92, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x12, 0x2a, 0x0a, 0x10, - 0x63, 0x69, 0x72, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x6d, 0x70, 0x69, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6c, 0x61, 0x74, - 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x54, 0x0a, 0x18, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, - 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x74, 0x78, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3e, 0x0a, 0x14, 0x52, 0x70, - 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, - 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x48, 0x61, 0x73, 0x68, 0x22, 0x51, 0x0a, 0x10, 0x52, 0x70, - 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, - 0x49, 0x44, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, - 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x42, 0x0a, - 0x2a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, - 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, - 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x2b, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, - 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, - 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x4f, 0x0a, 0x12, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, - 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x52, 0x12, - 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, - 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, + 0x22, 0xa0, 0x01, 0x0a, 0x2a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, + 0x54, 0x78, 0x49, 0x44, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x22, 0x59, 0x0a, 0x2b, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2c, - 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0x82, 0x01, 0x0a, - 0x15, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0x39, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0xad, 0x01, 0x0a, - 0x22, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x5b, 0x0a, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, + 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xbb, + 0x02, 0x0a, 0x29, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x12, 0x41, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, + 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xa0, 0x01, 0x0a, - 0x2a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, - 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xd1, 0x01, 0x0a, + 0x33, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, + 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x64, 0x64, 0x54, 0x78, 0x49, 0x44, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x61, 0x64, 0x64, 0x54, 0x78, 0x49, 0x44, 0x73, + 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x78, 0x49, + 0x44, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x22, 0x62, 0x0a, 0x34, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x69, 0x6e, 0x67, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x66, 0x0a, 0x10, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, + 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x80, 0x01, 0x0a, + 0x14, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x52, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x22, + 0xf2, 0x01, 0x0a, 0x20, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x69, 0x6e, 0x67, 0x22, 0x4f, 0x0a, 0x21, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xab, 0x02, 0x0a, 0x29, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x41, 0x64, 0x64, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, - 0x59, 0x0a, 0x2b, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xbb, 0x02, 0x0a, 0x29, 0x54, - 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3d, - 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, - 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x50, 0x61, 0x69, 0x72, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, - 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, - 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, - 0x12, 0x2a, 0x0a, 0x10, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x54, - 0x78, 0x49, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x75, 0x6e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xd1, 0x01, 0x0a, 0x33, 0x4d, 0x6f, 0x64, - 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x73, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x64, 0x64, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x61, 0x64, 0x64, 0x54, 0x78, 0x49, 0x44, 0x73, 0x12, 0x20, 0x0a, 0x0b, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x78, 0x49, 0x44, 0x73, 0x12, 0x34, - 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, - 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x62, 0x0a, 0x34, - 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x54, - 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0x66, 0x0a, 0x10, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, - 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x54, 0x78, 0x45, - 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x04, 0x73, 0x65, - 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x22, 0xf2, 0x01, 0x0a, 0x20, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, - 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x34, - 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, - 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0e, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, - 0x22, 0x4f, 0x0a, 0x21, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x22, 0xab, 0x02, 0x0a, 0x29, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x69, 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x22, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x41, 0x64, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x34, 0x0a, - 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0e, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x22, - 0x58, 0x0a, 0x2a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, - 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x94, 0x02, 0x0a, 0x1f, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, - 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x39, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x3d, - 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, - 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x41, 0x0a, - 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, - 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x52, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, - 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, - 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, + 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x2a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, + 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, + 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x94, 0x02, + 0x0a, 0x1f, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x39, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x12, 0x3d, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, + 0x64, 0x12, 0x41, 0x0a, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x65, 0x64, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, + 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto index 4cb26c4acb..2a77b77f39 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto @@ -105,6 +105,9 @@ message RpcTransactionVerboseData{ uint64 mass = 4; string blockHash = 12; uint64 blockTime = 14; + bool txIndexed = 15; //whether the transaction is stored in the txindex database, regardless if kaspad is run with the `--txindex` flag, or not. + string acceptingBlockHash = 16; // Kaspad must be started with the `--txindex` flag, for parameter to display. + uint32 confirmations = 17; // Kaspad must be started with the `--txindex` flag for parameter to display. } message RpcTransactionInputVerboseData{ @@ -662,7 +665,10 @@ message GetInfoResponseMessage{ uint64 mempoolSize = 2; string serverVersion = 3; bool isUtxoIndexed = 4; - bool isSynced = 5; + bool isTxIndexed = 5; + bool isArchival = 6; + bool isSynced = 7; + RPCError error = 1000; } @@ -749,7 +755,7 @@ message RpcTxIDBlockPair { RpcBlock block = 2; } -// Kaspad most be started with the `--txindex` flag for this Request to work. +// Kaspad must be started with the `--txindex` flag for this Request to work. message GetAcceptingBlockHashesOfTxsRequestMessage{ repeated string txIDs = 1; } @@ -759,7 +765,7 @@ message GetAcceptingBlockHashesOfTxsResponseMessage{ RPCError error = 1000; } -// Kaspad most be started with the `--txindex` flag for this Request to work. +// Kaspad must be started with the `--txindex` flag for this Request to work. message GetTxsRequestMessage{ repeated string txIDs = 1; } @@ -772,7 +778,7 @@ message GetTxsResponseMessage{ } -//Kaspad most be started with the `--txindex` flag for this Request to work. +// Kaspad must be started with the `--txindex` flag for this Request to work. message GetTxsConfirmationsRequestMessage{ repeated string txIDs = 1; } @@ -784,7 +790,7 @@ message GetTxsConfirmationsResponseMessage{ } // NotifyTxsConfirmationChangedRequstMessage is a listener that registers confirmations from supplied TxIDs -// Kaspad most be started with the `--txindex` flag for this Request to work. +// Kaspad must be started with the `--txindex` flag for this Request to work. message NotifyTxsConfirmationChangedRequestMessage{ repeated string TxIDs = 1; //initial TxIds to listen for when regestering for notifications @@ -809,10 +815,10 @@ message TxsConfirmationChangedNotificationMessage{ } // ModifyNotifyingTxsConfirmationChangedRequestMessage modfies the params of a registered `NotifyTxsConfirmationChangedRequstMessage` -// most be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work +// must be registered to NotifyTxsConfirmationChangedRequstMessage for this command to work message ModifyNotifyingTxsConfirmationChangedRequestMessage{ - repeated string addTxIDs = 1; - repeated string removeTxIDs = 2; + repeated string addTxIDs = 1; //add txIds to the notification stream + repeated string removeTxIDs = 2; //remove txIds to the notification stream uint32 requiredConfirmations = 3; bool includePending = 4; } @@ -842,15 +848,14 @@ message NotifyAddressesTxsRequestMessage{ } message NotifyAddressesTxsResponseMessage{ - RPCError error = 1000; } // ModifyNotifyAddressesTxsParamsRequestMessage modifies the params used for a regesitered `NotifyAddressesTxsRequest` -// Most be registered to NotifyAddressTxChangedRequestMessage for this command to work +// Must be registered to NotifyAddressTxChangedRequestMessage for this command to work message ModifyNotifyingAddressesTxsRequestMessage{ - repeated string AddAddresses = 1; - repeated string RemoveAddresses = 2; + repeated string AddAddresses = 1; //add addresses to the notification stream + repeated string RemoveAddresses = 2; //remove addresses to the notification stream uint32 requiredConfirmations = 3; bool includePending = 4; bool includeSending = 5; diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_info.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_info.go index a75f07dd73..63a0d070ac 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_info.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_info.go @@ -31,6 +31,8 @@ func (x *KaspadMessage_GetInfoResponse) fromAppMessage(message *appmessage.GetIn ServerVersion: message.ServerVersion, MempoolSize: message.MempoolSize, IsUtxoIndexed: message.IsUtxoIndexed, + IsTxIndexed: message.IsTxIndexed; + IsArchival: message.IsArchival; IsSynced: message.IsSynced, Error: err, } @@ -56,6 +58,8 @@ func (x *GetInfoResponseMessage) toAppMessage() (appmessage.Message, error) { MempoolSize: x.MempoolSize, ServerVersion: x.ServerVersion, IsUtxoIndexed: x.IsUtxoIndexed, + IsTxIndexed: x.IsTxIndexed; + IsArchival: x.IsArchival; IsSynced: x.IsSynced, Error: rpcErr, diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_addresses_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_addresses_txs.go index 29a5806dee..33904e1105 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_addresses_txs.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_addresses_txs.go @@ -14,6 +14,8 @@ func (x *KaspadMessage_ModifyNotifyingAddressesTxsRequest) toAppMessage() (appme func (x *KaspadMessage_ModifyNotifyingAddressesTxsRequest) fromAppMessage(message *appmessage.ModifyNotifyingAddressesTxsRequestMessage) error { x.ModifyNotifyingAddressesTxsRequest = &ModifyNotifyingAddressesTxsRequestMessage{ + AddAddresses: message.AddAddresses, + RemoveAddresses: message.RemoveAddresses, RequiredConfirmations: message.RequiredConfirmations, IncludePending: message.IncludePending, IncludeSending: message.IncludeSending, @@ -27,6 +29,8 @@ func (x *ModifyNotifyingAddressesTxsRequestMessage) toAppMessage() (appmessage.M return nil, errors.Wrapf(errorNil, "ModifyNotifyingAddressesTxsRequestMessage is nil") } return &appmessage.ModifyNotifyingAddressesTxsRequestMessage{ + AddAddresses: x.AddAddresses, + RemoveAddresses: x.RemoveAddresses, RequiredConfirmations: x.RequiredConfirmations, IncludePending: x.IncludePending, IncludeSending: x.IncludeSending, diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_txs_confirmation_changed.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_txs_confirmation_changed.go index 353e0127b9..d3f85ff7dd 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_txs_confirmation_changed.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_txs_confirmation_changed.go @@ -14,6 +14,8 @@ func (x *KaspadMessage_ModifyNotifyingTxsConfirmationChangedRequest) toAppMessag func (x *KaspadMessage_ModifyNotifyingTxsConfirmationChangedRequest) fromAppMessage(message *appmessage.ModifyNotifyingTxsConfirmationChangedRequestMessage) error { x.ModifyNotifyingTxsConfirmationChangedRequest = &ModifyNotifyingTxsConfirmationChangedRequestMessage{ + AddTxIDs: message.AddTxIDs, + RemoveTxIDs: message.RemoveTxIDs, RequiredConfirmations: message.RequiredConfirmations, IncludePending: message.IncludePending, } @@ -25,6 +27,8 @@ func (x *ModifyNotifyingTxsConfirmationChangedRequestMessage) toAppMessage() (ap return nil, errors.Wrapf(errorNil, "ModifyNotifyingTxsConfirmationChangedRequestMessage is nil") } return &appmessage.ModifyNotifyingTxsConfirmationChangedRequestMessage{ + AddTxIDs: x.AddTxIDs, + RemoveTxIDs: x.RemoveTxIDs, RequiredConfirmations: x.RequiredConfirmations, IncludePending: x.IncludePending, }, nil diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_submit_transaction.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_submit_transaction.go index 292eb02a7c..6741481f02 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_submit_transaction.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_submit_transaction.go @@ -299,6 +299,9 @@ func (x *RpcTransactionVerboseData) toAppMessage() (*appmessage.RPCTransactionVe Mass: x.Mass, BlockHash: x.BlockHash, BlockTime: x.BlockTime, + TxIndexed: x.TxIndexed, + AcceptingBlockHash: x.AcceptingBlockHash, + Confirmations: x.Confirmations, }, nil } @@ -309,6 +312,9 @@ func (x *RpcTransactionVerboseData) fromAppMessage(message *appmessage.RPCTransa Mass: message.Mass, BlockHash: message.BlockHash, BlockTime: message.BlockTime, + TxIndexed: message.TxIndexed, + AcceptingBlockHash: message.AcceptingBlockHash, + Confirmations: message.Confirmations, } } From d6f0a16ebd6d8c9dccc1d3034577e8ef8817f682 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Sun, 16 Oct 2022 12:22:14 +0200 Subject: [PATCH 40/47] handle error properly --- app/rpc/rpccontext/verbosedata.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/rpc/rpccontext/verbosedata.go b/app/rpc/rpccontext/verbosedata.go index 7b3e5b99d6..af4161322b 100644 --- a/app/rpc/rpccontext/verbosedata.go +++ b/app/rpc/rpccontext/verbosedata.go @@ -8,6 +8,7 @@ import ( difficultyPackage "github.com/kaspanet/kaspad/util/difficulty" "github.com/pkg/errors" + "github.com/kaspanet/kaspad/domain/consensus/database" "github.com/kaspanet/kaspad/domain/consensus/utils/hashes" "github.com/kaspanet/kaspad/domain/consensus/utils/txscript" @@ -131,11 +132,16 @@ func (ctx *Context) PopulateTransactionWithVerboseData( if ctx.Config.TXIndex { acceptingBlockHash, foundAcceptingBlockHash, err := ctx.TXIndex.TXAcceptingBlockHash(domainTransaction.ID) if err != nil { + if !database.IsNotFoundError(err) { + return err + } return err } confirmations, foundConfirmations, err := ctx.TXIndex.GetTXConfirmations(domainTransaction.ID) if err != nil { - return err + if !database.IsNotFoundError(err) { + return err + } } if !foundAcceptingBlockHash || !foundConfirmations { transaction.VerboseData.TxIndexed = false @@ -147,7 +153,7 @@ func (ctx *Context) PopulateTransactionWithVerboseData( } else { transaction.VerboseData.TxIndexed = false } - + if domainBlockHeader != nil { transaction.VerboseData.BlockHash = consensushashing.HeaderHash(domainBlockHeader).String() transaction.VerboseData.BlockTime = uint64(domainBlockHeader.TimeInMilliseconds()) From f6d149352d7f94dc5fc883731d341d7596bd8889 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Sun, 16 Oct 2022 13:03:06 +0200 Subject: [PATCH 41/47] set-up app messages for notifications --- app/appmessage/message.go | 24 +++-- .../rpc_modify_notifying_addresses_txs.go | 47 ++++++++++ ...dify_notifying_txs_confirmation_changed.go | 42 +++++++++ app/appmessage/rpc_notify_addresses_txs.go | 88 +++++++++++++++++++ .../rpc_notify_txs_confirmation_changed.go | 71 ++++++++------- .../rpc_start_notify_addresses_txs.go | 47 ---------- ...c_start_notify_txs_confirmation_changed.go | 47 ---------- .../rpc_stop_notify_addresses_txs.go | 47 ---------- ...pc_stop_notify_txs_confirmation_changed.go | 47 ---------- 9 files changed, 234 insertions(+), 226 deletions(-) delete mode 100644 app/appmessage/rpc_start_notify_addresses_txs.go delete mode 100644 app/appmessage/rpc_start_notify_txs_confirmation_changed.go delete mode 100644 app/appmessage/rpc_stop_notify_addresses_txs.go delete mode 100644 app/appmessage/rpc_stop_notify_txs_confirmation_changed.go diff --git a/app/appmessage/message.go b/app/appmessage/message.go index bad7336ba2..1647aa2a5e 100644 --- a/app/appmessage/message.go +++ b/app/appmessage/message.go @@ -171,12 +171,14 @@ const ( CmdGetTxsConfirmationsResponseMessage CmdNotifyTxsConfirmationChangedRequestMessage CmdNotifyTxsConfirmationChangedResponseMessage - CmdStartNotifyingTxsConfirmationChangedRequestMessage - CmdStartNotifyingTxsConfirmationChangedResponseMessage - CmdStopNotifyingTxsConfirmationChangedRequestMessage - CmdStopNotifyingTxsConfirmationChangedResponseMessage - CmdModifyNotifyTxsConfirmationChangedParamsRequestMessage - CmdModifyNotifyTxsConfirmationChangedParamsResponseMessage + CmdModifyNotifyingTxsConfirmationChangedRequestMessage + CmdModifyNotifyingTxsConfirmationChangedResponseMessage + CmdTxsConfirmationChangedNotificationMessage + CmdNotifyAddressesTxsRequestMessage + CmdNotifyAddressesTxsResponseMessage + CmdModifyNotifyingAddressesTxsRequestMessage + CmdModifyNotifyingAddressesTxsResponseMessage + CmdAddressesTxsNotificationMessage ) // ProtocolMessageCommandToString maps all MessageCommands to their string representation @@ -320,6 +322,16 @@ var RPCMessageCommandToString = map[MessageCommand]string{ CmdGetTxsResponseMessage: "GetTxsResponse", CmdGetTxsConfirmationsRequestMessage: "GetTxsConfirmationsRequest", CmdGetTxsConfirmationsResponseMessage: "GetTxsConfirmationsResponse", + CmdNotifyTxsConfirmationChangedRequestMessage: "NotifyTxsConfirmationChangedRequest", + CmdNotifyTxsConfirmationChangedResponseMessage: "ModifyNotifyingTxsConfirmationChangedRequest", + CmdModifyNotifyingTxsConfirmationChangedRequestMessage: "ModifyNotifyingTxsConfirmationChangedResponse", + CmdModifyNotifyingTxsConfirmationChangedResponseMessage: "TxsConfirmationChangedNotification", + CmdTxsConfirmationChangedNotificationMessage: "TxsConfirmationChangedNotification", + CmdNotifyAddressesTxsRequestMessage: "NotifyAddressesTxsRequest", + CmdNotifyAddressesTxsResponseMessage: "NotifyAddressesTxsResponse", + CmdModifyNotifyingAddressesTxsRequestMessage: "ModifyNotifyingAddressesTxsRequest", + CmdModifyNotifyingAddressesTxsResponseMessage: "ModifyNotifyingAddressesTxsResponse", + CmdAddressesTxsNotificationMessage: "AddressesTxsNotification", } // Message is an interface that describes a kaspa message. A type that diff --git a/app/appmessage/rpc_modify_notifying_addresses_txs.go b/app/appmessage/rpc_modify_notifying_addresses_txs.go index e69de29bb2..b446655858 100644 --- a/app/appmessage/rpc_modify_notifying_addresses_txs.go +++ b/app/appmessage/rpc_modify_notifying_addresses_txs.go @@ -0,0 +1,47 @@ +package appmessage + +type ModifyNotifyingAddressesTxsRequestMessage struct { + baseMessage + AddAddresses []string + RemoveAddresses []string + RequiredConfirmations uint32 + IncludePending bool + IncludeSending bool + IncludeReceiving bool +} + +// Command returns the protocol command string for the message +func (msg *ModifyNotifyingAddressesTxsRequestMessage) Command() MessageCommand { + return CmdModifyNotifyingAddressesTxsRequestMessage +} + +// NewModifyNotifyingAddressesTxsRequestMessage returns a instance of the message +func NewModifyNotifyingAddressesTxsRequestMessage(addAddresses []string, removeAddresses []string, + requiredConfirmations uint32, includePending bool, includeSending bool, + includeReceiving bool) *ModifyNotifyingAddressesTxsRequestMessage { + return &ModifyNotifyingAddressesTxsRequestMessage{ + AddAddresses: addAddresses, + RemoveAddresses: removeAddresses, + RequiredConfirmations: requiredConfirmations, + IncludePending: includePending, + IncludeSending: includeSending, + IncludeReceiving: includeReceiving, + } +} + +// ModifyNotifyingAddressesTxsResponseMessage is an appmessage corresponding to +// its respective RPC message +type ModifyNotifyingAddressesTxsResponseMessage struct { + baseMessage + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *ModifyNotifyingAddressesTxsResponseMessage) Command() MessageCommand { + return CmdModifyNotifyingAddressesTxsResponseMessage +} + +// NewModifyNotifyingAddressesTxsesponseMessage returns a instance of the message +func NewModifyNotifyingAddressesTxsResponseMessage() *NotifyAddressesTxsResponseMessage { + return &NotifyAddressesTxsResponseMessage{} +} diff --git a/app/appmessage/rpc_modify_notifying_txs_confirmation_changed.go b/app/appmessage/rpc_modify_notifying_txs_confirmation_changed.go index e69de29bb2..489f151829 100644 --- a/app/appmessage/rpc_modify_notifying_txs_confirmation_changed.go +++ b/app/appmessage/rpc_modify_notifying_txs_confirmation_changed.go @@ -0,0 +1,42 @@ +package appmessage + +type ModifyNotifyingTxsConfirmationChangedRequestMessage struct { + baseMessage + AddTxIDs []string + RemoveTxIDs []string + RequiredConfirmations uint32 + IncludePending bool +} + +// Command returns the protocol command string for the message +func (msg *ModifyNotifyingTxsConfirmationChangedRequestMessage) Command() MessageCommand { + return CmdModifyNotifyingTxsConfirmationChangedRequestMessage +} + +// NewModifyNotifyingTxsConfirmationChangedRequestMessage returns a instance of the message +func NewModifyNotifyingTxsConfirmationChangedRequestMessage(addTxIDs []string, removeTxIDs []string, + requiredConfirmations uint32, includePending bool) *ModifyNotifyingTxsConfirmationChangedRequestMessage { + return &ModifyNotifyingTxsConfirmationChangedRequestMessage{ + AddTxIDs: addTxIDs, + RemoveTxIDs: removeTxIDs, + RequiredConfirmations: requiredConfirmations, + IncludePending: includePending, + } +} + +// ModifyNotifyingTxsConfirmationChangedResponseMessage is an appmessage corresponding to +// its respective RPC message +type ModifyNotifyingTxsConfirmationChangedResponseMessage struct { + baseMessage + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *ModifyNotifyingTxsConfirmationChangedResponseMessage) Command() MessageCommand { + return CmdModifyNotifyingTxsConfirmationChangedResponseMessage +} + +// NewModifyNotifyingTXChangedResponseMessage returns a instance of the message +func NewModifyNotifyingTxsChangedResponseMessage() *NotifyTxsConfirmationChangedResponseMessage { + return &NotifyTxsConfirmationChangedResponseMessage{} +} diff --git a/app/appmessage/rpc_notify_addresses_txs.go b/app/appmessage/rpc_notify_addresses_txs.go index 8b13789179..c41af34317 100644 --- a/app/appmessage/rpc_notify_addresses_txs.go +++ b/app/appmessage/rpc_notify_addresses_txs.go @@ -1 +1,89 @@ +package appmessage + +// NotifyAddressesTxsRequestMessage is an appmessage corresponding to +// its respective RPC message +type NotifyAddressesTxsRequestMessage struct { + baseMessage + Addresses []string + RequiredConfirmations uint32 + IncludePending bool + IncludeSending bool + IncludeReceiving bool +} + +// Command returns the protocol command string for the message +func (msg *NotifyAddressesTxsRequestMessage) Command() MessageCommand { + return CmdNotifyAddressesTxsRequestMessage +} + +// NewNotifyAddressesTxsRequestMessage returns a instance of the message +func NewNotifyAddressesTxsRequestMessage(addresses []string, requiredConfirmations uint32, + includePending bool, includeSending bool, includeReceiving bool) *NotifyAddressesTxsRequestMessage { + return &NotifyAddressesTxsRequestMessage{ + Addresses: addresses, + RequiredConfirmations: requiredConfirmations, + IncludePending: includePending, + IncludeSending: includeSending, + IncludeReceiving: includeReceiving, + } +} + +// NotifyAddressesTxsResponseMessage is an appmessage corresponding to +// its respective RPC message +type NotifyAddressesTxsResponseMessage struct { + baseMessage + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *NotifyAddressesTxsResponseMessage) Command() MessageCommand { + return CmdNotifyAddressesTxsResponseMessage +} + +// NewNotifyTXChangedResponseMessage returns a instance of the message +func NewNotifyAddressesTxsResponseMessage() *NotifyAddressesTxsResponseMessage { + return &NotifyAddressesTxsResponseMessage{} +} + +// AddressesTxsNotificationMessage is an appmessage corresponding to +// its respective RPC message +type AddressesTxsNotificationMessage struct { + baseMessage + RequiredConfirmations uint32 + Pending []*TxEntriesByAddresses + Confirmed []*TxEntriesByAddresses + Unconfirmed []string + +} + +// Command returns the protocol command string for the message +func (msg *AddressesTxsNotificationMessage) Command() MessageCommand { + return CmdAddressesTxsNotificationMessage +} + +// NewAddressesTxsNotificationMessage returns a instance of the message +func NewAddressesTxsNotificationMessage(requiredConfirmations uint32, pending []*TxEntriesByAddresses, + confirmed []*TxEntriesByAddresses, unconfirmed []string) *AddressesTxsNotificationMessage { + return &AddressesTxsNotificationMessage{ + RequiredConfirmations: requiredConfirmations, + Pending: pending, + Confirmed: confirmed, + Unconfirmed: unconfirmed, + } +} + +// TxEntriesByAddresses is an appmessage corresponding to +// its respective RPC message +type TxEntriesByAddresses struct { + Sending []*TxEntryByAddress + Reciving []*TxEntryByAddress +} + +// TxEntryByAddress is an appmessage corresponding to +// its respective RPC message +type TxEntryByAddress struct { + Address string + TxID string + Confirmations uint32 +} \ No newline at end of file diff --git a/app/appmessage/rpc_notify_txs_confirmation_changed.go b/app/appmessage/rpc_notify_txs_confirmation_changed.go index f777fa400c..4a0bb69900 100644 --- a/app/appmessage/rpc_notify_txs_confirmation_changed.go +++ b/app/appmessage/rpc_notify_txs_confirmation_changed.go @@ -1,62 +1,69 @@ package appmessage -// NotifyUTXOsChangedRequestMessage is an appmessage corresponding to +// NotifyTxsConfirmationChangedRequestMessage is an appmessage corresponding to // its respective RPC message -type NotifyTxsConfirmationChangedRequstMessage struct { +type NotifyTxsConfirmationChangedRequestMessage struct { baseMessage - Addresses []string + TxIDs []string + RequiredConfirmations uint32 + IncludePending bool } // Command returns the protocol command string for the message -func (msg *NotifyUTXOsChangedRequestMessage) Command() MessageCommand { - return CmdNotifyUTXOsChangedRequestMessage +func (msg *NotifyTxsConfirmationChangedRequestMessage) Command() MessageCommand { + return CmdNotifyTxsConfirmationChangedRequestMessage } -// NewNotifyUTXOsChangedRequestMessage returns a instance of the message -func NewNotifyUTXOsChangedRequestMessage(addresses []string) *NotifyUTXOsChangedRequestMessage { - return &NotifyUTXOsChangedRequestMessage{ - Addresses: addresses, +// NewNotifyTxsConfirmationChangedRequestMessage returns a instance of the message +func NewNotifyTxsConfirmationChangedRequestMessage(TxIDs []string, requiredConfirmations uint32, + includePending bool) *NotifyTxsConfirmationChangedRequestMessage { + return &NotifyTxsConfirmationChangedRequestMessage{ + TxIDs: TxIDs, + RequiredConfirmations: requiredConfirmations, + IncludePending: includePending, } } -// NotifyUTXOsChangedResponseMessage is an appmessage corresponding to +// NotifyTxsConfirmationChangedResponseMessage is an appmessage corresponding to // its respective RPC message -type NotifyUTXOsChangedResponseMessage struct { +type NotifyTxsConfirmationChangedResponseMessage struct { baseMessage Error *RPCError } // Command returns the protocol command string for the message -func (msg *NotifyUTXOsChangedResponseMessage) Command() MessageCommand { - return CmdNotifyUTXOsChangedResponseMessage +func (msg *NotifyTxsConfirmationChangedResponseMessage) Command() MessageCommand { + return CmdNotifyTxsConfirmationChangedResponseMessage } -// NewNotifyUTXOsChangedResponseMessage returns a instance of the message -func NewNotifyTXChangedResponseMessage() *NotifyUTXOsChangedResponseMessage { - return &NotifyUTXOsChangedResponseMessage{} +// NewNotifyTXChangedResponseMessage returns a instance of the message +func NewNotifyTxsChangedResponseMessage() *NotifyTxsConfirmationChangedResponseMessage { + return &NotifyTxsConfirmationChangedResponseMessage{} } -// UTXOsChangedNotificationMessage is an appmessage corresponding to +// TxsConfirmationChangedNotificationMessage is an appmessage corresponding to // its respective RPC message -type UTXOsChangedNotificationMessage struct { +type TxsConfirmationChangedNotificationMessage struct { baseMessage - Added []*UTXOsByAddressesEntry - Removed []*UTXOsByAddressesEntry -} - -// UTXOsByAddressesEntry represents a UTXO of some address -type UTXOsByAddressesEntry struct { - Address string - Outpoint *RPCOutpoint - UTXOEntry *RPCUTXOEntry + RequiredConfirmations uint32 + Pending []*TxIDConfirmationsPair + Confirmed []TxIDConfirmationsPair + Unconfirmed []string + } // Command returns the protocol command string for the message -func (msg *UTXOsChangedNotificationMessage) Command() MessageCommand { - return CmdUTXOsChangedNotificationMessage +func (msg *TxsConfirmationChangedNotificationMessage) Command() MessageCommand { + return CmdTxsConfirmationChangedNotificationMessage } -// NewUTXOsChangedNotificationMessage returns a instance of the message -func NewUTXOsChangedNotificationMessage() *UTXOsChangedNotificationMessage { - return &UTXOsChangedNotificationMessage{} +// NewTxsChangedNotificationMessage returns a instance of the message +func NewTxsChangedNotificationMessage(requiredConfirmations uint32, pending []*TxIDConfirmationsPair, + confirmed []TxIDConfirmationsPair, unconfirmed []string) *TxsConfirmationChangedNotificationMessage { + return &TxsConfirmationChangedNotificationMessage{ + RequiredConfirmations: requiredConfirmations, + Pending: pending, + Confirmed: confirmed, + Unconfirmed: unconfirmed, + } } diff --git a/app/appmessage/rpc_start_notify_addresses_txs.go b/app/appmessage/rpc_start_notify_addresses_txs.go deleted file mode 100644 index b16743bce9..0000000000 --- a/app/appmessage/rpc_start_notify_addresses_txs.go +++ /dev/null @@ -1,47 +0,0 @@ -package protowire - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/pkg/errors" -) - -func (x *KaspadMessage_StartNotifyAddressesTxsRequest) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_StartNotifyAddressesTxsRequest is nil") - } - return x.StartNotifyAddressesTxsRequest.toAppMessage() -} - -func (x *KaspadMessage_StartNotifyAddressesTxsRequest) fromAppMessage(message *appmessage.StartNotifyAddressesTxsRequestMessage) error { - x.StartNotifyAddressesTxsRequest = &StartNotifyAddressesTxsRequestMessage{ - Addresses: message.Addresses, - } - return nil -} - -func (x *StartNotifyAddressesTxsRequestMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "StartNotifyAddressesTxsRequestMessage is nil") - } - return &appmessage.StartNotifyAddressesTxsRequestMessage{ - Addresses: x.Addresses, - }, nil -} - -func (x *KaspadMessage_StartNotifyAddressesTxsResponse) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "StartNotifyAddressesTxsResponseMessage is nil") - } - return x.StartNotifyAddressesTxsResponse.toAppMessage() -} - -func (x *KaspadMessage_StartNotifyAddressesTxsResponse) fromAppMessage(message *appmessage.StartNotifyAddressesTxsResponseMessage) error { - var err *RPCError - if message.Error != nil { - err = &RPCError{Message: message.Error.Message} - } - x.StartNotifyAddressesTxsResponse = &StartNotifytTxsConfirmationChangedResponseMessage{ - Error: err, - } - return nil -} diff --git a/app/appmessage/rpc_start_notify_txs_confirmation_changed.go b/app/appmessage/rpc_start_notify_txs_confirmation_changed.go deleted file mode 100644 index 10a6718ae0..0000000000 --- a/app/appmessage/rpc_start_notify_txs_confirmation_changed.go +++ /dev/null @@ -1,47 +0,0 @@ -package protowire - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/pkg/errors" -) - -func (x *KaspadMessage_StartNotifyTxsConfirmationChangedRequest) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_StartNotifyTxsConfirmationChangedRequest is nil") - } - return x.StartNotifyTxsConfirmationChangedRequest.toAppMessage() -} - -func (x *KaspadMessage_StartNotifyTxsConfirmationChangedRequest) fromAppMessage(message *appmessage.StartNotifyTxsConfirmationChangedRequestMessage) error { - x.StartNotifyTxsConfirmationChangedRequest = &StartNotifyTxsConfirmationChangedRequestMessage{ - TxIDs: message.TxIDs, - } - return nil -} - -func (x *StartNotifyTxsConfirmationChangedRequestMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "StartNotifyTxsConfirmationChangedRequestMessage is nil") - } - return &appmessage.StartNotifyTxsConfirmationChangedRequestMessage{ - TxIDs: x.TxIDs, - }, nil -} - -func (x *KaspadMessage_StartNotifyTxsConfirmationChangedResponse) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "StartNotifyTxsConfirmationChangedResponseMessage is nil") - } - return x.StartNotifyTxsConfirmationChangedResponse.toAppMessage() -} - -func (x *KaspadMessage_StartNotifyTxsConfirmationChangedResponse) fromAppMessage(message *appmessage.StartNotifyTxsConfirmationChangedResponseMessage) error { - var err *RPCError - if message.Error != nil { - err = &RPCError{Message: message.Error.Message} - } - x.StartNotifyTxsConfirmationChangedResponse = &StartNotifytTxsConfirmationChangedResponseMessage{ - Error: err, - } - return nil -} diff --git a/app/appmessage/rpc_stop_notify_addresses_txs.go b/app/appmessage/rpc_stop_notify_addresses_txs.go deleted file mode 100644 index 8e3c1a0d31..0000000000 --- a/app/appmessage/rpc_stop_notify_addresses_txs.go +++ /dev/null @@ -1,47 +0,0 @@ -package protowire - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/pkg/errors" -) - -func (x *KaspadMessage_StopNotifyAddressesTxsRequest) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_StopNotifyAddressesTxsRequest is nil") - } - return x.StopNotifyAddressesTxsRequest.toAppMessage() -} - -func (x *KaspadMessage_StopNotifyAddressesTxsRequest) fromAppMessage(message *appmessage.StopNotifyAddressesTxsRequestMessage) error { - x.StopNotifyAddressesTxsRequest = &StopNotifyAddressesTxsRequestMessage{ - Addresses: message.Addresses, - } - return nil -} - -func (x *StopNotifyAddressesTxsRequestMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "StopNotifyAddressesTxsRequestMessage is nil") - } - return &appmessage.StopNotifyAddressesTxsRequestMessage{ - Addresses: x.Addresses, - }, nil -} - -func (x *KaspadMessage_StopNotifyAddressesTxsResponse) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "StopNotifyAddressesTxsResponseMessage is nil") - } - return x.StopNotifyAddressesTxsResponse.toAppMessage() -} - -func (x *KaspadMessage_StopNotifyAddressesTxsResponse) fromAppMessage(message *appmessage.StopNotifyAddressesTxsResponseMessage) error { - var err *RPCError - if message.Error != nil { - err = &RPCError{Message: message.Error.Message} - } - x.StopNotifyAddressesTxsResponse = &StopNotifytTxsConfirmationChangedResponseMessage{ - Error: err, - } - return nil -} \ No newline at end of file diff --git a/app/appmessage/rpc_stop_notify_txs_confirmation_changed.go b/app/appmessage/rpc_stop_notify_txs_confirmation_changed.go deleted file mode 100644 index eab04842b9..0000000000 --- a/app/appmessage/rpc_stop_notify_txs_confirmation_changed.go +++ /dev/null @@ -1,47 +0,0 @@ -package protowire - -import ( - "github.com/kaspanet/kaspad/app/appmessage" - "github.com/pkg/errors" -) - -func (x *KaspadMessage_StopNotifyTxsConfirmationChangedRequest) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "KaspadMessage_StopNotifyTxsConfirmationChangedRequest is nil") - } - return x.StopNotifyTxsConfirmationChangedRequest.toAppMessage() -} - -func (x *KaspadMessage_StopNotifyTxsConfirmationChangedRequest) fromAppMessage(message *appmessage.StopNotifyTxsConfirmationChangedRequestMessage) error { - x.StopNotifyTxsConfirmationChangedRequest = &StopNotifyTxsConfirmationChangedRequestMessage{ - TxIDs: message.TxIDs, - } - return nil -} - -func (x *StopNotifyTxsConfirmationChangedRequestMessage) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "StopNotifyTxsConfirmationChangedRequestMessage is nil") - } - return &appmessage.StopNotifyTxsConfirmationChangedRequestMessage{ - TxIDs: x.TxIDs, - }, nil -} - -func (x *KaspadMessage_StopNotifyTxsConfirmationChangedResponse) toAppMessage() (appmessage.Message, error) { - if x == nil { - return nil, errors.Wrapf(errorNil, "StopNotifyTxsConfirmationChangedResponseMessage is nil") - } - return x.StopNotifyTxsConfirmationChangedResponse.toAppMessage() -} - -func (x *KaspadMessage_StopNotifyTxsConfirmationChangedResponse) fromAppMessage(message *appmessage.StopNotifyTxsConfirmationChangedResponseMessage) error { - var err *RPCError - if message.Error != nil { - err = &RPCError{Message: message.Error.Message} - } - x.StopNotifyTxsConfirmationChangedResponse = &StopNotifytTxsConfirmationChangedResponseMessage{ - Error: err, - } - return nil -} \ No newline at end of file From e9f7169d992d2fdb97c34c33c3d078a5b2870ee9 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Sun, 16 Oct 2022 13:39:38 +0200 Subject: [PATCH 42/47] fix converters --- app/appmessage/rpc_notify_addresses_txs.go | 14 +- .../rpc_notify_txs_confirmation_changed.go | 8 +- domain/txindex/txindex.go | 118 ++++ .../server/grpcserver/protowire/rpc.md | 4 +- .../server/grpcserver/protowire/rpc.pb.go | 556 +++++++++--------- .../server/grpcserver/protowire/rpc.proto | 2 +- .../grpcserver/protowire/rpc_get_info.go | 8 +- .../rpc_modify_notifying_addresses_txs.go | 16 +- ...dify_notifying_txs_confirmation_changed.go | 17 +- .../protowire/rpc_notify_addresses_txs.go | 37 +- .../rpc_notify_txs_confirmation_changed.go | 6 +- 11 files changed, 479 insertions(+), 307 deletions(-) diff --git a/app/appmessage/rpc_notify_addresses_txs.go b/app/appmessage/rpc_notify_addresses_txs.go index c41af34317..029c06cb05 100644 --- a/app/appmessage/rpc_notify_addresses_txs.go +++ b/app/appmessage/rpc_notify_addresses_txs.go @@ -51,9 +51,9 @@ func NewNotifyAddressesTxsResponseMessage() *NotifyAddressesTxsResponseMessage { type AddressesTxsNotificationMessage struct { baseMessage RequiredConfirmations uint32 - Pending []*TxEntriesByAddresses - Confirmed []*TxEntriesByAddresses - Unconfirmed []string + Pending *TxEntriesByAddresses + Confirmed *TxEntriesByAddresses + Unconfirmed *TxEntriesByAddresses } @@ -63,8 +63,8 @@ func (msg *AddressesTxsNotificationMessage) Command() MessageCommand { } // NewAddressesTxsNotificationMessage returns a instance of the message -func NewAddressesTxsNotificationMessage(requiredConfirmations uint32, pending []*TxEntriesByAddresses, - confirmed []*TxEntriesByAddresses, unconfirmed []string) *AddressesTxsNotificationMessage { +func NewAddressesTxsNotificationMessage(requiredConfirmations uint32, pending *TxEntriesByAddresses, + confirmed *TxEntriesByAddresses, unconfirmed *TxEntriesByAddresses) *AddressesTxsNotificationMessage { return &AddressesTxsNotificationMessage{ RequiredConfirmations: requiredConfirmations, Pending: pending, @@ -76,8 +76,8 @@ func NewAddressesTxsNotificationMessage(requiredConfirmations uint32, pending [] // TxEntriesByAddresses is an appmessage corresponding to // its respective RPC message type TxEntriesByAddresses struct { - Sending []*TxEntryByAddress - Reciving []*TxEntryByAddress + Sent []*TxEntryByAddress + Received []*TxEntryByAddress } // TxEntryByAddress is an appmessage corresponding to diff --git a/app/appmessage/rpc_notify_txs_confirmation_changed.go b/app/appmessage/rpc_notify_txs_confirmation_changed.go index 4a0bb69900..b8d1077997 100644 --- a/app/appmessage/rpc_notify_txs_confirmation_changed.go +++ b/app/appmessage/rpc_notify_txs_confirmation_changed.go @@ -47,8 +47,8 @@ type TxsConfirmationChangedNotificationMessage struct { baseMessage RequiredConfirmations uint32 Pending []*TxIDConfirmationsPair - Confirmed []TxIDConfirmationsPair - Unconfirmed []string + Confirmed []*TxIDConfirmationsPair + UnconfirmedTxIds []string } @@ -59,11 +59,11 @@ func (msg *TxsConfirmationChangedNotificationMessage) Command() MessageCommand { // NewTxsChangedNotificationMessage returns a instance of the message func NewTxsChangedNotificationMessage(requiredConfirmations uint32, pending []*TxIDConfirmationsPair, - confirmed []TxIDConfirmationsPair, unconfirmed []string) *TxsConfirmationChangedNotificationMessage { + confirmed []*TxIDConfirmationsPair, unconfirmedTxIds []string) *TxsConfirmationChangedNotificationMessage { return &TxsConfirmationChangedNotificationMessage{ RequiredConfirmations: requiredConfirmations, Pending: pending, Confirmed: confirmed, - Unconfirmed: unconfirmed, + UnconfirmedTxIds : unconfirmedTxIds , } } diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 1c751c517a..dba05af1c8 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -291,6 +291,31 @@ func (ti *TXIndex) TXAcceptingBlockHashes(txIDs []*externalapi.DomainTransaction return txIDsToAcceptingBlockHashes, missingTxIds, nil } +// TXAcceptingBlock returns the accepting block for for the given txID +func (ti *TXIndex) TXAcceptingBlock(txID *externalapi.DomainTransactionID) ( + block *externalapi.DomainBlock, found bool, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXAcceptingBlock") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + txIndexData, found, err := ti.store.getTxData(txID) + if err != nil { + return nil, false, err + } + + acceptingBlock, err := ti.domain.Consensus().GetBlockEvenIfHeaderOnly(txIndexData.AcceptingBlockHash) + + if err != nil { + if database.IsNotFoundError(err) { + return nil, false, fmt.Errorf("accepting block %s missing for txID %s ", txIndexData.AcceptingBlockHash.String(), txID.String()) + } + return nil, false, err + } + return acceptingBlock, true, nil +} + // GetTXs returns the domain transaction for for the given txIDs func (ti *TXIndex) GetTXs(txIDs []*externalapi.DomainTransactionID) ( txs []*externalapi.DomainTransaction, notFound []*externalapi.DomainTransactionID, err error) { @@ -386,6 +411,99 @@ func (ti *TXIndex) GetTXsConfirmations(txIDs []*externalapi.DomainTransactionID) return txIDsToConfirmations, notFound, nil } +// TXIncludingBlockHash returns the including block hash for the given txID +func (ti *TXIndex) TXIncludingBlockHash(txID *externalapi.DomainTransactionID) (includingBlockHash *externalapi.DomainHash, found bool, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXIncludingBlockHash") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + txIndexData, found, err := ti.store.getTxData(txID) + if err != nil { + return nil, false, err + } + + return txIndexData.IncludingBlockHash, true, nil +} + +// TXIncludingBlock returns the including block hashes for for the given txIDs +func (ti *TXIndex) TXIncludingBlock(txID *externalapi.DomainTransactionID) ( + block *externalapi.DomainBlock, found bool, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXIncludingBlock") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + txIndexData, found, err := ti.store.getTxData(txID) + if err != nil { + return nil, false, err + } + + includingBlock, err := ti.domain.Consensus().GetBlockEvenIfHeaderOnly(txIndexData.IncludingBlockHash) + + if err != nil { + if database.IsNotFoundError(err) { + return nil, false, fmt.Errorf("including block %s missing for txID %s ", txIndexData.IncludingBlockHash.String(), txID.String()) + } + return nil, false, err + } + return includingBlock, true, nil +} + +// TXIncludingBlockHashes returns the including block hashes for for the given txI +func (ti *TXIndex) TXIncludingBlockHashes(txIDs []*externalapi.DomainTransactionID) ( + txIDsToIncludinglockHashes TxIDsToBlockHashes, missingTxIds []*externalapi.DomainTransactionID, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXIncludingBlockHashes") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + txIDsToTxIndexData, notFound, err := ti.store.getTxsData(txIDs) + if err != nil { + return nil, nil, err + } + + txIDsToIncludinglockHashes = make(TxIDsToBlockHashes) + + for txID, txIndexData := range txIDsToTxIndexData { + txIDsToIncludinglockHashes[txID] = txIndexData.IncludingBlockHash + } + + return txIDsToIncludinglockHashes, notFound, nil +} + +// TXIncludingBlocks returns the including block hashes for for the given txIDs +func (ti *TXIndex) TXIncludingBlocks(txIDs []*externalapi.DomainTransactionID) ( + txIDsToIncludingBlocks TxIDsToBlocks, notFound []*externalapi.DomainTransactionID, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.TXIncludingBlocks") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + txIDsToTxIndexData, notFound, err := ti.store.getTxsData(txIDs) + if err != nil { + return nil, nil, err + } + + txIDsToIncludingBlocks = make(TxIDsToBlocks) + + for txID, txIndexData := range txIDsToTxIndexData { + txIDsToIncludingBlocks[txID], err = ti.domain.Consensus().GetBlockEvenIfHeaderOnly(txIndexData.IncludingBlockHash) + if err != nil { + if database.IsNotFoundError(err) { + return nil, nil, fmt.Errorf("including block %s missing for txID %s ", txIndexData.IncludingBlockHash.String(), txID.String()) + } + return nil, nil, err + } + } + + return txIDsToIncludingBlocks, notFound, nil +} + // GetTXsBlueScores returns the tx's accepting bluescore for for the given txID // Note: this is a optimization function to store and dynamically calc. tx confirmations with access to to virtual bluescore // such as in the case of rpc confirmation notification listeners diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md index 4b24bdaf5e..d6416576e9 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.md @@ -376,7 +376,7 @@ Receivers of any ResponseMessage are expected to check whether its error field i | mass | [uint64](#uint64) | | | | blockHash | [string](#string) | | | | blockTime | [uint64](#uint64) | | | -| txIndexed | [bool](#bool) | | whether the transaction is stored in the txindex database. Kaspad must be started with the `--txindex` flag, for parameter to display. | +| txIndexed | [bool](#bool) | | whether the transaction is stored in the txindex database, regardless if kaspad is run with the `--txindex` flag, or not. | | acceptingBlockHash | [string](#string) | | Kaspad must be started with the `--txindex` flag, for parameter to display. | | confirmations | [uint32](#uint32) | | Kaspad must be started with the `--txindex` flag for parameter to display. | @@ -1726,6 +1726,8 @@ GetInfoRequestMessage returns info about the node. | mempoolSize | [uint64](#uint64) | | | | serverVersion | [string](#string) | | | | isUtxoIndexed | [bool](#bool) | | | +| isTxIndexed | [bool](#bool) | | | +| isArchival | [bool](#bool) | | | | isSynced | [bool](#bool) | | | | error | [RPCError](#protowire.RPCError) | | | diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go index 47193a5781..9ebc01634c 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.pb.go @@ -929,7 +929,7 @@ type RpcTransactionVerboseData struct { Mass uint64 `protobuf:"varint,4,opt,name=mass,proto3" json:"mass,omitempty"` BlockHash string `protobuf:"bytes,12,opt,name=blockHash,proto3" json:"blockHash,omitempty"` BlockTime uint64 `protobuf:"varint,14,opt,name=blockTime,proto3" json:"blockTime,omitempty"` - TxIndexed bool `protobuf:"varint,15,opt,name=txIndexed,proto3" json:"txIndexed,omitempty"` //whether the transaction is stored in the txindex database. Kaspad must be started with the `--txindex` flag, for parameter to display. + TxIndexed bool `protobuf:"varint,15,opt,name=txIndexed,proto3" json:"txIndexed,omitempty"` //whether the transaction is stored in the txindex database, regardless if kaspad is run with the `--txindex` flag, or not. AcceptingBlockHash string `protobuf:"bytes,16,opt,name=acceptingBlockHash,proto3" json:"acceptingBlockHash,omitempty"` // Kaspad must be started with the `--txindex` flag, for parameter to display. Confirmations uint32 `protobuf:"varint,17,opt,name=confirmations,proto3" json:"confirmations,omitempty"` // Kaspad must be started with the `--txindex` flag for parameter to display. } @@ -5534,7 +5534,9 @@ type GetInfoResponseMessage struct { MempoolSize uint64 `protobuf:"varint,2,opt,name=mempoolSize,proto3" json:"mempoolSize,omitempty"` ServerVersion string `protobuf:"bytes,3,opt,name=serverVersion,proto3" json:"serverVersion,omitempty"` IsUtxoIndexed bool `protobuf:"varint,4,opt,name=isUtxoIndexed,proto3" json:"isUtxoIndexed,omitempty"` - IsSynced bool `protobuf:"varint,5,opt,name=isSynced,proto3" json:"isSynced,omitempty"` + IsTxIndexed bool `protobuf:"varint,5,opt,name=isTxIndexed,proto3" json:"isTxIndexed,omitempty"` + IsArchival bool `protobuf:"varint,6,opt,name=isArchival,proto3" json:"isArchival,omitempty"` + IsSynced bool `protobuf:"varint,7,opt,name=isSynced,proto3" json:"isSynced,omitempty"` Error *RPCError `protobuf:"bytes,1000,opt,name=error,proto3" json:"error,omitempty"` } @@ -5598,6 +5600,20 @@ func (x *GetInfoResponseMessage) GetIsUtxoIndexed() bool { return false } +func (x *GetInfoResponseMessage) GetIsTxIndexed() bool { + if x != nil { + return x.IsTxIndexed + } + return false +} + +func (x *GetInfoResponseMessage) GetIsArchival() bool { + if x != nil { + return x.IsArchival + } + return false +} + func (x *GetInfoResponseMessage) GetIsSynced() bool { if x != nil { return x.IsSynced @@ -8206,7 +8222,7 @@ var file_rpc_proto_rawDesc = []byte{ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0xe4, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x61, 0x67, 0x65, 0x22, 0xa6, 0x02, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x32, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x32, 0x70, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x53, @@ -8216,281 +8232,285 @@ var file_rpc_proto_rawDesc = []byte{ 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x73, 0x55, 0x74, 0x78, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x73, 0x55, 0x74, 0x78, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x12, 0x2a, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x27, 0x47, 0x65, - 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x6a, 0x0a, 0x28, 0x47, 0x65, 0x74, - 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x6c, 0x0a, 0x2c, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, - 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, - 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, - 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, - 0x77, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, - 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, - 0x61, 0x73, 0x68, 0x22, 0x93, 0x01, 0x0a, 0x2d, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, - 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, - 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x12, 0x2a, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x26, 0x0a, 0x24, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x53, 0x0a, 0x25, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, + 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x54, 0x78, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x54, 0x78, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, + 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x41, 0x72, 0x63, 0x68, + 0x69, 0x76, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, + 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x27, + 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x22, 0x6a, 0x0a, 0x28, 0x47, + 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x48, 0x61, 0x73, 0x68, 0x4f, 0x66, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x6c, 0x0a, 0x2c, 0x45, 0x73, 0x74, 0x69, 0x6d, + 0x61, 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, + 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, + 0x77, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x77, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x48, 0x61, 0x73, 0x68, 0x22, 0x93, 0x01, 0x0a, 0x2d, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, + 0x74, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, + 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x12, + 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x26, 0x0a, 0x24, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x53, 0x0a, 0x25, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4e, 0x65, 0x77, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x25, 0x0a, 0x23, 0x4e, 0x65, 0x77, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x9b, 0x01, 0x0a, 0x15, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x31, 0x0a, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x73, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x35, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x22, 0xae, 0x01, + 0x0a, 0x2a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, + 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x34, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x95, + 0x01, 0x0a, 0x2b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, + 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, + 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, + 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x25, 0x0a, 0x23, 0x4e, 0x65, 0x77, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x9b, 0x01, - 0x0a, 0x15, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x31, 0x0a, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, - 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x73, 0x65, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x12, 0x35, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, - 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x22, 0xae, 0x01, 0x0a, 0x2a, - 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4f, 0x72, 0x70, 0x68, - 0x61, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x34, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x95, 0x01, 0x0a, - 0x2b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x07, - 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, - 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, - 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, + 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x92, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, + 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x6f, 0x6d, + 0x70, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x6f, 0x6d, + 0x70, 0x69, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, + 0x67, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x63, 0x69, + 0x72, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x12, 0x2a, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x54, 0x0a, 0x18, 0x52, 0x70, + 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x22, 0x3e, 0x0a, 0x14, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, + 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x48, 0x61, 0x73, 0x68, + 0x22, 0x51, 0x0a, 0x10, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x22, 0x42, 0x0a, 0x2a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, + 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, + 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x2b, 0x47, 0x65, 0x74, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, + 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4f, 0x0a, 0x12, 0x74, 0x78, 0x49, 0x44, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, + 0x50, 0x61, 0x69, 0x72, 0x52, 0x12, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, + 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, - 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x92, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x53, - 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x6f, 0x6d, 0x70, 0x69, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x6f, 0x6d, 0x70, 0x69, - 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x53, - 0x6f, 0x6d, 0x70, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x63, 0x69, 0x72, 0x63, - 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x6d, 0x70, 0x69, 0x12, 0x2a, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x54, 0x0a, 0x18, 0x52, 0x70, 0x63, 0x54, - 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3e, - 0x0a, 0x14, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x61, - 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x48, 0x61, 0x73, 0x68, 0x22, 0x51, - 0x0a, 0x10, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, - 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x78, 0x49, 0x44, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x52, 0x70, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x22, 0x42, 0x0a, 0x2a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6e, - 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x4f, 0x66, 0x54, 0x78, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x78, 0x49, 0x44, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x2b, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, - 0x65, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, - 0x73, 0x4f, 0x66, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4f, 0x0a, 0x12, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, - 0x63, 0x54, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x50, 0x61, - 0x69, 0x72, 0x52, 0x12, 0x74, 0x78, 0x49, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, - 0x68, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2c, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, + 0x44, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x0c, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, + 0x70, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x39, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, + 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, + 0x44, 0x73, 0x22, 0xad, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5b, 0x0a, 0x16, 0x74, 0x78, 0x49, + 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, + 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x16, + 0x74, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x2c, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, - 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, - 0x22, 0x82, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x39, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x78, - 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x49, 0x44, 0x73, - 0x22, 0xad, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5b, 0x0a, 0x16, 0x74, 0x78, 0x49, 0x44, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x16, 0x74, 0x78, - 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, - 0x61, 0x69, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, + 0x6f, 0x72, 0x22, 0xa0, 0x01, 0x0a, 0x2a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, + 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x59, 0x0a, 0x2b, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, + 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0xa0, 0x01, 0x0a, 0x2a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, - 0x54, 0x78, 0x49, 0x44, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x22, 0x59, 0x0a, 0x2b, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x54, 0x78, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, + 0x22, 0xbb, 0x02, 0x0a, 0x29, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, + 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x10, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x54, 0x78, 0x49, + 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xbb, - 0x02, 0x0a, 0x29, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x12, 0x41, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x52, 0x70, 0x63, 0x54, 0x78, 0x49, 0x44, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x69, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, - 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, 0x73, - 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xd1, 0x01, 0x0a, - 0x33, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, - 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x64, 0x64, 0x54, 0x78, 0x49, 0x44, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x61, 0x64, 0x64, 0x54, 0x78, 0x49, 0x44, 0x73, - 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x78, 0x49, 0x44, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x78, 0x49, - 0x44, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x22, 0x62, 0x0a, 0x34, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x69, 0x6e, 0x67, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x66, 0x0a, 0x10, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, - 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x80, 0x01, 0x0a, - 0x14, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x52, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x22, - 0xf2, 0x01, 0x0a, 0x20, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x69, 0x6e, 0x67, 0x22, 0x4f, 0x0a, 0x21, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xab, 0x02, 0x0a, 0x29, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x41, 0x64, 0x64, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, - 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x2a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, - 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, - 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x94, 0x02, - 0x0a, 0x1f, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x39, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xd1, + 0x01, 0x0a, 0x33, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, + 0x6e, 0x67, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x64, 0x64, 0x54, 0x78, 0x49, + 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x61, 0x64, 0x64, 0x54, 0x78, 0x49, + 0x44, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x78, 0x49, 0x44, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, + 0x78, 0x49, 0x44, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x22, 0x62, 0x0a, 0x34, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x66, 0x0a, 0x10, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x80, + 0x01, 0x0a, 0x14, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x52, 0x04, 0x73, 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0x22, 0xf2, 0x01, 0x0a, 0x20, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x22, 0x4f, 0x0a, 0x21, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xab, 0x02, 0x0a, 0x29, 0x4d, 0x6f, 0x64, 0x69, + 0x66, 0x79, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x41, 0x64, 0x64, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x2a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x54, 0x78, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, + 0x94, 0x02, 0x0a, 0x1f, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x78, 0x73, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x39, 0x0a, 0x07, 0x70, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, + 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x07, 0x70, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x12, 0x3d, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x12, 0x3d, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, - 0x64, 0x12, 0x41, 0x0a, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x42, 0x79, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x65, 0x64, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, - 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, + 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto index 2a77b77f39..745b31ffda 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto @@ -668,7 +668,7 @@ message GetInfoResponseMessage{ bool isTxIndexed = 5; bool isArchival = 6; bool isSynced = 7; - + RPCError error = 1000; } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_info.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_info.go index 63a0d070ac..ed85c44abb 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_info.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_info.go @@ -31,8 +31,8 @@ func (x *KaspadMessage_GetInfoResponse) fromAppMessage(message *appmessage.GetIn ServerVersion: message.ServerVersion, MempoolSize: message.MempoolSize, IsUtxoIndexed: message.IsUtxoIndexed, - IsTxIndexed: message.IsTxIndexed; - IsArchival: message.IsArchival; + IsTxIndexed: message.IsTxIndexed, + IsArchival: message.IsArchival, IsSynced: message.IsSynced, Error: err, } @@ -58,8 +58,8 @@ func (x *GetInfoResponseMessage) toAppMessage() (appmessage.Message, error) { MempoolSize: x.MempoolSize, ServerVersion: x.ServerVersion, IsUtxoIndexed: x.IsUtxoIndexed, - IsTxIndexed: x.IsTxIndexed; - IsArchival: x.IsArchival; + IsTxIndexed: x.IsTxIndexed, + IsArchival: x.IsArchival, IsSynced: x.IsSynced, Error: rpcErr, diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_addresses_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_addresses_txs.go index 33904e1105..70be749f56 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_addresses_txs.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_addresses_txs.go @@ -45,12 +45,26 @@ func (x *KaspadMessage_ModifyNotifyingAddressesTxsResponse) toAppMessage() (appm return x.ModifyNotifyingAddressesTxsResponse.toAppMessage() } +func (x *ModifyNotifyingAddressesTxsResponseMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "ModifyNotifyingAddressesTxsResponseMessage is nil") + } + rpcErr, err := x.Error.toAppMessage() + // Error is an optional field + if err != nil && !errors.Is(err, errorNil) { + return nil, err + } + return &appmessage.ModifyNotifyingAddressesTxsResponseMessage{ + Error: rpcErr, + }, nil +} + func (x *KaspadMessage_ModifyNotifyingAddressesTxsResponse) fromAppMessage(message *appmessage.ModifyNotifyingAddressesTxsResponseMessage) error { var err *RPCError if message.Error != nil { err = &RPCError{Message: message.Error.Message} } - x.ModifyNotifyingAddressesTxsResponse = &ModifyNotifytTxsConfirmingationChangedResponseMessage{ + x.ModifyNotifyingAddressesTxsResponse = &ModifyNotifyingAddressesTxsResponseMessage{ Error: err, } return nil diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_txs_confirmation_changed.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_txs_confirmation_changed.go index d3f85ff7dd..01bcef4bdf 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_txs_confirmation_changed.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_txs_confirmation_changed.go @@ -41,12 +41,27 @@ func (x *KaspadMessage_ModifyNotifyingTxsConfirmationChangedResponse) toAppMessa return x.ModifyNotifyingTxsConfirmationChangedResponse.toAppMessage() } +func (x *ModifyNotifyingTxsConfirmationChangedResponseMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "ModifyNotifyingTxsConfirmationChangedResponseMessage is nil") + } + rpcErr, err := x.Error.toAppMessage() + // Error is an optional field + if err != nil && !errors.Is(err, errorNil) { + return nil, err + } + return &appmessage.ModifyNotifyingTxsConfirmationChangedResponseMessage{ + Error: rpcErr, + }, nil +} + + func (x *KaspadMessage_ModifyNotifyingTxsConfirmationChangedResponse) fromAppMessage(message *appmessage.ModifyNotifyingTxsConfirmationChangedResponseMessage) error { var err *RPCError if message.Error != nil { err = &RPCError{Message: message.Error.Message} } - x.ModifyNotifyingTxsConfirmationChangedResponse = &ModifyNotifytingTxsConfirmationChangedResponseMessage{ + x.ModifyNotifyingTxsConfirmationChangedResponse = &ModifyNotifyingTxsConfirmationChangedResponseMessage{ Error: err, } return nil diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go index 33804f41d7..5b0c7ce5ac 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go @@ -77,11 +77,14 @@ func (x *KaspadMessage_AddressesTxsNotification) toAppMessage() (appmessage.Mess func (x *KaspadMessage_AddressesTxsNotification) fromAppMessage(message *appmessage.AddressesTxsNotificationMessage) error { - pending := message.Pending.fromAppMessage() + pending := &TxEntriesByAddresses{} + pending.fromAppMessage(message.Pending) - confirmed := message.Confirmed.fromAppMessage() + confirmed := &TxEntriesByAddresses{} + confirmed.fromAppMessage(message.Confirmed) - unconfirmed := message.Unconfirmed.fromAppMessage() + unconfirmed := &TxEntriesByAddresses{} + unconfirmed.fromAppMessage(message.Unconfirmed) x.AddressesTxsNotification = &AddressesTxsNotificationMessage{ RequiredConfirmations: message.RequiredConfirmations, @@ -125,7 +128,7 @@ func (x *TxEntriesByAddresses) toAppMessage() (*appmessage.TxEntriesByAddresses, return nil, errors.Wrapf(errorNil, "TxEntriesByAddresses is nil") } - sent := make([]*appmessage.TxEntriesByAddresses, len(x.Sent)) + sent := make([]*appmessage.TxEntryByAddress, len(x.Sent)) for i, entry := range x.Sent { entry, err := entry.toAppMessage() if err != nil { @@ -134,34 +137,34 @@ func (x *TxEntriesByAddresses) toAppMessage() (*appmessage.TxEntriesByAddresses, sent[i] = entry } - received := make([]*appmessage.TxEntriesByAddresses, len(x.Received)) + received := make([]*appmessage.TxEntryByAddress, len(x.Received)) for i, entry := range x.Received { entry, err := entry.toAppMessage() if err != nil { return nil, err } - sent[i] = entry + received[i] = entry } return &appmessage.TxEntriesByAddresses{ Sent: sent, - Recived: received, + Received: received, }, nil } func (x *TxEntriesByAddresses) fromAppMessage(message *appmessage.TxEntriesByAddresses) { sent := make([]*TxEntryByAddress, len(message.Sent)) - for i, entry := range message.Confirmed { - entry[i] = &TxEntryByAddress{} - entry[i].fromAppMessage(entry) + for i, entry := range message.Sent { + sent[i] = &TxEntryByAddress{} + sent[i].fromAppMessage(entry) } received := make([]*TxEntryByAddress, len(message.Received)) - for i, entry := range message.Confirmed { - entry[i] = &TxEntryByAddress{} - entry[i].fromAppMessage(entry) + for i, entry := range message.Received { + received[i] = &TxEntryByAddress{} + received[i].fromAppMessage(entry) } *x = TxEntriesByAddresses{ @@ -177,8 +180,8 @@ func (x *TxEntryByAddress) toAppMessage() (*appmessage.TxEntryByAddress, error) return &appmessage.TxEntryByAddress{ Address: x.Address, - TxId: x.Address, - Confirmations: x.Address, + TxID: x.TxId, + Confirmations: x.Confirmations, }, nil } @@ -186,7 +189,7 @@ func (x *TxEntryByAddress) fromAppMessage(message *appmessage.TxEntryByAddress) *x = TxEntryByAddress{ Address: message.Address, - TxId: message.Address, - Confirmations: message.Address, + TxId: message.TxID, + Confirmations: message.Confirmations, } } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_txs_confirmation_changed.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_txs_confirmation_changed.go index ea15cdaee5..7107761a72 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_txs_confirmation_changed.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_txs_confirmation_changed.go @@ -12,8 +12,8 @@ func (x *KaspadMessage_NotifyTxsConfirmationChangedRequst) toAppMessage() (appme return x.NotifyTxsConfirmationChangedRequst.toAppMessage() } -func (x *KaspadMessage_NotifyTxsConfirmationChangedRequst) fromAppMessage(message *appmessage.NotifyTxsConfirmationChangedRequstMessage) error { - x.NotifyTxsConfirmationChangedRequst = &NotifyTxsConfirmationChangedRequstMessage{ +func (x *KaspadMessage_NotifyTxsConfirmationChangedRequst) fromAppMessage(message *appmessage.NotifyTxsConfirmationChangedRequestMessage) error { + x.NotifyTxsConfirmationChangedRequst = &NotifyTxsConfirmationChangedRequestMessage{ TxIDs: message.TxIDs, RequiredConfirmations: message.RequiredConfirmations, IncludePending: message.IncludePending, @@ -88,7 +88,7 @@ func (x *KaspadMessage_TxsConfirmationChangedNotification) fromAppMessage(messag RequiredConfirmations: message.RequiredConfirmations, Pending: pending, Confirmed: confirmed, - UnconfirmedTxIds: message.UnconfirmedTxIds, + UnconfirmedTxIds : message.UnconfirmedTxIds , } return nil } From ee09eb568a9ccf9084cde6e9bbe61bfa80a43537 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Sun, 16 Oct 2022 13:44:48 +0200 Subject: [PATCH 43/47] fix fmt and linting --- app/appmessage/message.go | 20 ++++---- app/appmessage/rpc_get_info.go | 10 ++-- .../rpc_modify_notifying_addresses_txs.go | 32 +++++++------ ...dify_notifying_txs_confirmation_changed.go | 22 +++++---- app/appmessage/rpc_notify_addresses_txs.go | 48 +++++++++---------- .../rpc_notify_txs_confirmation_changed.go | 33 +++++++------ app/appmessage/rpc_submit_transaction.go | 12 ++--- .../rpc_modify_notifying_addresses_txs.go | 20 ++++---- ...dify_notifying_txs_confirmation_changed.go | 13 +++-- .../protowire/rpc_notify_addresses_txs.go | 46 +++++++++--------- .../rpc_notify_txs_confirmation_changed.go | 20 ++++---- .../protowire/rpc_submit_transaction.go | 32 ++++++------- 12 files changed, 153 insertions(+), 155 deletions(-) diff --git a/app/appmessage/message.go b/app/appmessage/message.go index 1647aa2a5e..8f7bd373c8 100644 --- a/app/appmessage/message.go +++ b/app/appmessage/message.go @@ -322,16 +322,16 @@ var RPCMessageCommandToString = map[MessageCommand]string{ CmdGetTxsResponseMessage: "GetTxsResponse", CmdGetTxsConfirmationsRequestMessage: "GetTxsConfirmationsRequest", CmdGetTxsConfirmationsResponseMessage: "GetTxsConfirmationsResponse", - CmdNotifyTxsConfirmationChangedRequestMessage: "NotifyTxsConfirmationChangedRequest", - CmdNotifyTxsConfirmationChangedResponseMessage: "ModifyNotifyingTxsConfirmationChangedRequest", - CmdModifyNotifyingTxsConfirmationChangedRequestMessage: "ModifyNotifyingTxsConfirmationChangedResponse", - CmdModifyNotifyingTxsConfirmationChangedResponseMessage: "TxsConfirmationChangedNotification", - CmdTxsConfirmationChangedNotificationMessage: "TxsConfirmationChangedNotification", - CmdNotifyAddressesTxsRequestMessage: "NotifyAddressesTxsRequest", - CmdNotifyAddressesTxsResponseMessage: "NotifyAddressesTxsResponse", - CmdModifyNotifyingAddressesTxsRequestMessage: "ModifyNotifyingAddressesTxsRequest", - CmdModifyNotifyingAddressesTxsResponseMessage: "ModifyNotifyingAddressesTxsResponse", - CmdAddressesTxsNotificationMessage: "AddressesTxsNotification", + CmdNotifyTxsConfirmationChangedRequestMessage: "NotifyTxsConfirmationChangedRequest", + CmdNotifyTxsConfirmationChangedResponseMessage: "ModifyNotifyingTxsConfirmationChangedRequest", + CmdModifyNotifyingTxsConfirmationChangedRequestMessage: "ModifyNotifyingTxsConfirmationChangedResponse", + CmdModifyNotifyingTxsConfirmationChangedResponseMessage: "TxsConfirmationChangedNotification", + CmdTxsConfirmationChangedNotificationMessage: "TxsConfirmationChangedNotification", + CmdNotifyAddressesTxsRequestMessage: "NotifyAddressesTxsRequest", + CmdNotifyAddressesTxsResponseMessage: "NotifyAddressesTxsResponse", + CmdModifyNotifyingAddressesTxsRequestMessage: "ModifyNotifyingAddressesTxsRequest", + CmdModifyNotifyingAddressesTxsResponseMessage: "ModifyNotifyingAddressesTxsResponse", + CmdAddressesTxsNotificationMessage: "AddressesTxsNotification", } // Message is an interface that describes a kaspa message. A type that diff --git a/app/appmessage/rpc_get_info.go b/app/appmessage/rpc_get_info.go index af7b4e0426..f70f6f139c 100644 --- a/app/appmessage/rpc_get_info.go +++ b/app/appmessage/rpc_get_info.go @@ -24,8 +24,8 @@ type GetInfoResponseMessage struct { MempoolSize uint64 ServerVersion string IsUtxoIndexed bool - IsTxIndexed bool - IsArchival bool + IsTxIndexed bool + IsArchival bool IsSynced bool Error *RPCError @@ -37,15 +37,15 @@ func (msg *GetInfoResponseMessage) Command() MessageCommand { } // NewGetInfoResponseMessage returns a instance of the message -func NewGetInfoResponseMessage(p2pID string, mempoolSize uint64, serverVersion string, isUtxoIndexed bool, +func NewGetInfoResponseMessage(p2pID string, mempoolSize uint64, serverVersion string, isUtxoIndexed bool, isTxIndexed bool, isArchival bool, isSynced bool) *GetInfoResponseMessage { return &GetInfoResponseMessage{ P2PID: p2pID, MempoolSize: mempoolSize, ServerVersion: serverVersion, IsUtxoIndexed: isUtxoIndexed, - IsTxIndexed: isTxIndexed, - IsArchival: isArchival, + IsTxIndexed: isTxIndexed, + IsArchival: isArchival, IsSynced: isSynced, } } diff --git a/app/appmessage/rpc_modify_notifying_addresses_txs.go b/app/appmessage/rpc_modify_notifying_addresses_txs.go index b446655858..e3d306e913 100644 --- a/app/appmessage/rpc_modify_notifying_addresses_txs.go +++ b/app/appmessage/rpc_modify_notifying_addresses_txs.go @@ -1,13 +1,15 @@ package appmessage +// ModifyNotifyingAddressesTxsRequestMessage is an appmessage corresponding to +// its respective RPC message type ModifyNotifyingAddressesTxsRequestMessage struct { baseMessage - AddAddresses []string - RemoveAddresses []string - RequiredConfirmations uint32 - IncludePending bool - IncludeSending bool - IncludeReceiving bool + AddAddresses []string + RemoveAddresses []string + RequiredConfirmations uint32 + IncludePending bool + IncludeSending bool + IncludeReceiving bool } // Command returns the protocol command string for the message @@ -16,16 +18,16 @@ func (msg *ModifyNotifyingAddressesTxsRequestMessage) Command() MessageCommand { } // NewModifyNotifyingAddressesTxsRequestMessage returns a instance of the message -func NewModifyNotifyingAddressesTxsRequestMessage(addAddresses []string, removeAddresses []string, - requiredConfirmations uint32, includePending bool, includeSending bool, +func NewModifyNotifyingAddressesTxsRequestMessage(addAddresses []string, removeAddresses []string, + requiredConfirmations uint32, includePending bool, includeSending bool, includeReceiving bool) *ModifyNotifyingAddressesTxsRequestMessage { return &ModifyNotifyingAddressesTxsRequestMessage{ - AddAddresses: addAddresses, - RemoveAddresses: removeAddresses, - RequiredConfirmations: requiredConfirmations, - IncludePending: includePending, - IncludeSending: includeSending, - IncludeReceiving: includeReceiving, + AddAddresses: addAddresses, + RemoveAddresses: removeAddresses, + RequiredConfirmations: requiredConfirmations, + IncludePending: includePending, + IncludeSending: includeSending, + IncludeReceiving: includeReceiving, } } @@ -41,7 +43,7 @@ func (msg *ModifyNotifyingAddressesTxsResponseMessage) Command() MessageCommand return CmdModifyNotifyingAddressesTxsResponseMessage } -// NewModifyNotifyingAddressesTxsesponseMessage returns a instance of the message +// NewModifyNotifyingAddressesTxsResponseMessage returns a instance of the message func NewModifyNotifyingAddressesTxsResponseMessage() *NotifyAddressesTxsResponseMessage { return &NotifyAddressesTxsResponseMessage{} } diff --git a/app/appmessage/rpc_modify_notifying_txs_confirmation_changed.go b/app/appmessage/rpc_modify_notifying_txs_confirmation_changed.go index 489f151829..910af4db24 100644 --- a/app/appmessage/rpc_modify_notifying_txs_confirmation_changed.go +++ b/app/appmessage/rpc_modify_notifying_txs_confirmation_changed.go @@ -1,11 +1,13 @@ package appmessage +// ModifyNotifyingTxsConfirmationChangedRequestMessage is an appmessage corresponding to +// its respective RPC message type ModifyNotifyingTxsConfirmationChangedRequestMessage struct { baseMessage - AddTxIDs []string - RemoveTxIDs []string - RequiredConfirmations uint32 - IncludePending bool + AddTxIDs []string + RemoveTxIDs []string + RequiredConfirmations uint32 + IncludePending bool } // Command returns the protocol command string for the message @@ -14,13 +16,13 @@ func (msg *ModifyNotifyingTxsConfirmationChangedRequestMessage) Command() Messag } // NewModifyNotifyingTxsConfirmationChangedRequestMessage returns a instance of the message -func NewModifyNotifyingTxsConfirmationChangedRequestMessage(addTxIDs []string, removeTxIDs []string, +func NewModifyNotifyingTxsConfirmationChangedRequestMessage(addTxIDs []string, removeTxIDs []string, requiredConfirmations uint32, includePending bool) *ModifyNotifyingTxsConfirmationChangedRequestMessage { return &ModifyNotifyingTxsConfirmationChangedRequestMessage{ - AddTxIDs: addTxIDs, - RemoveTxIDs: removeTxIDs, - RequiredConfirmations: requiredConfirmations, - IncludePending: includePending, + AddTxIDs: addTxIDs, + RemoveTxIDs: removeTxIDs, + RequiredConfirmations: requiredConfirmations, + IncludePending: includePending, } } @@ -36,7 +38,7 @@ func (msg *ModifyNotifyingTxsConfirmationChangedResponseMessage) Command() Messa return CmdModifyNotifyingTxsConfirmationChangedResponseMessage } -// NewModifyNotifyingTXChangedResponseMessage returns a instance of the message +// NewModifyNotifyingTxsChangedResponseMessage returns a instance of the message func NewModifyNotifyingTxsChangedResponseMessage() *NotifyTxsConfirmationChangedResponseMessage { return &NotifyTxsConfirmationChangedResponseMessage{} } diff --git a/app/appmessage/rpc_notify_addresses_txs.go b/app/appmessage/rpc_notify_addresses_txs.go index 029c06cb05..a23daba36f 100644 --- a/app/appmessage/rpc_notify_addresses_txs.go +++ b/app/appmessage/rpc_notify_addresses_txs.go @@ -1,15 +1,14 @@ - package appmessage // NotifyAddressesTxsRequestMessage is an appmessage corresponding to // its respective RPC message type NotifyAddressesTxsRequestMessage struct { baseMessage - Addresses []string - RequiredConfirmations uint32 - IncludePending bool - IncludeSending bool - IncludeReceiving bool + Addresses []string + RequiredConfirmations uint32 + IncludePending bool + IncludeSending bool + IncludeReceiving bool } // Command returns the protocol command string for the message @@ -18,14 +17,14 @@ func (msg *NotifyAddressesTxsRequestMessage) Command() MessageCommand { } // NewNotifyAddressesTxsRequestMessage returns a instance of the message -func NewNotifyAddressesTxsRequestMessage(addresses []string, requiredConfirmations uint32, +func NewNotifyAddressesTxsRequestMessage(addresses []string, requiredConfirmations uint32, includePending bool, includeSending bool, includeReceiving bool) *NotifyAddressesTxsRequestMessage { return &NotifyAddressesTxsRequestMessage{ - Addresses: addresses, - RequiredConfirmations: requiredConfirmations, - IncludePending: includePending, - IncludeSending: includeSending, - IncludeReceiving: includeReceiving, + Addresses: addresses, + RequiredConfirmations: requiredConfirmations, + IncludePending: includePending, + IncludeSending: includeSending, + IncludeReceiving: includeReceiving, } } @@ -41,7 +40,7 @@ func (msg *NotifyAddressesTxsResponseMessage) Command() MessageCommand { return CmdNotifyAddressesTxsResponseMessage } -// NewNotifyTXChangedResponseMessage returns a instance of the message +// NewNotifyAddressesTxsResponseMessage returns a instance of the message func NewNotifyAddressesTxsResponseMessage() *NotifyAddressesTxsResponseMessage { return &NotifyAddressesTxsResponseMessage{} } @@ -51,10 +50,9 @@ func NewNotifyAddressesTxsResponseMessage() *NotifyAddressesTxsResponseMessage { type AddressesTxsNotificationMessage struct { baseMessage RequiredConfirmations uint32 - Pending *TxEntriesByAddresses - Confirmed *TxEntriesByAddresses - Unconfirmed *TxEntriesByAddresses - + Pending *TxEntriesByAddresses + Confirmed *TxEntriesByAddresses + Unconfirmed *TxEntriesByAddresses } // Command returns the protocol command string for the message @@ -63,27 +61,27 @@ func (msg *AddressesTxsNotificationMessage) Command() MessageCommand { } // NewAddressesTxsNotificationMessage returns a instance of the message -func NewAddressesTxsNotificationMessage(requiredConfirmations uint32, pending *TxEntriesByAddresses, +func NewAddressesTxsNotificationMessage(requiredConfirmations uint32, pending *TxEntriesByAddresses, confirmed *TxEntriesByAddresses, unconfirmed *TxEntriesByAddresses) *AddressesTxsNotificationMessage { return &AddressesTxsNotificationMessage{ RequiredConfirmations: requiredConfirmations, - Pending: pending, - Confirmed: confirmed, - Unconfirmed: unconfirmed, + Pending: pending, + Confirmed: confirmed, + Unconfirmed: unconfirmed, } } // TxEntriesByAddresses is an appmessage corresponding to // its respective RPC message type TxEntriesByAddresses struct { - Sent []*TxEntryByAddress + Sent []*TxEntryByAddress Received []*TxEntryByAddress } // TxEntryByAddress is an appmessage corresponding to // its respective RPC message type TxEntryByAddress struct { - Address string - TxID string + Address string + TxID string Confirmations uint32 -} \ No newline at end of file +} diff --git a/app/appmessage/rpc_notify_txs_confirmation_changed.go b/app/appmessage/rpc_notify_txs_confirmation_changed.go index b8d1077997..63d28bcb57 100644 --- a/app/appmessage/rpc_notify_txs_confirmation_changed.go +++ b/app/appmessage/rpc_notify_txs_confirmation_changed.go @@ -4,9 +4,9 @@ package appmessage // its respective RPC message type NotifyTxsConfirmationChangedRequestMessage struct { baseMessage - TxIDs []string - RequiredConfirmations uint32 - IncludePending bool + TxIDs []string + RequiredConfirmations uint32 + IncludePending bool } // Command returns the protocol command string for the message @@ -15,12 +15,12 @@ func (msg *NotifyTxsConfirmationChangedRequestMessage) Command() MessageCommand } // NewNotifyTxsConfirmationChangedRequestMessage returns a instance of the message -func NewNotifyTxsConfirmationChangedRequestMessage(TxIDs []string, requiredConfirmations uint32, +func NewNotifyTxsConfirmationChangedRequestMessage(TxIDs []string, requiredConfirmations uint32, includePending bool) *NotifyTxsConfirmationChangedRequestMessage { return &NotifyTxsConfirmationChangedRequestMessage{ - TxIDs: TxIDs, - RequiredConfirmations: requiredConfirmations, - IncludePending: includePending, + TxIDs: TxIDs, + RequiredConfirmations: requiredConfirmations, + IncludePending: includePending, } } @@ -36,7 +36,7 @@ func (msg *NotifyTxsConfirmationChangedResponseMessage) Command() MessageCommand return CmdNotifyTxsConfirmationChangedResponseMessage } -// NewNotifyTXChangedResponseMessage returns a instance of the message +// NewNotifyTxsChangedResponseMessage returns a instance of the message func NewNotifyTxsChangedResponseMessage() *NotifyTxsConfirmationChangedResponseMessage { return &NotifyTxsConfirmationChangedResponseMessage{} } @@ -46,10 +46,9 @@ func NewNotifyTxsChangedResponseMessage() *NotifyTxsConfirmationChangedResponseM type TxsConfirmationChangedNotificationMessage struct { baseMessage RequiredConfirmations uint32 - Pending []*TxIDConfirmationsPair - Confirmed []*TxIDConfirmationsPair - UnconfirmedTxIds []string - + Pending []*TxIDConfirmationsPair + Confirmed []*TxIDConfirmationsPair + UnconfirmedTxIds []string } // Command returns the protocol command string for the message @@ -58,12 +57,12 @@ func (msg *TxsConfirmationChangedNotificationMessage) Command() MessageCommand { } // NewTxsChangedNotificationMessage returns a instance of the message -func NewTxsChangedNotificationMessage(requiredConfirmations uint32, pending []*TxIDConfirmationsPair, - confirmed []*TxIDConfirmationsPair, unconfirmedTxIds []string) *TxsConfirmationChangedNotificationMessage { +func NewTxsChangedNotificationMessage(requiredConfirmations uint32, pending []*TxIDConfirmationsPair, + confirmed []*TxIDConfirmationsPair, unconfirmedTxIds []string) *TxsConfirmationChangedNotificationMessage { return &TxsConfirmationChangedNotificationMessage{ RequiredConfirmations: requiredConfirmations, - Pending: pending, - Confirmed: confirmed, - UnconfirmedTxIds : unconfirmedTxIds , + Pending: pending, + Confirmed: confirmed, + UnconfirmedTxIds: unconfirmedTxIds, } } diff --git a/app/appmessage/rpc_submit_transaction.go b/app/appmessage/rpc_submit_transaction.go index 01a90b5af1..84cbdcae68 100644 --- a/app/appmessage/rpc_submit_transaction.go +++ b/app/appmessage/rpc_submit_transaction.go @@ -97,12 +97,12 @@ type RPCUTXOEntry struct { // RPCTransactionVerboseData holds verbose data about a transaction type RPCTransactionVerboseData struct { - TransactionID string - Hash string - Mass uint64 - BlockHash string - BlockTime uint64 - TxIndexed bool + TransactionID string + Hash string + Mass uint64 + BlockHash string + BlockTime uint64 + TxIndexed bool AcceptingBlockHash string Confirmations uint32 } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_addresses_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_addresses_txs.go index 70be749f56..47256001de 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_addresses_txs.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_addresses_txs.go @@ -14,12 +14,12 @@ func (x *KaspadMessage_ModifyNotifyingAddressesTxsRequest) toAppMessage() (appme func (x *KaspadMessage_ModifyNotifyingAddressesTxsRequest) fromAppMessage(message *appmessage.ModifyNotifyingAddressesTxsRequestMessage) error { x.ModifyNotifyingAddressesTxsRequest = &ModifyNotifyingAddressesTxsRequestMessage{ - AddAddresses: message.AddAddresses, - RemoveAddresses: message.RemoveAddresses, + AddAddresses: message.AddAddresses, + RemoveAddresses: message.RemoveAddresses, RequiredConfirmations: message.RequiredConfirmations, - IncludePending: message.IncludePending, - IncludeSending: message.IncludeSending, - IncludeReceiving: message.IncludeReceiving, + IncludePending: message.IncludePending, + IncludeSending: message.IncludeSending, + IncludeReceiving: message.IncludeReceiving, } return nil } @@ -29,12 +29,12 @@ func (x *ModifyNotifyingAddressesTxsRequestMessage) toAppMessage() (appmessage.M return nil, errors.Wrapf(errorNil, "ModifyNotifyingAddressesTxsRequestMessage is nil") } return &appmessage.ModifyNotifyingAddressesTxsRequestMessage{ - AddAddresses: x.AddAddresses, - RemoveAddresses: x.RemoveAddresses, + AddAddresses: x.AddAddresses, + RemoveAddresses: x.RemoveAddresses, RequiredConfirmations: x.RequiredConfirmations, - IncludePending: x.IncludePending, - IncludeSending: x.IncludeSending, - IncludeReceiving: x.IncludeReceiving, + IncludePending: x.IncludePending, + IncludeSending: x.IncludeSending, + IncludeReceiving: x.IncludeReceiving, }, nil } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_txs_confirmation_changed.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_txs_confirmation_changed.go index 01bcef4bdf..6c3b800543 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_txs_confirmation_changed.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_modify_notifying_txs_confirmation_changed.go @@ -14,10 +14,10 @@ func (x *KaspadMessage_ModifyNotifyingTxsConfirmationChangedRequest) toAppMessag func (x *KaspadMessage_ModifyNotifyingTxsConfirmationChangedRequest) fromAppMessage(message *appmessage.ModifyNotifyingTxsConfirmationChangedRequestMessage) error { x.ModifyNotifyingTxsConfirmationChangedRequest = &ModifyNotifyingTxsConfirmationChangedRequestMessage{ - AddTxIDs: message.AddTxIDs, - RemoveTxIDs: message.RemoveTxIDs, + AddTxIDs: message.AddTxIDs, + RemoveTxIDs: message.RemoveTxIDs, RequiredConfirmations: message.RequiredConfirmations, - IncludePending: message.IncludePending, + IncludePending: message.IncludePending, } return nil } @@ -27,10 +27,10 @@ func (x *ModifyNotifyingTxsConfirmationChangedRequestMessage) toAppMessage() (ap return nil, errors.Wrapf(errorNil, "ModifyNotifyingTxsConfirmationChangedRequestMessage is nil") } return &appmessage.ModifyNotifyingTxsConfirmationChangedRequestMessage{ - AddTxIDs: x.AddTxIDs, - RemoveTxIDs: x.RemoveTxIDs, + AddTxIDs: x.AddTxIDs, + RemoveTxIDs: x.RemoveTxIDs, RequiredConfirmations: x.RequiredConfirmations, - IncludePending: x.IncludePending, + IncludePending: x.IncludePending, }, nil } @@ -55,7 +55,6 @@ func (x *ModifyNotifyingTxsConfirmationChangedResponseMessage) toAppMessage() (a }, nil } - func (x *KaspadMessage_ModifyNotifyingTxsConfirmationChangedResponse) fromAppMessage(message *appmessage.ModifyNotifyingTxsConfirmationChangedResponseMessage) error { var err *RPCError if message.Error != nil { diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go index 5b0c7ce5ac..7fc4ef1e61 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_addresses_txs.go @@ -14,11 +14,11 @@ func (x *KaspadMessage_NotifyAddressesTxsRequest) toAppMessage() (appmessage.Mes func (x *KaspadMessage_NotifyAddressesTxsRequest) fromAppMessage(message *appmessage.NotifyAddressesTxsRequestMessage) error { x.NotifyAddressesTxsRequest = &NotifyAddressesTxsRequestMessage{ - Addresses : message.Addresses, + Addresses: message.Addresses, RequiredConfirmations: message.RequiredConfirmations, - IncludePending: message.IncludePending, - IncludeSending: message.IncludeSending, - IncludeReceiving: message.IncludeReceiving, + IncludePending: message.IncludePending, + IncludeSending: message.IncludeSending, + IncludeReceiving: message.IncludeReceiving, } return nil } @@ -28,11 +28,11 @@ func (x *NotifyAddressesTxsRequestMessage) toAppMessage() (appmessage.Message, e return nil, errors.Wrapf(errorNil, "NotifyAddressesTxsRequestMessage is nil") } return &appmessage.NotifyAddressesTxsRequestMessage{ - Addresses : x.Addresses, + Addresses: x.Addresses, RequiredConfirmations: x.RequiredConfirmations, - IncludePending: x.IncludePending, - IncludeSending: x.IncludeSending, - IncludeReceiving: x.IncludeReceiving, + IncludePending: x.IncludePending, + IncludeSending: x.IncludeSending, + IncludeReceiving: x.IncludeReceiving, }, nil } @@ -88,9 +88,9 @@ func (x *KaspadMessage_AddressesTxsNotification) fromAppMessage(message *appmess x.AddressesTxsNotification = &AddressesTxsNotificationMessage{ RequiredConfirmations: message.RequiredConfirmations, - Pending: pending, - Confirmed: confirmed, - Unconfirmed: unconfirmed, + Pending: pending, + Confirmed: confirmed, + Unconfirmed: unconfirmed, } return nil } @@ -116,13 +116,12 @@ func (x *AddressesTxsNotificationMessage) toAppMessage() (appmessage.Message, er return &appmessage.AddressesTxsNotificationMessage{ RequiredConfirmations: x.RequiredConfirmations, - Pending: pending, - Confirmed: confirmed, - Unconfirmed: unconfirmed, + Pending: pending, + Confirmed: confirmed, + Unconfirmed: unconfirmed, }, nil } - func (x *TxEntriesByAddresses) toAppMessage() (*appmessage.TxEntriesByAddresses, error) { if x == nil { return nil, errors.Wrapf(errorNil, "TxEntriesByAddresses is nil") @@ -146,10 +145,9 @@ func (x *TxEntriesByAddresses) toAppMessage() (*appmessage.TxEntriesByAddresses, received[i] = entry } - return &appmessage.TxEntriesByAddresses{ - Sent: sent, - Received: received, + Sent: sent, + Received: received, }, nil } @@ -168,8 +166,8 @@ func (x *TxEntriesByAddresses) fromAppMessage(message *appmessage.TxEntriesByAdd } *x = TxEntriesByAddresses{ - Sent: sent, - Received: received, + Sent: sent, + Received: received, } } @@ -179,8 +177,8 @@ func (x *TxEntryByAddress) toAppMessage() (*appmessage.TxEntryByAddress, error) } return &appmessage.TxEntryByAddress{ - Address: x.Address, - TxID: x.TxId, + Address: x.Address, + TxID: x.TxId, Confirmations: x.Confirmations, }, nil } @@ -188,8 +186,8 @@ func (x *TxEntryByAddress) toAppMessage() (*appmessage.TxEntryByAddress, error) func (x *TxEntryByAddress) fromAppMessage(message *appmessage.TxEntryByAddress) { *x = TxEntryByAddress{ - Address: message.Address, - TxId: message.TxID, + Address: message.Address, + TxId: message.TxID, Confirmations: message.Confirmations, } } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_txs_confirmation_changed.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_txs_confirmation_changed.go index 7107761a72..ffbc203e96 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_txs_confirmation_changed.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_txs_confirmation_changed.go @@ -14,9 +14,9 @@ func (x *KaspadMessage_NotifyTxsConfirmationChangedRequst) toAppMessage() (appme func (x *KaspadMessage_NotifyTxsConfirmationChangedRequst) fromAppMessage(message *appmessage.NotifyTxsConfirmationChangedRequestMessage) error { x.NotifyTxsConfirmationChangedRequst = &NotifyTxsConfirmationChangedRequestMessage{ - TxIDs: message.TxIDs, + TxIDs: message.TxIDs, RequiredConfirmations: message.RequiredConfirmations, - IncludePending: message.IncludePending, + IncludePending: message.IncludePending, } return nil } @@ -26,9 +26,9 @@ func (x *NotifyTxsConfirmationChangedRequestMessage) toAppMessage() (appmessage. return nil, errors.Wrapf(errorNil, "NotifyTxsConfirmationChangedRequestMessage is nil") } return &appmessage.NotifyTxsConfirmationChangedRequestMessage{ - TxIDs: x.TxIDs, + TxIDs: x.TxIDs, RequiredConfirmations: x.RequiredConfirmations, - IncludePending: x.IncludePending, + IncludePending: x.IncludePending, }, nil } @@ -86,9 +86,9 @@ func (x *KaspadMessage_TxsConfirmationChangedNotification) fromAppMessage(messag x.TxsConfirmationChangedNotification = &TxsConfirmationChangedNotificationMessage{ RequiredConfirmations: message.RequiredConfirmations, - Pending: pending, - Confirmed: confirmed, - UnconfirmedTxIds : message.UnconfirmedTxIds , + Pending: pending, + Confirmed: confirmed, + UnconfirmedTxIds: message.UnconfirmedTxIds, } return nil } @@ -117,8 +117,8 @@ func (x *TxsConfirmationChangedNotificationMessage) toAppMessage() (appmessage.M return &appmessage.TxsConfirmationChangedNotificationMessage{ RequiredConfirmations: x.RequiredConfirmations, - Pending: pending, - Confirmed: confirmed, - UnconfirmedTxIds: x.UnconfirmedTxIds, + Pending: pending, + Confirmed: confirmed, + UnconfirmedTxIds: x.UnconfirmedTxIds, }, nil } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_submit_transaction.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_submit_transaction.go index 6741481f02..b43760b951 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_submit_transaction.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_submit_transaction.go @@ -294,27 +294,27 @@ func (x *RpcTransactionVerboseData) toAppMessage() (*appmessage.RPCTransactionVe return nil, errors.Wrapf(errorNil, "RpcTransactionVerboseData is nil") } return &appmessage.RPCTransactionVerboseData{ - TransactionID: x.TransactionId, - Hash: x.Hash, - Mass: x.Mass, - BlockHash: x.BlockHash, - BlockTime: x.BlockTime, - TxIndexed: x.TxIndexed, - AcceptingBlockHash: x.AcceptingBlockHash, - Confirmations: x.Confirmations, + TransactionID: x.TransactionId, + Hash: x.Hash, + Mass: x.Mass, + BlockHash: x.BlockHash, + BlockTime: x.BlockTime, + TxIndexed: x.TxIndexed, + AcceptingBlockHash: x.AcceptingBlockHash, + Confirmations: x.Confirmations, }, nil } func (x *RpcTransactionVerboseData) fromAppMessage(message *appmessage.RPCTransactionVerboseData) { *x = RpcTransactionVerboseData{ - TransactionId: message.TransactionID, - Hash: message.Hash, - Mass: message.Mass, - BlockHash: message.BlockHash, - BlockTime: message.BlockTime, - TxIndexed: message.TxIndexed, - AcceptingBlockHash: message.AcceptingBlockHash, - Confirmations: message.Confirmations, + TransactionId: message.TransactionID, + Hash: message.Hash, + Mass: message.Mass, + BlockHash: message.BlockHash, + BlockTime: message.BlockTime, + TxIndexed: message.TxIndexed, + AcceptingBlockHash: message.AcceptingBlockHash, + Confirmations: message.Confirmations, } } From cdcdfc426992778d60685621d8e15e42ddcde535 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Sun, 16 Oct 2022 17:12:09 +0200 Subject: [PATCH 44/47] start work on listening logic --- app/rpc/manager.go | 4 +- app/rpc/rpccontext/notificationmanager.go | 48 +++++++++- app/rpc/rpccontext/tx_changed.go | 85 ++++++++++++++++++ .../modify_notifying_addresses_txs.go | 49 +++++++++++ ...dify_notifying_txs_confirmation_changed.go | 44 ++++++++++ app/rpc/rpchandlers/notify_addresses_txs.go | 87 +++++++++++++++++++ .../notify_txs_confirmation_changed.go | 68 +++++++++++++++ domain/txindex/txindex.go | 13 ++- 8 files changed, 391 insertions(+), 7 deletions(-) create mode 100644 app/rpc/rpccontext/tx_changed.go create mode 100644 app/rpc/rpchandlers/modify_notifying_addresses_txs.go create mode 100644 app/rpc/rpchandlers/modify_notifying_txs_confirmation_changed.go create mode 100644 app/rpc/rpchandlers/notify_addresses_txs.go create mode 100644 app/rpc/rpchandlers/notify_txs_confirmation_changed.go diff --git a/app/rpc/manager.go b/app/rpc/manager.go index 44e2c7fcac..382820bc39 100644 --- a/app/rpc/manager.go +++ b/app/rpc/manager.go @@ -223,12 +223,12 @@ func (m *Manager) notifyTXsChanged(virtualChangeSet *externalapi.VirtualChangeSe onEnd := logger.LogAndMeasureExecutionTime(log, "RPCManager.NotifyTXsChanged") defer onEnd() - _, err := m.context.TXIndex.Update(virtualChangeSet) + txIndexChanges, err := m.context.TXIndex.Update(virtualChangeSet) if err != nil { return err } - return nil + return m.context.NotifyTXAcceptanceChange(txIndexChanges) } func (m *Manager) notifyPruningPointUTXOSetOverride() error { diff --git a/app/rpc/rpccontext/notificationmanager.go b/app/rpc/rpccontext/notificationmanager.go index bcd2db4d7c..cc7965a3d8 100644 --- a/app/rpc/rpccontext/notificationmanager.go +++ b/app/rpc/rpccontext/notificationmanager.go @@ -4,6 +4,7 @@ import ( "sync" "github.com/kaspanet/kaspad/domain/dagconfig" + "github.com/kaspanet/kaspad/domain/txindex" "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/kaspanet/kaspad/domain/consensus/utils/txscript" @@ -42,7 +43,9 @@ type NotificationListener struct { propagatePruningPointUTXOSetOverrideNotifications bool propagateNewBlockTemplateNotifications bool - propagateUTXOsChangedNotificationAddresses map[utxoindex.ScriptPublicKeyString]*UTXOsChangedNotificationAddress + propagateUTXOsChangedNotificationAddresses map[utxoindex.ScriptPublicKeyString]*UTXOsChangedNotificationAddress + propagateAddressesTxsNotifications TXsConfirmationChangedNotificationHolder + propagateTxsConfirmationChhangedNotifications TXsConfirmationChangedNotificationHolder includeAcceptedTransactionIDsInVirtualSelectedParentChainChangedNotifications bool } @@ -199,6 +202,29 @@ func (nm *NotificationManager) NotifyFinalityConflictResolved(notification *appm return nil } +// NotifyUTXOsChanged notifies the notification manager that UTXOs have been changed +func (nm *NotificationManager) NotifyTXAcceptanceChange(txChanges *txindex.TXAcceptanceChange) error { + nm.RLock() + defer nm.RUnlock() + + for router, listener := range nm.listeners { + if listener.propagateTXsConfirmationChangedNotifications { + // Filter utxoChanges and create a notification + notification, err := listener.convertUTXOChangesToUTXOsChangedNotification(utxoChanges) + if err != nil { + return err + } + + // Enqueue the notification + err = router.OutgoingRoute().MaybeEnqueue(notification) + if err != nil { + return err + } + } + } + return nil +} + // NotifyUTXOsChanged notifies the notification manager that UTXOs have been changed func (nm *NotificationManager) NotifyUTXOsChanged(utxoChanges *utxoindex.UTXOChanges) error { nm.RLock() @@ -367,6 +393,26 @@ func (nm *NotificationManager) PropagateUTXOsChangedNotifications(nl *Notificati } } +// PropagateUTXOsChangedNotifications instructs the listener to send UTXOs changed notifications +// to the remote listener for the given addresses. Subsequent calls instruct the listener to +// send UTXOs changed notifications for those addresses along with the old ones. Duplicate addresses +// are ignored. +func (nm *NotificationManager) PropagateTXsConfirmationChangedNotifications(nl *NotificationListener, addresses []*UTXOsChangedNotificationAddress) { + // Apply a write-lock since the internal listener address map is modified + nm.Lock() + defer nm.Unlock() + + if !nl.propagateUTXOsChangedNotifications { + nl.propagateUTXOsChangedNotifications = true + nl.propagateUTXOsChangedNotificationAddresses = + make(map[utxoindex.ScriptPublicKeyString]*UTXOsChangedNotificationAddress, len(addresses)) + } + + for _, address := range addresses { + nl.propagateUTXOsChangedNotificationAddresses[address.ScriptPublicKeyString] = address + } +} + // StopPropagatingUTXOsChangedNotifications instructs the listener to stop sending UTXOs // changed notifications to the remote listener for the given addresses. Addresses for which // notifications are not currently sent are ignored. diff --git a/app/rpc/rpccontext/tx_changed.go b/app/rpc/rpccontext/tx_changed.go new file mode 100644 index 0000000000..576603fc88 --- /dev/null +++ b/app/rpc/rpccontext/tx_changed.go @@ -0,0 +1,85 @@ +package rpccontext + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/domain/txindex" +) + +// TXsConfirmationChanged represents information for the TXsConfirmationChanged listener. +// This type is meant to be used in TXsChanged notifications +type TXsConfirmationChangedNotificationState struct { + RequiredConfirmations uint32 + IncludePending bool + RegisteredTxsToBlueScore txindex.TxIDsToBlueScores + UnregesiteredTxsBlueScore map[externalapi.DomainTransactionID]uint64 //this is bluescore when txid was either a) inserted into listener, or b) removed from listener +} + +func (ctx *Context) NewTXsConfirmationChangedNotificationState(txIds []*externalapi.DomainTransactionID, requiredConfirmations uint32, + includePending bool) (*TXsConfirmationChangedNotificationState, error) { + registeredTxsToBlueScore, NotFound, err := ctx.TXIndex.GetTXsBlueScores(txIds) + if err != nil { + return nil, err + } + virtualInfo, err := ctx.Domain.Consensus().GetVirtualInfo() + if err != nil { + return nil, err + } + + unregesiteredTxsBlueScore := make(txindex.TxIDsToBlueScores, len(NotFound)) + for _, txID := range NotFound { + unregesiteredTxsBlueScore[*txID] = virtualInfo.BlueScore + } + return &TXsConfirmationChangedNotificationState{ + RequiredConfirmations: requiredConfirmations, + IncludePending: includePending, + RegisteredTxsToBlueScore: registeredTxsToBlueScore, + UnregesiteredTxsBlueScore: unregesiteredTxsBlueScore, + }, nil +} + +func (tcc *TXsConfirmationChangedNotificationState) updateStateAndExtractConfirmations(txAcceptanceChange *txindex.TXAcceptanceChange) ( + pending []*appmessage.TxIDConfirmationsPair, confirmed []*appmessage.TxIDConfirmationsPair, unconfirmed []*appmessage.TxIDConfirmationsPair) { + + pending = make([]*appmessage.TxIDConfirmationsPair, 0) + confirmed = make([]*appmessage.TxIDConfirmationsPair, 0) + unconfirmed = make([]*appmessage.TxIDConfirmationsPair, 0) + + for txID := range txAcceptanceChange.Removed { + _, found := tcc.RegisteredTxsToBlueScore[txID] + if found { + delete(tcc.RegisteredTxsToBlueScore, txID) + tcc.UnregesiteredTxsBlueScore[txID] = txAcceptanceChange.BlueScore + } + } + for txID := range txAcceptanceChange.Added { + _, found := tcc.UnregesiteredTxsBlueScore[txID] + if !found { + delete(tcc.UnregesiteredTxsBlueScore, txID) + tcc.RegisteredTxsToBlueScore[txID] = txAcceptanceChange.BlueScore + } + } + + for txID, txBluescore := range tcc.RegisteredTxsToBlueScore { + confirmations := txAcceptanceChange.BlueScore - txBluescore + if confirmations >= tcc.RequiredConfirmations { + confirmed = append(confirmed, &appmessage.TxIDConfirmationsPair{TxID: txID, Confirmations: confirmations}) + } else if tcc.IncludePending { + pending = append(pending, &appmessage.TxIDConfirmationsPair{TxID: txID, Confirmations: confirmations}) + } + } + + for txID, txBluescore := range tcc.UnregesiteredTxsBlueScore { + unconfirmations := txAcceptanceChange.BlueScore - txBluescore + if unconfirmations >= tcc.RequiredConfirmations { + unconfirmed = append(unconfirmed, &appmessage.TxIDConfirmationsPair{TxID: txID, Confirmations: unconfirmations}) + delete(tcc.UnregesiteredTxsBlueScore, txID) + } + } + + if tcc.IncludePending { + return pending, confirmed, unconfirmed + } + + return nil, confirmed, unconfirmed +} \ No newline at end of file diff --git a/app/rpc/rpchandlers/modify_notifying_addresses_txs.go b/app/rpc/rpchandlers/modify_notifying_addresses_txs.go new file mode 100644 index 0000000000..e3d306e913 --- /dev/null +++ b/app/rpc/rpchandlers/modify_notifying_addresses_txs.go @@ -0,0 +1,49 @@ +package appmessage + +// ModifyNotifyingAddressesTxsRequestMessage is an appmessage corresponding to +// its respective RPC message +type ModifyNotifyingAddressesTxsRequestMessage struct { + baseMessage + AddAddresses []string + RemoveAddresses []string + RequiredConfirmations uint32 + IncludePending bool + IncludeSending bool + IncludeReceiving bool +} + +// Command returns the protocol command string for the message +func (msg *ModifyNotifyingAddressesTxsRequestMessage) Command() MessageCommand { + return CmdModifyNotifyingAddressesTxsRequestMessage +} + +// NewModifyNotifyingAddressesTxsRequestMessage returns a instance of the message +func NewModifyNotifyingAddressesTxsRequestMessage(addAddresses []string, removeAddresses []string, + requiredConfirmations uint32, includePending bool, includeSending bool, + includeReceiving bool) *ModifyNotifyingAddressesTxsRequestMessage { + return &ModifyNotifyingAddressesTxsRequestMessage{ + AddAddresses: addAddresses, + RemoveAddresses: removeAddresses, + RequiredConfirmations: requiredConfirmations, + IncludePending: includePending, + IncludeSending: includeSending, + IncludeReceiving: includeReceiving, + } +} + +// ModifyNotifyingAddressesTxsResponseMessage is an appmessage corresponding to +// its respective RPC message +type ModifyNotifyingAddressesTxsResponseMessage struct { + baseMessage + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *ModifyNotifyingAddressesTxsResponseMessage) Command() MessageCommand { + return CmdModifyNotifyingAddressesTxsResponseMessage +} + +// NewModifyNotifyingAddressesTxsResponseMessage returns a instance of the message +func NewModifyNotifyingAddressesTxsResponseMessage() *NotifyAddressesTxsResponseMessage { + return &NotifyAddressesTxsResponseMessage{} +} diff --git a/app/rpc/rpchandlers/modify_notifying_txs_confirmation_changed.go b/app/rpc/rpchandlers/modify_notifying_txs_confirmation_changed.go new file mode 100644 index 0000000000..910af4db24 --- /dev/null +++ b/app/rpc/rpchandlers/modify_notifying_txs_confirmation_changed.go @@ -0,0 +1,44 @@ +package appmessage + +// ModifyNotifyingTxsConfirmationChangedRequestMessage is an appmessage corresponding to +// its respective RPC message +type ModifyNotifyingTxsConfirmationChangedRequestMessage struct { + baseMessage + AddTxIDs []string + RemoveTxIDs []string + RequiredConfirmations uint32 + IncludePending bool +} + +// Command returns the protocol command string for the message +func (msg *ModifyNotifyingTxsConfirmationChangedRequestMessage) Command() MessageCommand { + return CmdModifyNotifyingTxsConfirmationChangedRequestMessage +} + +// NewModifyNotifyingTxsConfirmationChangedRequestMessage returns a instance of the message +func NewModifyNotifyingTxsConfirmationChangedRequestMessage(addTxIDs []string, removeTxIDs []string, + requiredConfirmations uint32, includePending bool) *ModifyNotifyingTxsConfirmationChangedRequestMessage { + return &ModifyNotifyingTxsConfirmationChangedRequestMessage{ + AddTxIDs: addTxIDs, + RemoveTxIDs: removeTxIDs, + RequiredConfirmations: requiredConfirmations, + IncludePending: includePending, + } +} + +// ModifyNotifyingTxsConfirmationChangedResponseMessage is an appmessage corresponding to +// its respective RPC message +type ModifyNotifyingTxsConfirmationChangedResponseMessage struct { + baseMessage + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *ModifyNotifyingTxsConfirmationChangedResponseMessage) Command() MessageCommand { + return CmdModifyNotifyingTxsConfirmationChangedResponseMessage +} + +// NewModifyNotifyingTxsChangedResponseMessage returns a instance of the message +func NewModifyNotifyingTxsChangedResponseMessage() *NotifyTxsConfirmationChangedResponseMessage { + return &NotifyTxsConfirmationChangedResponseMessage{} +} diff --git a/app/rpc/rpchandlers/notify_addresses_txs.go b/app/rpc/rpchandlers/notify_addresses_txs.go new file mode 100644 index 0000000000..a23daba36f --- /dev/null +++ b/app/rpc/rpchandlers/notify_addresses_txs.go @@ -0,0 +1,87 @@ +package appmessage + +// NotifyAddressesTxsRequestMessage is an appmessage corresponding to +// its respective RPC message +type NotifyAddressesTxsRequestMessage struct { + baseMessage + Addresses []string + RequiredConfirmations uint32 + IncludePending bool + IncludeSending bool + IncludeReceiving bool +} + +// Command returns the protocol command string for the message +func (msg *NotifyAddressesTxsRequestMessage) Command() MessageCommand { + return CmdNotifyAddressesTxsRequestMessage +} + +// NewNotifyAddressesTxsRequestMessage returns a instance of the message +func NewNotifyAddressesTxsRequestMessage(addresses []string, requiredConfirmations uint32, + includePending bool, includeSending bool, includeReceiving bool) *NotifyAddressesTxsRequestMessage { + return &NotifyAddressesTxsRequestMessage{ + Addresses: addresses, + RequiredConfirmations: requiredConfirmations, + IncludePending: includePending, + IncludeSending: includeSending, + IncludeReceiving: includeReceiving, + } +} + +// NotifyAddressesTxsResponseMessage is an appmessage corresponding to +// its respective RPC message +type NotifyAddressesTxsResponseMessage struct { + baseMessage + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *NotifyAddressesTxsResponseMessage) Command() MessageCommand { + return CmdNotifyAddressesTxsResponseMessage +} + +// NewNotifyAddressesTxsResponseMessage returns a instance of the message +func NewNotifyAddressesTxsResponseMessage() *NotifyAddressesTxsResponseMessage { + return &NotifyAddressesTxsResponseMessage{} +} + +// AddressesTxsNotificationMessage is an appmessage corresponding to +// its respective RPC message +type AddressesTxsNotificationMessage struct { + baseMessage + RequiredConfirmations uint32 + Pending *TxEntriesByAddresses + Confirmed *TxEntriesByAddresses + Unconfirmed *TxEntriesByAddresses +} + +// Command returns the protocol command string for the message +func (msg *AddressesTxsNotificationMessage) Command() MessageCommand { + return CmdAddressesTxsNotificationMessage +} + +// NewAddressesTxsNotificationMessage returns a instance of the message +func NewAddressesTxsNotificationMessage(requiredConfirmations uint32, pending *TxEntriesByAddresses, + confirmed *TxEntriesByAddresses, unconfirmed *TxEntriesByAddresses) *AddressesTxsNotificationMessage { + return &AddressesTxsNotificationMessage{ + RequiredConfirmations: requiredConfirmations, + Pending: pending, + Confirmed: confirmed, + Unconfirmed: unconfirmed, + } +} + +// TxEntriesByAddresses is an appmessage corresponding to +// its respective RPC message +type TxEntriesByAddresses struct { + Sent []*TxEntryByAddress + Received []*TxEntryByAddress +} + +// TxEntryByAddress is an appmessage corresponding to +// its respective RPC message +type TxEntryByAddress struct { + Address string + TxID string + Confirmations uint32 +} diff --git a/app/rpc/rpchandlers/notify_txs_confirmation_changed.go b/app/rpc/rpchandlers/notify_txs_confirmation_changed.go new file mode 100644 index 0000000000..63d28bcb57 --- /dev/null +++ b/app/rpc/rpchandlers/notify_txs_confirmation_changed.go @@ -0,0 +1,68 @@ +package appmessage + +// NotifyTxsConfirmationChangedRequestMessage is an appmessage corresponding to +// its respective RPC message +type NotifyTxsConfirmationChangedRequestMessage struct { + baseMessage + TxIDs []string + RequiredConfirmations uint32 + IncludePending bool +} + +// Command returns the protocol command string for the message +func (msg *NotifyTxsConfirmationChangedRequestMessage) Command() MessageCommand { + return CmdNotifyTxsConfirmationChangedRequestMessage +} + +// NewNotifyTxsConfirmationChangedRequestMessage returns a instance of the message +func NewNotifyTxsConfirmationChangedRequestMessage(TxIDs []string, requiredConfirmations uint32, + includePending bool) *NotifyTxsConfirmationChangedRequestMessage { + return &NotifyTxsConfirmationChangedRequestMessage{ + TxIDs: TxIDs, + RequiredConfirmations: requiredConfirmations, + IncludePending: includePending, + } +} + +// NotifyTxsConfirmationChangedResponseMessage is an appmessage corresponding to +// its respective RPC message +type NotifyTxsConfirmationChangedResponseMessage struct { + baseMessage + Error *RPCError +} + +// Command returns the protocol command string for the message +func (msg *NotifyTxsConfirmationChangedResponseMessage) Command() MessageCommand { + return CmdNotifyTxsConfirmationChangedResponseMessage +} + +// NewNotifyTxsChangedResponseMessage returns a instance of the message +func NewNotifyTxsChangedResponseMessage() *NotifyTxsConfirmationChangedResponseMessage { + return &NotifyTxsConfirmationChangedResponseMessage{} +} + +// TxsConfirmationChangedNotificationMessage is an appmessage corresponding to +// its respective RPC message +type TxsConfirmationChangedNotificationMessage struct { + baseMessage + RequiredConfirmations uint32 + Pending []*TxIDConfirmationsPair + Confirmed []*TxIDConfirmationsPair + UnconfirmedTxIds []string +} + +// Command returns the protocol command string for the message +func (msg *TxsConfirmationChangedNotificationMessage) Command() MessageCommand { + return CmdTxsConfirmationChangedNotificationMessage +} + +// NewTxsChangedNotificationMessage returns a instance of the message +func NewTxsChangedNotificationMessage(requiredConfirmations uint32, pending []*TxIDConfirmationsPair, + confirmed []*TxIDConfirmationsPair, unconfirmedTxIds []string) *TxsConfirmationChangedNotificationMessage { + return &TxsConfirmationChangedNotificationMessage{ + RequiredConfirmations: requiredConfirmations, + Pending: pending, + Confirmed: confirmed, + UnconfirmedTxIds: unconfirmedTxIds, + } +} diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index dba05af1c8..862b9c078e 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -187,7 +187,12 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai if err != nil { return err } - for i, acceptingBlock := range chainBlocksChunk { + for i, acceptingBlockHash := range chainBlocksChunk { + acceptingBlockHeader, err := ti.domain.Consensus().GetBlockHeader(acceptingBlockHash) + if err != nil { + return err + } + acceptingBlueScore := acceptingBlockHeader.BlueScore() chainBlockAcceptanceData := chainBlocksAcceptanceData[i] for _, blockAcceptanceData := range chainBlockAcceptanceData { for j, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { @@ -199,9 +204,9 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai transactionID := consensushashing.TransactionID(transactionAcceptanceData.Transaction) ti.store.add( *transactionID, - uint32(j), //index of including block where transaction is found - blockAcceptanceData.BlockHash, //this is the including block - acceptingBlock, //this is the accepting block + uint32(j), // index of including block where transaction is found + blockAcceptanceData.BlockHash, // this is the including block + acceptingBlockHash, // this is the accepting block ) } } From fa5423eedd97ba04e07722397a717fd638f3eb84 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Fri, 21 Oct 2022 20:15:05 +0200 Subject: [PATCH 45/47] add addrsindex to txindex. --- app/rpc/rpccontext/tx_changed.go | 50 +++- domain/txindex/model.go | 22 +- domain/txindex/serialization.go | 66 +++++ domain/txindex/store.go | 278 +++++++++++++++--- domain/txindex/txindex.go | 74 +++-- .../server/grpcserver/protowire/rpc.proto | 7 +- 6 files changed, 423 insertions(+), 74 deletions(-) diff --git a/app/rpc/rpccontext/tx_changed.go b/app/rpc/rpccontext/tx_changed.go index 576603fc88..2330f8be0c 100644 --- a/app/rpc/rpccontext/tx_changed.go +++ b/app/rpc/rpccontext/tx_changed.go @@ -49,30 +49,30 @@ func (tcc *TXsConfirmationChangedNotificationState) updateStateAndExtractConfirm _, found := tcc.RegisteredTxsToBlueScore[txID] if found { delete(tcc.RegisteredTxsToBlueScore, txID) - tcc.UnregesiteredTxsBlueScore[txID] = txAcceptanceChange.BlueScore + tcc.UnregesiteredTxsBlueScore[txID] = txAcceptanceChange.VirtualBlueScore } } for txID := range txAcceptanceChange.Added { _, found := tcc.UnregesiteredTxsBlueScore[txID] if !found { delete(tcc.UnregesiteredTxsBlueScore, txID) - tcc.RegisteredTxsToBlueScore[txID] = txAcceptanceChange.BlueScore + tcc.RegisteredTxsToBlueScore[txID] = txAcceptanceChange.VirtualBlueScore } } for txID, txBluescore := range tcc.RegisteredTxsToBlueScore { - confirmations := txAcceptanceChange.BlueScore - txBluescore + confirmations := uint32(txAcceptanceChange.VirtualBlueScore - txBluescore) if confirmations >= tcc.RequiredConfirmations { - confirmed = append(confirmed, &appmessage.TxIDConfirmationsPair{TxID: txID, Confirmations: confirmations}) + confirmed = append(confirmed, &appmessage.TxIDConfirmationsPair{TxID: txID.String(), Confirmations: int64(confirmations)}) } else if tcc.IncludePending { - pending = append(pending, &appmessage.TxIDConfirmationsPair{TxID: txID, Confirmations: confirmations}) + pending = append(pending, &appmessage.TxIDConfirmationsPair{TxID: txID.String(), Confirmations: int64(confirmations)}) } } for txID, txBluescore := range tcc.UnregesiteredTxsBlueScore { - unconfirmations := txAcceptanceChange.BlueScore - txBluescore + unconfirmations := uint32(txAcceptanceChange.VirtualBlueScore - txBluescore) if unconfirmations >= tcc.RequiredConfirmations { - unconfirmed = append(unconfirmed, &appmessage.TxIDConfirmationsPair{TxID: txID, Confirmations: unconfirmations}) + unconfirmed = append(unconfirmed, &appmessage.TxIDConfirmationsPair{TxID: txID.String(), Confirmations: int64(unconfirmations)}) delete(tcc.UnregesiteredTxsBlueScore, txID) } } @@ -82,4 +82,38 @@ func (tcc *TXsConfirmationChangedNotificationState) updateStateAndExtractConfirm } return nil, confirmed, unconfirmed -} \ No newline at end of file +} + +// TXsConfirmationChanged represents information for the TXsConfirmationChanged listener. +// This type is meant to be used in TXsChanged notifications +type AddressesTxsNotificationState struct { + RequiredConfirmations uint32 + IncludePending bool + IncludeSpending bool + IncludeReciving bool + RegisteredScriptPublicKeysToTxIdsToBlueScores map[string]txindex.TxIDsToBlueScores + UnregesiteredcriptPublicKeysToTxIdsToBlueScores map[string]txindex.TxIDsToBlueScores //this is bluescore when txid was either a) inserted into listener, or b) removed from listener +} + +func (ctx *Context) AddressesTxsNotificationState(txIds []*externalapi.DomainTransactionID, requiredConfirmations uint32, + includePending bool) (*TXsConfirmationChangedNotificationState, error) { + registeredTxsToBlueScore, NotFound, err := ctx.TXIndex.GetTXsBlueScores(txIds) + if err != nil { + return nil, err + } + virtualInfo, err := ctx.Domain.Consensus().GetVirtualInfo() + if err != nil { + return nil, err + } + + unregesiteredTxsBlueScore := make(txindex.TxIDsToBlueScores, len(NotFound)) + for _, txID := range NotFound { + unregesiteredTxsBlueScore[*txID] = virtualInfo.BlueScore + } + return &TXsConfirmationChangedNotificationState{ + RequiredConfirmations: requiredConfirmations, + IncludePending: includePending, + RegisteredTxsToBlueScore: registeredTxsToBlueScore, + UnregesiteredTxsBlueScore: unregesiteredTxsBlueScore, + }, nil +} diff --git a/domain/txindex/model.go b/domain/txindex/model.go index e5d1fa1fae..3053ec2ce5 100644 --- a/domain/txindex/model.go +++ b/domain/txindex/model.go @@ -4,14 +4,28 @@ import ( "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" ) -// TXAcceptanceChange is the set of changes made to the TX index after +// TXsChanges is the set of changes made to the TX index after // a successful update -type TXAcceptanceChange struct { - Added map[externalapi.DomainTransactionID]*TxData - Removed map[externalapi.DomainTransactionID]*TxData +type TXsChanges struct { + Added TxChange + Removed TxChange } +type AddrsChanges struct { + AddedSent AddrsChange + RemovedSent AddrsChange + AddedReceived AddrsChange + RemovedReceived AddrsChange +} + +type TxChange map[externalapi.DomainTransactionID]*TxData +type AddrsChange map[ScriptPublicKeyString][]*externalapi.DomainTransactionID + +type VirtualBlueScore uint64 + +type ScriptPublicKeyString string //TxData holds tx data stored in the TXIndex database + type TxData struct { IncludingBlockHash *externalapi.DomainHash AcceptingBlockHash *externalapi.DomainHash diff --git a/domain/txindex/serialization.go b/domain/txindex/serialization.go index f5e0897b12..bdef8ee6af 100644 --- a/domain/txindex/serialization.go +++ b/domain/txindex/serialization.go @@ -42,6 +42,72 @@ func deserializeHashes(serializedHashes []byte) ([]*externalapi.DomainHash, erro return hashes, nil } +func serializeTxIds(deserializedTransactionIds []*externalapi.DomainTransactionID) []byte { + serializedHashes := make([]byte, externalapi.DomainHashSize * len(deserializedTransactionIds)) + for i, transactionId := range deserializedTransactionIds { + start := hashesLengthSize + externalapi.DomainHashSize*i + end := start + externalapi.DomainHashSize + copy(serializedHashes[start:end], transactionId.ByteSlice()) + } + return serializedHashes +} + +func deserializeTxIds(serializedTransactionIds []byte) ([]*externalapi.DomainTransactionID, error) { + length := len(serializedTransactionIds) / 32 + transactionIds := make([]*externalapi.DomainTransactionID, length) + for i := 0; i < length; i++ { + start := externalapi.DomainHashSize * i + end := start + externalapi.DomainHashSize + + if end > len(serializedTransactionIds) { + return nil, errors.Wrapf(io.ErrUnexpectedEOF, "unexpected EOF while deserializing transaction Ids") + } + + var err error + transactionIds[i], err = externalapi.NewDomainTransactionIDFromByteSlice(serializedTransactionIds[start:end]) + if err != nil { + return nil, err + } + } + + return transactionIds, nil +} + +func deserializeTxIdsToMap(serializedTransactionIds []byte) (map[*externalapi.DomainTransactionID]interface{}, error) { + length := len(serializedTransactionIds) / 32 + transactionIdsMap := make(map[*externalapi.DomainTransactionID]interface{}, length) + for i := 0; i < length; i++ { + start := externalapi.DomainHashSize * i + end := start + externalapi.DomainHashSize + + if end > len(serializedTransactionIds) { + return nil, errors.Wrapf(io.ErrUnexpectedEOF, "unexpected EOF while deserializing transaction Ids") + } + + var err error + transactionId, err := externalapi.NewDomainTransactionIDFromByteSlice(serializedTransactionIds[start:end]) + if err != nil { + return nil, err + } + transactionIdsMap[transactionId] = nil + + } + + return transactionIdsMap, nil +} + +func serializeTxIdsFromMap(deserializedTransactionIdsMap map[*externalapi.DomainTransactionID]interface{}) ([]byte) { + serializedTxIds := make([]byte, externalapi.DomainHashSize * len(deserializedTransactionIdsMap)) + i := 0 + for transactionId := range deserializedTransactionIdsMap { + start := hashesLengthSize + externalapi.DomainHashSize* i + end := start + externalapi.DomainHashSize + copy(serializedTxIds[start:end], transactionId.ByteSlice()) + i++ + } + return serializedTxIds +} + func deserializeTxIndexData(serializedTxIndexData []byte) (*TxData, error) { var err error diff --git a/domain/txindex/store.go b/domain/txindex/store.go index 4bcb01f497..cadab52978 100644 --- a/domain/txindex/store.go +++ b/domain/txindex/store.go @@ -1,29 +1,45 @@ package txindex import ( + "encoding/binary" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/kaspanet/kaspad/infrastructure/db/database" "github.com/kaspanet/kaspad/infrastructure/logger" "github.com/pkg/errors" + "golang.org/x/exp/maps" ) var txAcceptedIndexBucket = database.MakeBucket([]byte("tx-index")) +var addrIndexSentBucket = database.MakeBucket([]byte("addr-index-sent")) +var addrIndexReceivedBucket = database.MakeBucket([]byte("addr-index-received")) + var virtualParentsKey = database.MakeBucket([]byte("")).Key([]byte("tx-index-virtual-parent")) +var virtualBlueScoreKey = database.MakeBucket([]byte("")).Key([]byte("tx-index-virtual-bluescore")) var pruningPointKey = database.MakeBucket([]byte("")).Key([]byte("tx-index-prunning-point")) type txIndexStore struct { - database database.Database - toAdd map[externalapi.DomainTransactionID]*TxData - toRemove map[externalapi.DomainTransactionID]*TxData - virtualParents []*externalapi.DomainHash - pruningPoint *externalapi.DomainHash + database database.Database + toAddTxs TxChange + toRemoveTxs TxChange + toAddSent AddrsChange + toRemoveSent AddrsChange + toAddReceived AddrsChange + toRemoveReceived AddrsChange + virtualParents []*externalapi.DomainHash + virtualBlueScore VirtualBlueScore + pruningPoint *externalapi.DomainHash } func newTXIndexStore(database database.Database) *txIndexStore { return &txIndexStore{ database: database, - toAdd: make(map[externalapi.DomainTransactionID]*TxData), - toRemove: make(map[externalapi.DomainTransactionID]*TxData), + toAddTxs: make(TxChange), + toRemoveTxs: make(TxChange), + toAddSent: make(AddrsChange), + toRemoveSent: make(AddrsChange), + toAddReceived: make(AddrsChange), + toRemoveReceived: make(AddrsChange), virtualParents: nil, pruningPoint: nil, } @@ -40,6 +56,11 @@ func (tis *txIndexStore) deleteAll() error { return err } + err = tis.database.Delete(virtualBlueScoreKey) + if err != nil { + return err + } + cursor, err := tis.database.Cursor(txAcceptedIndexBucket) if err != nil { return err @@ -61,32 +82,71 @@ func (tis *txIndexStore) deleteAll() error { } func (tis *txIndexStore) add(txID externalapi.DomainTransactionID, includingIndex uint32, - includingBlockHash *externalapi.DomainHash, acceptingBlockHash *externalapi.DomainHash) { + includingBlockHash *externalapi.DomainHash, acceptingBlockHash *externalapi.DomainHash, + sentAddrs []*externalapi.ScriptPublicKey, receivedAddrs []*externalapi.ScriptPublicKey) { log.Tracef("Adding %s Txs from blockHash %s", txID.String(), includingBlockHash.String()) - delete(tis.toRemove, txID) //adding takes precedence - tis.toAdd[txID] = &TxData{ + delete(tis.toRemoveTxs, txID) //adding takes precedence + tis.toAddTxs[txID] = &TxData{ IncludingBlockHash: includingBlockHash, IncludingIndex: includingIndex, AcceptingBlockHash: acceptingBlockHash, } + for _, sentAddrs := range sentAddrs{ + txIDs, found := tis.toAddSent[ScriptPublicKeyString(sentAddrs.String())] + if found { + tis.toAddSent[ScriptPublicKeyString(sentAddrs.String())] = append(txIDs, &txID) + } else { + tis.toAddSent[ScriptPublicKeyString(sentAddrs.String())] = []*externalapi.DomainTransactionID{&txID} + } + } + for _, receivedAddr := range receivedAddrs{ + txIDs, found := tis.toAddReceived[ScriptPublicKeyString(receivedAddr.String())] + if found { + tis.toAddReceived[ScriptPublicKeyString(receivedAddr.String())] = append(txIDs, &txID) + } else { + tis.toAddReceived[ScriptPublicKeyString(receivedAddr.String())] = []*externalapi.DomainTransactionID{&txID} + } + } } func (tis *txIndexStore) remove(txID externalapi.DomainTransactionID, includingIndex uint32, - includingBlockHash *externalapi.DomainHash, acceptingBlockHash *externalapi.DomainHash) { + includingBlockHash *externalapi.DomainHash, acceptingBlockHash *externalapi.DomainHash, + sentAddrs []*externalapi.ScriptPublicKey, receivedAddrs []*externalapi.ScriptPublicKey) { log.Tracef("Removing %s Txs from blockHash %s", txID.String(), includingBlockHash.String()) - if _, found := tis.toAdd[txID]; !found { //adding takes precedence - tis.toRemove[txID] = &TxData{ + if _, found := tis.toAddTxs[txID]; !found { //adding takes precedence + tis.toRemoveTxs[txID] = &TxData{ IncludingBlockHash: includingBlockHash, IncludingIndex: includingIndex, AcceptingBlockHash: acceptingBlockHash, } + for _, sentAddrs := range sentAddrs{ + txIDs, found := tis.toAddSent[ScriptPublicKeyString(sentAddrs.String())] + if found { + tis.toAddSent[ScriptPublicKeyString(sentAddrs.String())] = append(txIDs, &txID) + } else { + tis.toAddSent[ScriptPublicKeyString(sentAddrs.String())] = []*externalapi.DomainTransactionID{&txID} + } + } + for _, receivedAddr := range receivedAddrs{ + txIDs, found := tis.toAddReceived[ScriptPublicKeyString(receivedAddr.String())] + if found { + tis.toAddReceived[ScriptPublicKeyString(receivedAddr.String())] = append(txIDs, &txID) + } else { + tis.toAddReceived[ScriptPublicKeyString(receivedAddr.String())] = []*externalapi.DomainTransactionID{&txID} + } + } } } func (tis *txIndexStore) discardAllButPruningPoint() { - tis.toAdd = make(map[externalapi.DomainTransactionID]*TxData) - tis.toRemove = make(map[externalapi.DomainTransactionID]*TxData) + tis.toAddTxs = make(TxChange) + tis.toRemoveTxs = make(TxChange) + tis.toAddSent = make(AddrsChange) + tis.toRemoveSent = make(AddrsChange) + tis.toAddReceived = make(AddrsChange) + tis.toRemoveReceived = make(AddrsChange) tis.virtualParents = nil + tis.virtualBlueScore = 0 } func (tis *txIndexStore) commit() error { @@ -100,8 +160,8 @@ func (tis *txIndexStore) commit() error { defer dbTransaction.RollbackUnlessClosed() - for toAddTxID, txData := range tis.toAdd { - delete(tis.toRemove, toAddTxID) //safeguard + for toAddTxID, txData := range tis.toAddTxs { + delete(tis.toRemoveTxs, toAddTxID) //safeguard key := tis.convertTxIDToKey(txAcceptedIndexBucket, toAddTxID) dbTransaction.Put(key, serializeTxIndexData(txData)) if err != nil { @@ -109,7 +169,7 @@ func (tis *txIndexStore) commit() error { } } - for toRemoveTxID := range tis.toRemove { + for toRemoveTxID := range tis.toRemoveTxs { key := tis.convertTxIDToKey(txAcceptedIndexBucket, toRemoveTxID) err := dbTransaction.Delete(key) if err != nil { @@ -117,6 +177,120 @@ func (tis *txIndexStore) commit() error { } } + for scriptPublicKey, receivedTxsRemoved := range tis.toRemoveSent { + scriptPublicKey := externalapi.NewScriptPublicKeyFromString(string(scriptPublicKey)) + key := tis.convertScriptPublicKeyToKey(addrIndexSentBucket, scriptPublicKey) + serializedTxIds, err := tis.database.Get(key) + if err != nil { + return err + } + TxIdsSet, err := deserializeTxIdsToMap(serializedTxIds) + if err != nil { + return err + } + for _, receivedTxIdToRemove := range receivedTxsRemoved { + delete(TxIdsSet, receivedTxIdToRemove) + } + + serializedTxIds = serializeTxIdsFromMap(TxIdsSet) + + err = tis.database.Put(key, serializedTxIds) + if err != nil { + return err + } + } + + for scriptPublicKey, receivedTxsRemoved := range tis.toRemoveReceived { + scriptPublicKey := externalapi.NewScriptPublicKeyFromString(string(scriptPublicKey)) + key := tis.convertScriptPublicKeyToKey(addrIndexReceivedBucket, scriptPublicKey) + serializedTxIds, err := tis.database.Get(key) + if err != nil { + return err + } + TxIdsSet, err := deserializeTxIdsToMap(serializedTxIds) + if err != nil { + return err + } + for _, receivedTxIdToRemove := range receivedTxsRemoved { + delete(TxIdsSet, receivedTxIdToRemove) + } + + serializedTxIds = serializeTxIdsFromMap(TxIdsSet) + + err = tis.database.Put(key, serializedTxIds) + if err != nil { + return err + } + } + + for scriptPublicKey, sentTxsAdded := range tis.toAddSent { + scriptPublicKey := externalapi.NewScriptPublicKeyFromString(string(scriptPublicKey)) + key := tis.convertScriptPublicKeyToKey(addrIndexSentBucket, scriptPublicKey) + found, err := tis.database.Has(key) + if err != nil { + return err + } + if found{ + serializedTxIds, err := tis.database.Get(key) + if err != nil { + return err + } + TxIdsSet, err := deserializeTxIdsToMap(serializedTxIds) + if err != nil { + return err + } + newTxIds := make([]*externalapi.DomainTransactionID, 0) + for _, sentTxId := range sentTxsAdded { + if _, found := TxIdsSet[sentTxId]; found { + continue + } + newTxIds = append(newTxIds, sentTxId) + } + sentTxsAdded = newTxIds + + } + serializedTxIds := serializeTxIds(sentTxsAdded) + + err = tis.database.Put(key, serializedTxIds) + if err != nil { + return err + } + } + + for scriptPublicKey, receivedTxsAdded := range tis.toAddReceived { + scriptPublicKey := externalapi.NewScriptPublicKeyFromString(string(scriptPublicKey)) + key := tis.convertScriptPublicKeyToKey(addrIndexReceivedBucket, scriptPublicKey) + found, err := tis.database.Has(key) + if err != nil { + return err + } + if found { + serializedTxIds, err := tis.database.Get(key) + if err != nil { + return err + } + TxIdsSet, err := deserializeTxIdsToMap(serializedTxIds) + if err != nil { + return err + } + newTxIds := make([]*externalapi.DomainTransactionID, 0) + for _, recivedTxIdToAdd := range receivedTxsAdded { + if _, found := TxIdsSet[recivedTxIdToAdd]; found { + continue + } + newTxIds = append(newTxIds, recivedTxIdToAdd) + } + receivedTxsAdded = newTxIds + + } + serializedTxIds := serializeTxIds(receivedTxsAdded) + + err = tis.database.Put(key, serializedTxIds) + if err != nil { + return err + } + } + err = dbTransaction.Put(virtualParentsKey, serializeHashes(tis.virtualParents)) if err != nil { return err @@ -148,8 +322,8 @@ func (tis *txIndexStore) updateAndCommitPruningPointWithoutTransaction(pruningPo } func (tis *txIndexStore) commitTxIDsWithoutTransaction() error { - for txID, txData := range tis.toAdd { - delete(tis.toRemove, txID) //adding takes precedence + for txID, txData := range tis.toAddTxs { + delete(tis.toRemoveTxs, txID) //adding takes precedence key := tis.convertTxIDToKey(txAcceptedIndexBucket, txID) err := tis.database.Put(key, serializeTxIndexData(txData)) if err != nil { @@ -157,7 +331,7 @@ func (tis *txIndexStore) commitTxIDsWithoutTransaction() error { } } - for txID := range tis.toRemove { //safer to remove first + for txID := range tis.toRemoveTxs { //safer to remove first key := tis.convertTxIDToKey(txAcceptedIndexBucket, txID) err := tis.database.Delete(key) if err != nil { @@ -194,29 +368,61 @@ func (tis *txIndexStore) getPruningPoint() (*externalapi.DomainHash, error) { return externalapi.NewDomainHashFromByteSlice(serializedPruningPointHash) } +func (tis *txIndexStore) getBlueScore() (uint64, error) { + if tis.isAnythingStaged() { + return 0, errors.Errorf("cannot get the virtual bluescore while staging isn't empty") + } + + serializedVirtualBlueScore, err := tis.database.Get(virtualBlueScoreKey) + if err != nil { + return 0, err + } + + return binary.BigEndian.Uint64(serializedVirtualBlueScore), nil +} + func (tis *txIndexStore) convertTxIDToKey(bucket *database.Bucket, txID externalapi.DomainTransactionID) *database.Key { return bucket.Key(txID.ByteSlice()) } -func (tis *txIndexStore) stagedData() ( - toAdd map[externalapi.DomainTransactionID]*TxData, - toRemove map[externalapi.DomainTransactionID]*TxData, - virtualParents []*externalapi.DomainHash, - pruningPoint *externalapi.DomainHash) { - toAddClone := make(map[externalapi.DomainTransactionID]*TxData) - toRemoveClone := make(map[externalapi.DomainTransactionID]*TxData) - for txID, txData := range tis.toAdd { - toAddClone[txID] = txData +func (tis *txIndexStore) convertScriptPublicKeyToKey(bucket *database.Bucket, scriptPublicKey *externalapi.ScriptPublicKey) *database.Key { + var scriptPublicKeyBytes = make([]byte, 2+len(scriptPublicKey.Script)) // uint16 + binary.LittleEndian.PutUint16(scriptPublicKeyBytes[:2], scriptPublicKey.Version) + copy(scriptPublicKeyBytes[2:], scriptPublicKey.Script) + return bucket.Key(scriptPublicKeyBytes) +} - } - for txID, txData := range tis.toRemove { - toRemoveClone[txID] = txData - } - return toAddClone, toRemoveClone, tis.virtualParents, tis.pruningPoint +func (tis *txIndexStore) stagedData() ( + toAddTxs TxChange, + toRemoveTxs TxChange, + toAddSent AddrsChange, + toRemoveSent AddrsChange, + toAddReceived AddrsChange, + toRemoveReceived AddrsChange, + virtualParents []*externalapi.DomainHash, + pruningPoint *externalapi.DomainHash ) { + + toAddClone := make(TxChange) + toRemoveClone := make(TxChange) + toAddSentClone := make(AddrsChange) + toRemoveSentClone := make(AddrsChange) + toAddReceivedClone := make(AddrsChange) + toRemoveReceivedClone := make(AddrsChange) + + maps.Copy(toAddClone, tis.toAddTxs) + maps.Copy(toRemoveClone, tis.toRemoveTxs) + maps.Copy(toAddSentClone, tis.toAddSent) + maps.Copy(toRemoveSentClone, tis.toRemoveSent) + maps.Copy(toAddReceivedClone, tis.toAddReceived) + maps.Copy(toRemoveReceivedClone, tis.toRemoveReceived) + + return toAddClone, toRemoveClone, toAddSentClone, + toRemoveSentClone, toAddReceivedClone, + toRemoveReceived, tis.virtualParents, tis.pruningPoint } func (tis *txIndexStore) isAnythingStaged() bool { - return len(tis.toAdd) > 0 || len(tis.toRemove) > 0 + return len(tis.toAddTxs) > 0 || len(tis.toRemoveTxs) > 0 } func (tis *txIndexStore) getTxData(txID *externalapi.DomainTransactionID) (txData *TxData, found bool, err error) { diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 862b9c078e..b7d758fc38 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -136,7 +136,7 @@ func (ti *TXIndex) isSynced() (bool, error) { } // Update updates the TX index with the given DAG selected parent chain changes -func (ti *TXIndex) Update(virtualChangeSet *externalapi.VirtualChangeSet) (*TXAcceptanceChange, error) { +func (ti *TXIndex) Update(virtualChangeSet *externalapi.VirtualChangeSet) (*TXsChanges, *AddrsChanges, error) { onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.Update") defer onEnd() @@ -147,28 +147,35 @@ func (ti *TXIndex) Update(virtualChangeSet *externalapi.VirtualChangeSet) (*TXAc err := ti.removeTXIDs(virtualChangeSet.VirtualSelectedParentChainChanges, 1000) if err != nil { - return nil, err + return nil, nil, err } err = ti.addTXIDs(virtualChangeSet.VirtualSelectedParentChainChanges, 1000) if err != nil { - return nil, err + return nil, nil, err } - added, removed, _, _ := ti.store.stagedData() - txIndexChanges := &TXAcceptanceChange{ - Added: added, - Removed: removed, + ti.store.updateVirtualParents(virtualChangeSet.VirtualParents) + + txsAdded, txsRemoved, addrsSentTxsAdded, addrsSentTxsRemoved, addrsReceivedAdded, addrsReceivedTxsRemoved, _, _ := ti.store.stagedData() + txChanges := &TXsChanges{ + Added: txsAdded, + Removed: txsRemoved, } - ti.store.updateVirtualParents(virtualChangeSet.VirtualParents) + AddrsChanges := &AddrsChanges{ + AddedSent: addrsSentTxsAdded, + RemovedSent: addrsSentTxsRemoved, + AddedReceived: addrsReceivedAdded, + RemovedReceived: addrsReceivedTxsRemoved, + } err = ti.store.commit() if err != nil { - return nil, err + return nil, nil, err } - return txIndexChanges, nil + return txChanges, AddrsChanges, nil } func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChainPath, chunkSize int) error { @@ -188,11 +195,6 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai return err } for i, acceptingBlockHash := range chainBlocksChunk { - acceptingBlockHeader, err := ti.domain.Consensus().GetBlockHeader(acceptingBlockHash) - if err != nil { - return err - } - acceptingBlueScore := acceptingBlockHeader.BlueScore() chainBlockAcceptanceData := chainBlocksAcceptanceData[i] for _, blockAcceptanceData := range chainBlockAcceptanceData { for j, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { @@ -201,12 +203,23 @@ func (ti *TXIndex) addTXIDs(selectedParentChainChanges *externalapi.SelectedChai if err != nil { return err } - transactionID := consensushashing.TransactionID(transactionAcceptanceData.Transaction) + + senders := make([]*externalapi.ScriptPublicKey, len(transactionAcceptanceData.Transaction.Inputs)) + for i, input := range transactionAcceptanceData.Transaction.Inputs { + senders[i] = input.UTXOEntry.ScriptPublicKey() + } + + receivers := make([]*externalapi.ScriptPublicKey, len(transactionAcceptanceData.Transaction.Outputs)) + for i, output := range transactionAcceptanceData.Transaction.Outputs { + receivers[i] = output.ScriptPublicKey + } ti.store.add( - *transactionID, + *consensushashing.TransactionID(transactionAcceptanceData.Transaction), uint32(j), // index of including block where transaction is found blockAcceptanceData.BlockHash, // this is the including block acceptingBlockHash, // this is the accepting block + senders, + receivers, ) } } @@ -239,11 +252,22 @@ func (ti *TXIndex) removeTXIDs(selectedParentChainChanges *externalapi.SelectedC log.Tracef("TX index Removing: %d transactions", len(blockAcceptanceData.TransactionAcceptanceData)) for j, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { if transactionAcceptanceData.IsAccepted { - ti.store.remove( + senders := make([]*externalapi.ScriptPublicKey, len(transactionAcceptanceData.Transaction.Inputs)) + for i, input := range transactionAcceptanceData.Transaction.Inputs { + senders[i] = input.UTXOEntry.ScriptPublicKey() + } + + receivers := make([]*externalapi.ScriptPublicKey, len(transactionAcceptanceData.Transaction.Outputs)) + for i, output := range transactionAcceptanceData.Transaction.Outputs { + receivers[i] = output.ScriptPublicKey + } + ti.store.add( *consensushashing.TransactionID(transactionAcceptanceData.Transaction), - uint32(j), - blockAcceptanceData.BlockHash, - acceptingBlockHash, + uint32(j), // index of including block where transaction is found + blockAcceptanceData.BlockHash, // this is the including block + acceptingBlockHash, // this is the accepting block + senders, + receivers, ) } } @@ -374,12 +398,12 @@ func (ti *TXIndex) GetTXConfirmations(txID *externalapi.DomainTransactionID) ( return -1, false, err } - virtualBlock, err := ti.domain.Consensus().GetVirtualInfo() + virtualBlueScore, err := ti.store.getBlueScore() if err != nil { return 0, false, err } - return int64(virtualBlock.BlueScore - acceptingBlockHeader.BlueScore()), true, nil + return int64(virtualBlueScore - acceptingBlockHeader.BlueScore()), true, nil } // GetTXsConfirmations returns the tx confirmations for for the given txIDs @@ -391,7 +415,7 @@ func (ti *TXIndex) GetTXsConfirmations(txIDs []*externalapi.DomainTransactionID) ti.mutex.Lock() defer ti.mutex.Unlock() - virtualBlock, err := ti.domain.Consensus().GetVirtualInfo() + virtualBlueScore, err := ti.store.getBlueScore() if err != nil { return nil, nil, err } @@ -410,7 +434,7 @@ func (ti *TXIndex) GetTXsConfirmations(txIDs []*externalapi.DomainTransactionID) } return nil, nil, err } - txIDsToConfirmations[txID] = int64(virtualBlock.BlueScore - acceptingBlockHeader.BlueScore()) + txIDsToConfirmations[txID] = int64(virtualBlueScore - acceptingBlockHeader.BlueScore()) } return txIDsToConfirmations, notFound, nil diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto index 745b31ffda..b0ce2aa4c5 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc.proto @@ -791,6 +791,8 @@ message GetTxsConfirmationsResponseMessage{ // NotifyTxsConfirmationChangedRequstMessage is a listener that registers confirmations from supplied TxIDs // Kaspad must be started with the `--txindex` flag for this Request to work. +// Note: this listener will try to retroactively confirm historic txs when such TxIds are added. But, any confirmed txIds supplied beyond pruning (~3 days), +// will erroneously be displayed as unconfirmed, since it will be missing from the kaspad's pruned txindex database. message NotifyTxsConfirmationChangedRequestMessage{ repeated string TxIDs = 1; //initial TxIds to listen for when regestering for notifications @@ -809,7 +811,7 @@ message TxsConfirmationChangedNotificationMessage{ uint32 requiredConfirmations = 1; //the required confirmations set when notification was sent repeated RpcTxIDConfirmationsPair pending = 2; // RpcTxIDConfirmationsPairs which have entered the virtual chain but not passed the required confirmations repeated RpcTxIDConfirmationsPair confirmed = 3; // RpcTxIDConfirmationsPairs which have entered the virtual chain and passed the required confirmations - repeated string unconfirmedTxIds = 4; // TxIds which were not confirmed within the required confirmations. + repeated string unconfirmedTxIds = 4; // TxIds which were not confirmed within the required confirmations. RPCError error = 1000; } @@ -839,6 +841,9 @@ message TxEntriesByAddresses{ } // NotifyAddressesTxsChangedRequestMessage Listens for Txs pertaining to specified addresses according to the params specified +// Kaspad must be started with the `--txindex` flag for this Request to work. +// Note: this listener will not try to retroactively confirm historic txs pertaining to specified addresses when new addresses are added. +// as such, add addresses / start listener before incoming transactions are expected. message NotifyAddressesTxsRequestMessage{ repeated string addresses = 1; //initial addresses to listen for Tx changes when regestering for notifications uint32 requiredConfirmations = 2; // number of confirmations until a transaction is considered confirmed From cc05cfaa845def49f14b5d3272814a9176c4c730 Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Sun, 23 Oct 2022 20:28:57 +0200 Subject: [PATCH 46/47] add access to addr index --- domain/txindex/store.go | 86 ++++++++++++++++++++++++++++++++++++++- domain/txindex/txindex.go | 48 ++++++++++++++++++++++ 2 files changed, 133 insertions(+), 1 deletion(-) diff --git a/domain/txindex/store.go b/domain/txindex/store.go index cadab52978..54e05b7616 100644 --- a/domain/txindex/store.go +++ b/domain/txindex/store.go @@ -146,7 +146,6 @@ func (tis *txIndexStore) discardAllButPruningPoint() { tis.toAddReceived = make(AddrsChange) tis.toRemoveReceived = make(AddrsChange) tis.virtualParents = nil - tis.virtualBlueScore = 0 } func (tis *txIndexStore) commit() error { @@ -480,3 +479,88 @@ func (tis *txIndexStore) getTxsData(txIDs []*externalapi.DomainTransactionID) ( return txsData, notFoundTxIDs, nil } + +func (tis *txIndexStore) getTxIdsFromScriptPublicKey(scriptPublicKey *externalapi.ScriptPublicKey, includeReceived bool, includeSent bool) ( + received []*externalapi.DomainTransactionID, sent []*externalapi.DomainTransactionID, err error) { + + if tis.isAnythingStaged() { + return nil, nil, errors.Errorf("cannot get TX accepting Block hash while staging isn't empty") + } + + if includeReceived { + key := tis.convertScriptPublicKeyToKey(addrIndexReceivedBucket, scriptPublicKey) + serializedTxIds, err := tis.database.Get(key) + if err != nil && !database.IsNotFoundError(err){ + return nil, nil, err + } + received, err = deserializeTxIds(serializedTxIds) + if err != nil { + return nil, nil, err + } + + } + if includeSent { + key := tis.convertScriptPublicKeyToKey(addrIndexSentBucket, scriptPublicKey) + serializedTxIds, err := tis.database.Get(key) + if err != nil && !database.IsNotFoundError(err) { + return nil, nil, err + } + + sent, err = deserializeTxIds(serializedTxIds) + if err != nil { + return nil, nil, err + } + } + + return received, sent, nil +} + +func (tis *txIndexStore) getTxIdsOfScriptPublicKeys(scriptPublicKeys []*externalapi.ScriptPublicKey, includeReceived bool, includeSent bool) ( + AddrsChange, AddrsChange, error) { + + if tis.isAnythingStaged() { + return nil, nil, errors.Errorf("cannot get TXs of scriptPublicKeys while staging isn't empty") + } + + AddressesToReceivedTxIds := make(AddrsChange) + AddressesToSentTxIds := make(AddrsChange) + + for _, scriptPublicKey := range scriptPublicKeys { + if includeReceived { + key := tis.convertScriptPublicKeyToKey(addrIndexReceivedBucket, scriptPublicKey) + serializedTxIds, err := tis.database.Get(key) + if err != nil { + if database.IsNotFoundError(err) { + continue + } else { + return nil, nil, err + } + } + deserializedTxIds, err := deserializeTxIds(serializedTxIds) + if err != nil { + return nil, nil, err + } + + AddressesToReceivedTxIds[ScriptPublicKeyString(scriptPublicKey.String())] = deserializedTxIds + } + if includeSent { + key := tis.convertScriptPublicKeyToKey(addrIndexSentBucket, scriptPublicKey) + serializedTxIds, err := tis.database.Get(key) + if err != nil { + if database.IsNotFoundError(err) { + continue + } else { + return nil, nil, err + } + } + deserializedTxIds, err := deserializeTxIds(serializedTxIds) + if err != nil { + return nil, nil, err + } + + AddressesToSentTxIds[ScriptPublicKeyString(scriptPublicKey.String())] = deserializedTxIds + } + } + + return AddressesToReceivedTxIds, AddressesToSentTxIds, nil +} diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index b7d758fc38..7c4c92951b 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -563,3 +563,51 @@ func (ti *TXIndex) GetTXsBlueScores(txIDs []*externalapi.DomainTransactionID) ( return txIDsToBlueScores, notFound, nil } + +func (ti *TXIndex) GetTXIdsOfScriptPublicKey(scriptPublicKey *externalapi.ScriptPublicKey, includeRecieved bool, includeSent bool) ( + received []*externalapi.DomainTransactionID, sent []*externalapi.DomainTransactionID, found bool, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTXIdsOfScriptPublicKey") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + received, sent, err = ti.store.getTxIdsFromScriptPublicKey(scriptPublicKey, includeRecieved, includeSent) + if err != nil { + return nil, nil, false, err + } + + return received, sent, received == nil && sent == nil, nil +} + +func (ti *TXIndex) GetTXIdsOfScriptPublicKeys(scriptPublicKeys []*externalapi.ScriptPublicKey, includeRecieved bool, includeSent bool) ( + received AddrsChange, sent AddrsChange, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTXIdsOfScriptPublicKey") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + received, sent, err = ti.store.getTxIdsOfScriptPublicKeys(scriptPublicKeys, includeRecieved, includeSent) + if err != nil { + return nil, nil, err + } + + return received, sent, nil +} + +func (ti *TXIndex) GetTXsOfScriptPublicKey(scriptPublicKey *externalapi.ScriptPublicKey, includeRecieved bool, includeSent bool) ( + receivedTxs []*externalapi.DomainTransaction, sensentTxst []*externalapi.DomainTransaction, found bool, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTXIdsOfScriptPublicKey") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + receivedTxIds, sentTxIds, err = ti.store.getTxIdsFromScriptPublicKey(scriptPublicKey, includeRecieved, includeSent) + if err != nil { + return nil, nil, false, err + } + + return receivedTxs, sentTxs, received == nil && sent == nil, nil +} \ No newline at end of file From a2c851fa840f61530ee5138e6c31827da5c7898c Mon Sep 17 00:00:00 2001 From: D-Stacks Date: Sun, 23 Oct 2022 22:09:20 +0200 Subject: [PATCH 47/47] finish accesss function --- domain/txindex/txindex.go | 114 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 110 insertions(+), 4 deletions(-) diff --git a/domain/txindex/txindex.go b/domain/txindex/txindex.go index 7c4c92951b..8df0a56809 100644 --- a/domain/txindex/txindex.go +++ b/domain/txindex/txindex.go @@ -598,16 +598,122 @@ func (ti *TXIndex) GetTXIdsOfScriptPublicKeys(scriptPublicKeys []*externalapi.Sc func (ti *TXIndex) GetTXsOfScriptPublicKey(scriptPublicKey *externalapi.ScriptPublicKey, includeRecieved bool, includeSent bool) ( receivedTxs []*externalapi.DomainTransaction, sensentTxst []*externalapi.DomainTransaction, found bool, err error) { - onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTXIdsOfScriptPublicKey") + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTXsOfScriptPublicKey") defer onEnd() ti.mutex.Lock() defer ti.mutex.Unlock() - receivedTxIds, sentTxIds, err = ti.store.getTxIdsFromScriptPublicKey(scriptPublicKey, includeRecieved, includeSent) + receivedTxIds, sentTxIds, err := ti.store.getTxIdsFromScriptPublicKey(scriptPublicKey, includeRecieved, includeSent) if err != nil { return nil, nil, false, err } - return receivedTxs, sentTxs, received == nil && sent == nil, nil -} \ No newline at end of file + txIDsToTxIndexData, _, err := ti.store.getTxsData(receivedTxIds) + if err != nil { + return nil, nil, false, err + } + + receivedTxs = make([]*externalapi.DomainTransaction, len(receivedTxIds)) + i := 0 + for txID, txData := range txIDsToTxIndexData { + includingBlock, err := ti.domain.Consensus().GetBlock(txData.IncludingBlockHash) + + if err != nil { + if database.IsNotFoundError(err) { + return nil, nil, false, fmt.Errorf("including block %s missing for txID %s ", txData.IncludingBlockHash.String(), txID.String()) + } + return nil, nil, false, err + } + receivedTxs[i] = includingBlock.Transactions[txData.IncludingIndex] + i++ + } + + txIDsToTxIndexData, _, err = ti.store.getTxsData(sentTxIds) + if err != nil { + return nil, nil, false, err + } + + sentTxs := make([]*externalapi.DomainTransaction, len(receivedTxIds)) + i = 0 + for txID, txData := range txIDsToTxIndexData { + includingBlock, err := ti.domain.Consensus().GetBlock(txData.IncludingBlockHash) + + if err != nil { + if database.IsNotFoundError(err) { + return nil, nil, false, fmt.Errorf("including block %s missing for txID %s ", txData.IncludingBlockHash.String(), txID.String()) + } + return nil, nil, false, err + } + sentTxs[i] = includingBlock.Transactions[txData.IncludingIndex] + i++ + } + + return receivedTxs, sentTxs, receivedTxs == nil && sentTxs == nil, nil +} + +func (ti *TXIndex) GetTXsOfScriptPublicKeys(scriptPublicKeys []*externalapi.ScriptPublicKey, includeRecieved bool, includeSent bool) ( + receivedTxs map[ScriptPublicKeyString][]*externalapi.DomainTransaction, sentTxs map[ScriptPublicKeyString][]*externalapi.DomainTransaction, err error) { + onEnd := logger.LogAndMeasureExecutionTime(log, "TXIndex.GetTXsOfScriptPublicKey") + defer onEnd() + + ti.mutex.Lock() + defer ti.mutex.Unlock() + + receivedTxIds, sentTxIds, err := ti.store.getTxIdsOfScriptPublicKeys(scriptPublicKeys, includeRecieved, includeSent) + if err != nil { + return nil, nil, err + } + + receivedTxs = make(map[ScriptPublicKeyString][]*externalapi.DomainTransaction) + i := 0 + for scriptPublicKeyString, txIds := range receivedTxIds { + + txIDsToTxIndexData, _, err := ti.store.getTxsData(txIds) + if err != nil { + return nil, nil, err + } + i = 0 + + for txID, txData := range txIDsToTxIndexData{ + + includingBlock, err := ti.domain.Consensus().GetBlock(txData.IncludingBlockHash) + if err != nil { + if database.IsNotFoundError(err) { + return nil, nil, fmt.Errorf("including block %s missing for txID %s ", txData.IncludingBlockHash.String(), txID.String()) + } + return nil, nil, err + } + receivedTxs[scriptPublicKeyString] = append(receivedTxs[scriptPublicKeyString], includingBlock.Transactions[txData.IncludingIndex]) + i++ + + } + } + sentTxs = make(map[ScriptPublicKeyString][]*externalapi.DomainTransaction) + i = 0 + for scriptPublicKeyString, txIds := range sentTxIds { + + txIDsToTxIndexData, _, err := ti.store.getTxsData(txIds) + if err != nil { + return nil, nil, err + } + i = 0 + + for txID, txData := range txIDsToTxIndexData{ + + includingBlock, err := ti.domain.Consensus().GetBlock(txData.IncludingBlockHash) + if err != nil { + if database.IsNotFoundError(err) { + return nil, nil, fmt.Errorf("including block %s missing for txID %s ", txData.IncludingBlockHash.String(), txID.String()) + } + return nil, nil, err + } + sentTxs[scriptPublicKeyString] = append(sentTxs[scriptPublicKeyString], includingBlock.Transactions[txData.IncludingIndex]) + i++ + + } + } + + + return receivedTxs, sentTxs, nil +}