diff --git a/CHANGELOG.md b/CHANGELOG.md index 758235e5..990dd9b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,9 +12,16 @@ The minor version will be incremented upon a breaking change and the patch versi ### Fixes +- deps: update `h2` crate (`RUSTSEC-2024-0332`) ([#316](https://github.com/rpcpool/yellowstone-grpc/pull/316)) + ### Features - client: add gRPC channel options to Node.js ([#306](https://github.com/rpcpool/yellowstone-grpc/pull/306)) +- geyser: add `transactions_status` filter ([#310](https://github.com/rpcpool/yellowstone-grpc/pull/310)) +- geyser: add metric `slot_status_plugin` ([#312](https://github.com/rpcpool/yellowstone-grpc/pull/312)) +- geyser: wrap `geyser_loop` with `unconstrained` ([#313](https://github.com/rpcpool/yellowstone-grpc/pull/313)) +- geyser: handle `/debug_clients` on prometheus endpoint ([#314](https://github.com/rpcpool/yellowstone-grpc/pull/314)) +- geyser: wrap messages to `Arc` ([#315](https://github.com/rpcpool/yellowstone-grpc/pull/315)) ### Breaking diff --git a/Cargo.lock b/Cargo.lock index 3d07c742..65b970fb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1571,9 +1571,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.24" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ "bytes", "fnv", diff --git a/examples/golang/proto/geyser.pb.go b/examples/golang/proto/geyser.pb.go index c8b41522..bb97b94d 100644 --- a/examples/golang/proto/geyser.pb.go +++ b/examples/golang/proto/geyser.pb.go @@ -74,15 +74,16 @@ type SubscribeRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Accounts map[string]*SubscribeRequestFilterAccounts `protobuf:"bytes,1,rep,name=accounts,proto3" json:"accounts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Slots map[string]*SubscribeRequestFilterSlots `protobuf:"bytes,2,rep,name=slots,proto3" json:"slots,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Transactions map[string]*SubscribeRequestFilterTransactions `protobuf:"bytes,3,rep,name=transactions,proto3" json:"transactions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Blocks map[string]*SubscribeRequestFilterBlocks `protobuf:"bytes,4,rep,name=blocks,proto3" json:"blocks,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - BlocksMeta map[string]*SubscribeRequestFilterBlocksMeta `protobuf:"bytes,5,rep,name=blocks_meta,json=blocksMeta,proto3" json:"blocks_meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Entry map[string]*SubscribeRequestFilterEntry `protobuf:"bytes,8,rep,name=entry,proto3" json:"entry,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Commitment *CommitmentLevel `protobuf:"varint,6,opt,name=commitment,proto3,enum=geyser.CommitmentLevel,oneof" json:"commitment,omitempty"` - AccountsDataSlice []*SubscribeRequestAccountsDataSlice `protobuf:"bytes,7,rep,name=accounts_data_slice,json=accountsDataSlice,proto3" json:"accounts_data_slice,omitempty"` - Ping *SubscribeRequestPing `protobuf:"bytes,9,opt,name=ping,proto3,oneof" json:"ping,omitempty"` + Accounts map[string]*SubscribeRequestFilterAccounts `protobuf:"bytes,1,rep,name=accounts,proto3" json:"accounts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Slots map[string]*SubscribeRequestFilterSlots `protobuf:"bytes,2,rep,name=slots,proto3" json:"slots,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Transactions map[string]*SubscribeRequestFilterTransactions `protobuf:"bytes,3,rep,name=transactions,proto3" json:"transactions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + TransactionsStatus map[string]*SubscribeRequestFilterTransactions `protobuf:"bytes,10,rep,name=transactions_status,json=transactionsStatus,proto3" json:"transactions_status,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Blocks map[string]*SubscribeRequestFilterBlocks `protobuf:"bytes,4,rep,name=blocks,proto3" json:"blocks,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + BlocksMeta map[string]*SubscribeRequestFilterBlocksMeta `protobuf:"bytes,5,rep,name=blocks_meta,json=blocksMeta,proto3" json:"blocks_meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Entry map[string]*SubscribeRequestFilterEntry `protobuf:"bytes,8,rep,name=entry,proto3" json:"entry,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Commitment *CommitmentLevel `protobuf:"varint,6,opt,name=commitment,proto3,enum=geyser.CommitmentLevel,oneof" json:"commitment,omitempty"` + AccountsDataSlice []*SubscribeRequestAccountsDataSlice `protobuf:"bytes,7,rep,name=accounts_data_slice,json=accountsDataSlice,proto3" json:"accounts_data_slice,omitempty"` + Ping *SubscribeRequestPing `protobuf:"bytes,9,opt,name=ping,proto3,oneof" json:"ping,omitempty"` } func (x *SubscribeRequest) Reset() { @@ -138,6 +139,13 @@ func (x *SubscribeRequest) GetTransactions() map[string]*SubscribeRequestFilterT return nil } +func (x *SubscribeRequest) GetTransactionsStatus() map[string]*SubscribeRequestFilterTransactions { + if x != nil { + return x.TransactionsStatus + } + return nil +} + func (x *SubscribeRequest) GetBlocks() map[string]*SubscribeRequestFilterBlocks { if x != nil { return x.Blocks @@ -840,6 +848,7 @@ type SubscribeUpdate struct { // *SubscribeUpdate_Account // *SubscribeUpdate_Slot // *SubscribeUpdate_Transaction + // *SubscribeUpdate_TransactionStatus // *SubscribeUpdate_Block // *SubscribeUpdate_Ping // *SubscribeUpdate_Pong @@ -915,6 +924,13 @@ func (x *SubscribeUpdate) GetTransaction() *SubscribeUpdateTransaction { return nil } +func (x *SubscribeUpdate) GetTransactionStatus() *SubscribeUpdateTransactionStatus { + if x, ok := x.GetUpdateOneof().(*SubscribeUpdate_TransactionStatus); ok { + return x.TransactionStatus + } + return nil +} + func (x *SubscribeUpdate) GetBlock() *SubscribeUpdateBlock { if x, ok := x.GetUpdateOneof().(*SubscribeUpdate_Block); ok { return x.Block @@ -966,6 +982,10 @@ type SubscribeUpdate_Transaction struct { Transaction *SubscribeUpdateTransaction `protobuf:"bytes,4,opt,name=transaction,proto3,oneof"` } +type SubscribeUpdate_TransactionStatus struct { + TransactionStatus *SubscribeUpdateTransactionStatus `protobuf:"bytes,10,opt,name=transaction_status,json=transactionStatus,proto3,oneof"` +} + type SubscribeUpdate_Block struct { Block *SubscribeUpdateBlock `protobuf:"bytes,5,opt,name=block,proto3,oneof"` } @@ -992,6 +1012,8 @@ func (*SubscribeUpdate_Slot) isSubscribeUpdate_UpdateOneof() {} func (*SubscribeUpdate_Transaction) isSubscribeUpdate_UpdateOneof() {} +func (*SubscribeUpdate_TransactionStatus) isSubscribeUpdate_UpdateOneof() {} + func (*SubscribeUpdate_Block) isSubscribeUpdate_UpdateOneof() {} func (*SubscribeUpdate_Ping) isSubscribeUpdate_UpdateOneof() {} @@ -1365,6 +1387,85 @@ func (x *SubscribeUpdateTransactionInfo) GetIndex() uint64 { return 0 } +type SubscribeUpdateTransactionStatus struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"` + Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` + IsVote bool `protobuf:"varint,3,opt,name=is_vote,json=isVote,proto3" json:"is_vote,omitempty"` + Index uint64 `protobuf:"varint,4,opt,name=index,proto3" json:"index,omitempty"` + Err *TransactionError `protobuf:"bytes,5,opt,name=err,proto3" json:"err,omitempty"` +} + +func (x *SubscribeUpdateTransactionStatus) Reset() { + *x = SubscribeUpdateTransactionStatus{} + if protoimpl.UnsafeEnabled { + mi := &file_geyser_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribeUpdateTransactionStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeUpdateTransactionStatus) ProtoMessage() {} + +func (x *SubscribeUpdateTransactionStatus) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribeUpdateTransactionStatus.ProtoReflect.Descriptor instead. +func (*SubscribeUpdateTransactionStatus) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{17} +} + +func (x *SubscribeUpdateTransactionStatus) GetSlot() uint64 { + if x != nil { + return x.Slot + } + return 0 +} + +func (x *SubscribeUpdateTransactionStatus) GetSignature() []byte { + if x != nil { + return x.Signature + } + return nil +} + +func (x *SubscribeUpdateTransactionStatus) GetIsVote() bool { + if x != nil { + return x.IsVote + } + return false +} + +func (x *SubscribeUpdateTransactionStatus) GetIndex() uint64 { + if x != nil { + return x.Index + } + return 0 +} + +func (x *SubscribeUpdateTransactionStatus) GetErr() *TransactionError { + if x != nil { + return x.Err + } + return nil +} + type SubscribeUpdateBlock struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1388,7 +1489,7 @@ type SubscribeUpdateBlock struct { func (x *SubscribeUpdateBlock) Reset() { *x = SubscribeUpdateBlock{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[17] + mi := &file_geyser_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1401,7 +1502,7 @@ func (x *SubscribeUpdateBlock) String() string { func (*SubscribeUpdateBlock) ProtoMessage() {} func (x *SubscribeUpdateBlock) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[17] + mi := &file_geyser_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1414,7 +1515,7 @@ func (x *SubscribeUpdateBlock) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeUpdateBlock.ProtoReflect.Descriptor instead. func (*SubscribeUpdateBlock) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{17} + return file_geyser_proto_rawDescGZIP(), []int{18} } func (x *SubscribeUpdateBlock) GetSlot() uint64 { @@ -1527,7 +1628,7 @@ type SubscribeUpdateBlockMeta struct { func (x *SubscribeUpdateBlockMeta) Reset() { *x = SubscribeUpdateBlockMeta{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[18] + mi := &file_geyser_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1540,7 +1641,7 @@ func (x *SubscribeUpdateBlockMeta) String() string { func (*SubscribeUpdateBlockMeta) ProtoMessage() {} func (x *SubscribeUpdateBlockMeta) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[18] + mi := &file_geyser_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1553,7 +1654,7 @@ func (x *SubscribeUpdateBlockMeta) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeUpdateBlockMeta.ProtoReflect.Descriptor instead. func (*SubscribeUpdateBlockMeta) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{18} + return file_geyser_proto_rawDescGZIP(), []int{19} } func (x *SubscribeUpdateBlockMeta) GetSlot() uint64 { @@ -1635,7 +1736,7 @@ type SubscribeUpdateEntry struct { func (x *SubscribeUpdateEntry) Reset() { *x = SubscribeUpdateEntry{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[19] + mi := &file_geyser_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1648,7 +1749,7 @@ func (x *SubscribeUpdateEntry) String() string { func (*SubscribeUpdateEntry) ProtoMessage() {} func (x *SubscribeUpdateEntry) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[19] + mi := &file_geyser_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1661,7 +1762,7 @@ func (x *SubscribeUpdateEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeUpdateEntry.ProtoReflect.Descriptor instead. func (*SubscribeUpdateEntry) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{19} + return file_geyser_proto_rawDescGZIP(), []int{20} } func (x *SubscribeUpdateEntry) GetSlot() uint64 { @@ -1715,7 +1816,7 @@ type SubscribeUpdatePing struct { func (x *SubscribeUpdatePing) Reset() { *x = SubscribeUpdatePing{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[20] + mi := &file_geyser_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1728,7 +1829,7 @@ func (x *SubscribeUpdatePing) String() string { func (*SubscribeUpdatePing) ProtoMessage() {} func (x *SubscribeUpdatePing) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[20] + mi := &file_geyser_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1741,7 +1842,7 @@ func (x *SubscribeUpdatePing) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeUpdatePing.ProtoReflect.Descriptor instead. func (*SubscribeUpdatePing) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{20} + return file_geyser_proto_rawDescGZIP(), []int{21} } type SubscribeUpdatePong struct { @@ -1755,7 +1856,7 @@ type SubscribeUpdatePong struct { func (x *SubscribeUpdatePong) Reset() { *x = SubscribeUpdatePong{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[21] + mi := &file_geyser_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1768,7 +1869,7 @@ func (x *SubscribeUpdatePong) String() string { func (*SubscribeUpdatePong) ProtoMessage() {} func (x *SubscribeUpdatePong) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[21] + mi := &file_geyser_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1781,7 +1882,7 @@ func (x *SubscribeUpdatePong) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeUpdatePong.ProtoReflect.Descriptor instead. func (*SubscribeUpdatePong) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{21} + return file_geyser_proto_rawDescGZIP(), []int{22} } func (x *SubscribeUpdatePong) GetId() int32 { @@ -1802,7 +1903,7 @@ type PingRequest struct { func (x *PingRequest) Reset() { *x = PingRequest{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[22] + mi := &file_geyser_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1815,7 +1916,7 @@ func (x *PingRequest) String() string { func (*PingRequest) ProtoMessage() {} func (x *PingRequest) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[22] + mi := &file_geyser_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1828,7 +1929,7 @@ func (x *PingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PingRequest.ProtoReflect.Descriptor instead. func (*PingRequest) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{22} + return file_geyser_proto_rawDescGZIP(), []int{23} } func (x *PingRequest) GetCount() int32 { @@ -1849,7 +1950,7 @@ type PongResponse struct { func (x *PongResponse) Reset() { *x = PongResponse{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[23] + mi := &file_geyser_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1862,7 +1963,7 @@ func (x *PongResponse) String() string { func (*PongResponse) ProtoMessage() {} func (x *PongResponse) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[23] + mi := &file_geyser_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1875,7 +1976,7 @@ func (x *PongResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PongResponse.ProtoReflect.Descriptor instead. func (*PongResponse) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{23} + return file_geyser_proto_rawDescGZIP(), []int{24} } func (x *PongResponse) GetCount() int32 { @@ -1896,7 +1997,7 @@ type GetLatestBlockhashRequest struct { func (x *GetLatestBlockhashRequest) Reset() { *x = GetLatestBlockhashRequest{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[24] + mi := &file_geyser_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1909,7 +2010,7 @@ func (x *GetLatestBlockhashRequest) String() string { func (*GetLatestBlockhashRequest) ProtoMessage() {} func (x *GetLatestBlockhashRequest) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[24] + mi := &file_geyser_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1922,7 +2023,7 @@ func (x *GetLatestBlockhashRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetLatestBlockhashRequest.ProtoReflect.Descriptor instead. func (*GetLatestBlockhashRequest) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{24} + return file_geyser_proto_rawDescGZIP(), []int{25} } func (x *GetLatestBlockhashRequest) GetCommitment() CommitmentLevel { @@ -1945,7 +2046,7 @@ type GetLatestBlockhashResponse struct { func (x *GetLatestBlockhashResponse) Reset() { *x = GetLatestBlockhashResponse{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[25] + mi := &file_geyser_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1958,7 +2059,7 @@ func (x *GetLatestBlockhashResponse) String() string { func (*GetLatestBlockhashResponse) ProtoMessage() {} func (x *GetLatestBlockhashResponse) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[25] + mi := &file_geyser_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1971,7 +2072,7 @@ func (x *GetLatestBlockhashResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetLatestBlockhashResponse.ProtoReflect.Descriptor instead. func (*GetLatestBlockhashResponse) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{25} + return file_geyser_proto_rawDescGZIP(), []int{26} } func (x *GetLatestBlockhashResponse) GetSlot() uint64 { @@ -2006,7 +2107,7 @@ type GetBlockHeightRequest struct { func (x *GetBlockHeightRequest) Reset() { *x = GetBlockHeightRequest{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[26] + mi := &file_geyser_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2019,7 +2120,7 @@ func (x *GetBlockHeightRequest) String() string { func (*GetBlockHeightRequest) ProtoMessage() {} func (x *GetBlockHeightRequest) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[26] + mi := &file_geyser_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2032,7 +2133,7 @@ func (x *GetBlockHeightRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBlockHeightRequest.ProtoReflect.Descriptor instead. func (*GetBlockHeightRequest) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{26} + return file_geyser_proto_rawDescGZIP(), []int{27} } func (x *GetBlockHeightRequest) GetCommitment() CommitmentLevel { @@ -2053,7 +2154,7 @@ type GetBlockHeightResponse struct { func (x *GetBlockHeightResponse) Reset() { *x = GetBlockHeightResponse{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[27] + mi := &file_geyser_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2066,7 +2167,7 @@ func (x *GetBlockHeightResponse) String() string { func (*GetBlockHeightResponse) ProtoMessage() {} func (x *GetBlockHeightResponse) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[27] + mi := &file_geyser_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2079,7 +2180,7 @@ func (x *GetBlockHeightResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBlockHeightResponse.ProtoReflect.Descriptor instead. func (*GetBlockHeightResponse) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{27} + return file_geyser_proto_rawDescGZIP(), []int{28} } func (x *GetBlockHeightResponse) GetBlockHeight() uint64 { @@ -2100,7 +2201,7 @@ type GetSlotRequest struct { func (x *GetSlotRequest) Reset() { *x = GetSlotRequest{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[28] + mi := &file_geyser_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2113,7 +2214,7 @@ func (x *GetSlotRequest) String() string { func (*GetSlotRequest) ProtoMessage() {} func (x *GetSlotRequest) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[28] + mi := &file_geyser_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2126,7 +2227,7 @@ func (x *GetSlotRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSlotRequest.ProtoReflect.Descriptor instead. func (*GetSlotRequest) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{28} + return file_geyser_proto_rawDescGZIP(), []int{29} } func (x *GetSlotRequest) GetCommitment() CommitmentLevel { @@ -2147,7 +2248,7 @@ type GetSlotResponse struct { func (x *GetSlotResponse) Reset() { *x = GetSlotResponse{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[29] + mi := &file_geyser_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2160,7 +2261,7 @@ func (x *GetSlotResponse) String() string { func (*GetSlotResponse) ProtoMessage() {} func (x *GetSlotResponse) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[29] + mi := &file_geyser_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2173,7 +2274,7 @@ func (x *GetSlotResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSlotResponse.ProtoReflect.Descriptor instead. func (*GetSlotResponse) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{29} + return file_geyser_proto_rawDescGZIP(), []int{30} } func (x *GetSlotResponse) GetSlot() uint64 { @@ -2192,7 +2293,7 @@ type GetVersionRequest struct { func (x *GetVersionRequest) Reset() { *x = GetVersionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[30] + mi := &file_geyser_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2205,7 +2306,7 @@ func (x *GetVersionRequest) String() string { func (*GetVersionRequest) ProtoMessage() {} func (x *GetVersionRequest) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[30] + mi := &file_geyser_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2218,7 +2319,7 @@ func (x *GetVersionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetVersionRequest.ProtoReflect.Descriptor instead. func (*GetVersionRequest) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{30} + return file_geyser_proto_rawDescGZIP(), []int{31} } type GetVersionResponse struct { @@ -2232,7 +2333,7 @@ type GetVersionResponse struct { func (x *GetVersionResponse) Reset() { *x = GetVersionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[31] + mi := &file_geyser_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2245,7 +2346,7 @@ func (x *GetVersionResponse) String() string { func (*GetVersionResponse) ProtoMessage() {} func (x *GetVersionResponse) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[31] + mi := &file_geyser_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2258,7 +2359,7 @@ func (x *GetVersionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetVersionResponse.ProtoReflect.Descriptor instead. func (*GetVersionResponse) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{31} + return file_geyser_proto_rawDescGZIP(), []int{32} } func (x *GetVersionResponse) GetVersion() string { @@ -2280,7 +2381,7 @@ type IsBlockhashValidRequest struct { func (x *IsBlockhashValidRequest) Reset() { *x = IsBlockhashValidRequest{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[32] + mi := &file_geyser_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2293,7 +2394,7 @@ func (x *IsBlockhashValidRequest) String() string { func (*IsBlockhashValidRequest) ProtoMessage() {} func (x *IsBlockhashValidRequest) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[32] + mi := &file_geyser_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2306,7 +2407,7 @@ func (x *IsBlockhashValidRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use IsBlockhashValidRequest.ProtoReflect.Descriptor instead. func (*IsBlockhashValidRequest) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{32} + return file_geyser_proto_rawDescGZIP(), []int{33} } func (x *IsBlockhashValidRequest) GetBlockhash() string { @@ -2335,7 +2436,7 @@ type IsBlockhashValidResponse struct { func (x *IsBlockhashValidResponse) Reset() { *x = IsBlockhashValidResponse{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[33] + mi := &file_geyser_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2348,7 +2449,7 @@ func (x *IsBlockhashValidResponse) String() string { func (*IsBlockhashValidResponse) ProtoMessage() {} func (x *IsBlockhashValidResponse) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[33] + mi := &file_geyser_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2361,7 +2462,7 @@ func (x *IsBlockhashValidResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use IsBlockhashValidResponse.ProtoReflect.Descriptor instead. func (*IsBlockhashValidResponse) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{33} + return file_geyser_proto_rawDescGZIP(), []int{34} } func (x *IsBlockhashValidResponse) GetSlot() uint64 { @@ -2383,7 +2484,7 @@ var File_geyser_proto protoreflect.FileDescriptor var file_geyser_proto_rawDesc = []byte{ 0x0a, 0x0c, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x1a, 0x14, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2d, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe7, 0x09, 0x0a, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbd, 0x0b, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, @@ -2398,441 +2499,472 @@ var file_geyser_proto_rawDesc = []byte{ 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x3c, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x49, - 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x05, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, + 0x12, 0x61, 0x0a, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, + 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x3c, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x6e, 0x74, - 0x72, 0x79, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, - 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x65, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x3c, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, - 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x88, - 0x01, 0x01, 0x12, 0x59, 0x0a, 0x13, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x52, 0x11, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x12, 0x35, 0x0a, - 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x65, - 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x01, 0x52, 0x04, 0x70, 0x69, 0x6e, - 0x67, 0x88, 0x01, 0x01, 0x1a, 0x63, 0x0a, 0x0d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, + 0x6f, 0x63, 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x73, 0x12, 0x49, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x6d, 0x65, 0x74, 0x61, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5d, 0x0a, 0x0a, 0x53, 0x6c, 0x6f, - 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, - 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x6c, 0x6f, 0x74, 0x73, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6b, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x40, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, - 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5f, 0x0a, 0x0b, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x0f, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, - 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x65, 0x79, - 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x5d, 0x0a, 0x0a, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x05, + 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x65, + 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x3c, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x67, 0x65, + 0x79, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x4c, + 0x65, 0x76, 0x65, 0x6c, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, + 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x59, 0x0a, 0x13, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x52, 0x11, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6c, 0x69, 0x63, 0x65, + 0x12, 0x35, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0d, - 0x0a, 0x0b, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x07, 0x0a, - 0x05, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x22, 0x98, 0x01, 0x0a, 0x1e, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x01, 0x52, 0x04, + 0x70, 0x69, 0x6e, 0x67, 0x88, 0x01, 0x01, 0x1a, 0x63, 0x0a, 0x0d, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3c, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x65, 0x79, 0x73, + 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5d, 0x0a, 0x0a, + 0x53, 0x6c, 0x6f, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x65, + 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x6c, 0x6f, 0x74, 0x73, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6b, 0x0a, 0x11, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x40, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x46, 0x0a, 0x07, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x65, 0x79, - 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x73, 0x22, 0xce, 0x01, 0x0a, 0x24, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x4c, 0x0a, 0x06, 0x6d, 0x65, - 0x6d, 0x63, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x65, 0x79, - 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x63, 0x6d, 0x70, 0x48, 0x00, - 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x63, 0x6d, 0x70, 0x12, 0x1c, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x08, 0x64, 0x61, - 0x74, 0x61, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x11, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x22, 0x98, 0x01, 0x0a, 0x2a, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x63, 0x6d, - 0x70, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x05, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x12, 0x18, 0x0a, 0x06, 0x62, 0x61, 0x73, 0x65, 0x35, 0x38, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x06, 0x62, 0x61, 0x73, 0x65, 0x35, 0x38, 0x12, 0x18, 0x0a, 0x06, 0x62, - 0x61, 0x73, 0x65, 0x36, 0x34, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x62, - 0x61, 0x73, 0x65, 0x36, 0x34, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6d, 0x0a, - 0x1b, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x6c, 0x6f, 0x74, 0x73, 0x12, 0x35, 0x0a, 0x14, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x12, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x88, 0x01, 0x01, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x62, - 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x9c, 0x02, 0x0a, - 0x22, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x17, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x48, 0x00, 0x52, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, - 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x06, - 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x09, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0f, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x12, 0x29, - 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x64, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x76, 0x6f, - 0x74, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x42, 0x0c, 0x0a, - 0x0a, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x9f, 0x02, 0x0a, 0x1c, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x27, 0x0a, 0x0f, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x12, 0x36, 0x0a, 0x14, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2e, 0x0a, - 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, - 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x48, 0x02, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x88, 0x01, 0x01, 0x42, 0x17, 0x0a, 0x15, 0x5f, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x22, 0x0a, - 0x20, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x74, - 0x61, 0x22, 0x1d, 0x0a, 0x1b, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x22, 0x53, 0x0a, 0x21, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x44, 0x61, 0x74, 0x61, - 0x53, 0x6c, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, - 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x26, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x87, 0x04, - 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x3a, 0x0a, 0x07, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, - 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6c, - 0x6f, 0x74, 0x48, 0x00, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x46, 0x0a, 0x0b, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x00, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x31, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, - 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x0a, 0x04, 0x70, - 0x6f, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x65, 0x79, 0x73, - 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x12, 0x41, - 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x4d, 0x65, 0x74, 0x61, 0x48, 0x00, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x74, - 0x61, 0x12, 0x34, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x48, 0x00, - 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x0e, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x22, 0x89, 0x01, 0x0a, 0x16, 0x53, 0x75, 0x62, 0x73, + 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x71, 0x0a, 0x17, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x40, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5f, 0x0a, 0x0b, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3a, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x65, + 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x0f, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x3e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5d, 0x0a, 0x0a, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x22, 0x98, 0x01, 0x0a, + 0x1e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, + 0x18, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, + 0x65, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, + 0x46, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2c, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0xce, 0x01, 0x0a, 0x24, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x12, 0x4c, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x63, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4d, 0x65, + 0x6d, 0x63, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x63, 0x6d, 0x70, 0x12, 0x1c, + 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x48, 0x00, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x30, 0x0a, 0x13, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x11, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x08, + 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x98, 0x01, 0x0a, 0x2a, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x4d, 0x65, 0x6d, 0x63, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, + 0x16, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, + 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x06, 0x62, 0x61, 0x73, 0x65, 0x35, + 0x38, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x62, 0x61, 0x73, 0x65, 0x35, + 0x38, 0x12, 0x18, 0x0a, 0x06, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x06, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x42, 0x06, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0x6d, 0x0a, 0x1b, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x6c, 0x6f, + 0x74, 0x73, 0x12, 0x35, 0x0a, 0x14, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x5f, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x48, 0x00, 0x52, 0x12, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, + 0x6e, 0x74, 0x22, 0x9c, 0x02, 0x0a, 0x22, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x17, 0x0a, 0x04, 0x76, 0x6f, 0x74, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x88, + 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x48, 0x01, 0x52, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x88, 0x01, 0x01, 0x12, + 0x21, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x02, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x88, + 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x78, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x42, + 0x07, 0x0a, 0x05, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x66, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x22, 0x9f, 0x02, 0x0a, 0x1c, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x12, 0x36, 0x0a, 0x14, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x13, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x88, 0x01, 0x01, 0x12, 0x2e, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, + 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x48, 0x02, 0x52, 0x0e, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x88, 0x01, + 0x01, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x42, + 0x12, 0x0a, 0x10, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x22, 0x22, 0x0a, 0x20, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x22, 0x1d, 0x0a, 0x1b, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x53, 0x0a, 0x21, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x26, 0x0a, 0x14, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, + 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x02, 0x69, 0x64, 0x22, 0xe2, 0x04, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x73, 0x12, 0x3a, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x31, 0x0a, + 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x65, + 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x48, 0x00, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, + 0x12, 0x46, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x12, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, + 0x52, 0x11, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x34, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x48, 0x00, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x31, 0x0a, 0x04, 0x70, 0x69, 0x6e, + 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, + 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x0a, 0x04, + 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x65, 0x79, + 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x12, + 0x41, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x48, 0x00, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, + 0x74, 0x61, 0x12, 0x34, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x48, + 0x00, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x0e, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x22, 0x89, 0x01, 0x0a, 0x16, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, - 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x75, 0x70, 0x22, 0x9a, 0x02, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x09, 0x72, 0x65, 0x6e, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x23, 0x0a, 0x0d, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0d, 0x74, 0x78, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0c, 0x74, - 0x78, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x88, 0x01, 0x01, 0x42, 0x10, - 0x0a, 0x0e, 0x5f, 0x74, 0x78, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x22, 0x82, 0x01, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x1b, 0x0a, 0x06, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x06, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x67, 0x65, 0x79, 0x73, - 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x22, 0x7a, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, - 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, - 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, 0x6f, - 0x74, 0x22, 0x85, 0x02, 0x0a, 0x1e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, + 0x75, 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x75, 0x70, 0x22, 0x9a, 0x02, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x6c, + 0x61, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, + 0x61, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1e, 0x0a, + 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x72, 0x65, 0x6e, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0d, 0x74, 0x78, 0x6e, 0x5f, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0c, + 0x74, 0x78, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x88, 0x01, 0x01, 0x42, + 0x10, 0x0a, 0x0e, 0x5f, 0x74, 0x78, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x22, 0x82, 0x01, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x6f, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x1b, 0x0a, + 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, + 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x67, 0x65, 0x79, + 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x5f, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x22, 0x7a, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x65, 0x79, 0x73, + 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, + 0x6f, 0x74, 0x22, 0x85, 0x02, 0x0a, 0x1e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x0b, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 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, 0x48, 0x0a, 0x04, 0x6d, 0x65, + 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, + 0x61, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, + 0x6d, 0x65, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xc6, 0x01, 0x0a, 0x20, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, + 0x6c, 0x6f, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x41, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x03, + 0x65, 0x72, 0x72, 0x22, 0xcd, 0x05, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, + 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, + 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x12, 0x40, + 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, + 0x12, 0x4b, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x55, 0x6e, 0x69, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4d, 0x0a, + 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, + 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1f, 0x0a, 0x0b, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x29, 0x0a, + 0x10, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, + 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x12, 0x3c, 0x0a, 0x1a, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x18, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, + 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2a, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 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, 0x48, 0x0a, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, + 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, + 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x07, 0x65, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, + 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x22, 0xd9, 0x03, 0x0a, 0x18, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x74, 0x61, + 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, + 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, + 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, + 0x73, 0x68, 0x12, 0x40, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x07, 0x72, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x73, 0x12, 0x4b, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, + 0x61, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x55, 0x6e, 0x69, 0x78, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x4d, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xcd, 0x05, 0x0a, 0x14, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, - 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x68, 0x61, 0x73, 0x68, 0x12, 0x40, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x07, 0x72, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x4b, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x6f, 0x6c, - 0x61, 0x6e, 0x61, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x55, 0x6e, 0x69, 0x78, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x4d, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x6f, 0x6c, 0x61, - 0x6e, 0x61, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x6c, 0x6f, - 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, - 0x6c, 0x6f, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x12, 0x3c, - 0x0a, 0x1a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x18, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x0c, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x08, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x23, 0x0a, 0x0d, - 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x36, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0xd9, 0x03, 0x0a, 0x18, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x12, 0x40, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x6f, 0x6c, 0x61, - 0x6e, 0x61, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x73, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x4b, 0x0a, 0x0a, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x55, - 0x6e, 0x69, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4d, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, - 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, - 0x73, 0x68, 0x12, 0x3c, 0x0a, 0x1a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x5f, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x18, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xef, 0x01, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x12, - 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, - 0x6f, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, - 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x75, - 0x6d, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x3c, 0x0a, 0x1a, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x18, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x1a, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x18, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x69, 0x6e, 0x67, 0x22, 0x25, - 0x0a, 0x13, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x50, 0x6f, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x23, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x24, 0x0a, 0x0c, 0x50, 0x6f, - 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x22, 0x68, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x17, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x85, 0x01, 0x0a, 0x1a, 0x47, - 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x6f, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x1c, 0x0a, - 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x12, 0x35, 0x0a, 0x17, 0x6c, - 0x61, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x6c, 0x61, - 0x73, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x22, 0x64, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0a, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x17, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3b, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x5d, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x6c, 0x6f, 0x74, + 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x6c, 0x6f, + 0x74, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x68, 0x61, 0x73, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x12, 0x3c, 0x0a, 0x1a, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x18, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, + 0xef, 0x01, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x48, 0x61, 0x73, 0x68, 0x65, + 0x73, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x3c, 0x0a, 0x1a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, + 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x18, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x1a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x18, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, + 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x50, 0x69, 0x6e, 0x67, 0x22, 0x25, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6e, 0x67, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, + 0x23, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x24, 0x0a, 0x0c, 0x50, 0x6f, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x68, 0x0a, 0x19, 0x47, 0x65, + 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x25, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x22, 0x13, 0x0a, 0x11, 0x47, - 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0x84, 0x01, 0x0a, 0x17, 0x49, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x12, 0x3c, 0x0a, 0x0a, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, - 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x44, 0x0a, 0x18, 0x49, 0x73, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x85, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x2a, 0x3e, 0x0a, - 0x0f, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x52, 0x4f, 0x43, 0x45, 0x53, 0x53, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, - 0x0a, 0x09, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x10, 0x02, 0x32, 0x93, 0x04, - 0x0a, 0x06, 0x47, 0x65, 0x79, 0x73, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x18, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x17, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x33, - 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x13, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, - 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x67, 0x65, - 0x79, 0x73, 0x65, 0x72, 0x2e, 0x50, 0x6f, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x12, 0x21, 0x2e, 0x67, 0x65, 0x79, 0x73, - 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x68, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, - 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, - 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x53, 0x6c, 0x6f, 0x74, - 0x12, 0x16, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6c, 0x6f, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, - 0x72, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x10, 0x49, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, - 0x73, 0x68, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x1f, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, - 0x2e, 0x49, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, - 0x72, 0x2e, 0x49, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0a, - 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x2e, 0x67, 0x65, 0x79, - 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x47, - 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x72, 0x70, 0x63, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, - 0x2d, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x67, 0x6f, 0x6c, - 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x04, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x68, 0x61, 0x73, 0x68, 0x12, 0x35, 0x0a, 0x17, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x64, 0x0a, 0x15, + 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x67, 0x65, 0x79, 0x73, + 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, + 0x6e, 0x74, 0x22, 0x3b, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, + 0x5d, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x3c, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x48, 0x00, + 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, + 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x25, + 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x22, 0x13, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x65, + 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x17, 0x49, + 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, + 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x68, 0x61, 0x73, 0x68, 0x12, 0x3c, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, + 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x88, + 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, + 0x74, 0x22, 0x44, 0x0a, 0x18, 0x49, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, 0x6f, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x2a, 0x3e, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x52, + 0x4f, 0x43, 0x45, 0x53, 0x53, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4e, + 0x46, 0x49, 0x52, 0x4d, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x49, 0x4e, 0x41, + 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x10, 0x02, 0x32, 0x93, 0x04, 0x0a, 0x06, 0x47, 0x65, 0x79, 0x73, + 0x65, 0x72, 0x12, 0x44, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, + 0x18, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x67, 0x65, 0x79, 0x73, + 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x33, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, + 0x12, 0x13, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x50, + 0x6f, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, + 0x12, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, + 0x61, 0x73, 0x68, 0x12, 0x21, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, + 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, + 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, + 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0e, + 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, + 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, + 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x3c, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x65, 0x79, + 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x53, + 0x6c, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, + 0x10, 0x49, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x12, 0x1f, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x49, 0x73, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x49, 0x73, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, + 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1a, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x34, 0x5a, + 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72, 0x70, 0x63, 0x70, + 0x6f, 0x6f, 0x6c, 0x2f, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2d, 0x67, 0x65, 0x79, 0x73, 0x65, + 0x72, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2848,7 +2980,7 @@ func file_geyser_proto_rawDescGZIP() []byte { } var file_geyser_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_geyser_proto_msgTypes = make([]protoimpl.MessageInfo, 40) +var file_geyser_proto_msgTypes = make([]protoimpl.MessageInfo, 42) var file_geyser_proto_goTypes = []interface{}{ (CommitmentLevel)(0), // 0: geyser.CommitmentLevel (*SubscribeRequest)(nil), // 1: geyser.SubscribeRequest @@ -2868,98 +3000,105 @@ var file_geyser_proto_goTypes = []interface{}{ (*SubscribeUpdateSlot)(nil), // 15: geyser.SubscribeUpdateSlot (*SubscribeUpdateTransaction)(nil), // 16: geyser.SubscribeUpdateTransaction (*SubscribeUpdateTransactionInfo)(nil), // 17: geyser.SubscribeUpdateTransactionInfo - (*SubscribeUpdateBlock)(nil), // 18: geyser.SubscribeUpdateBlock - (*SubscribeUpdateBlockMeta)(nil), // 19: geyser.SubscribeUpdateBlockMeta - (*SubscribeUpdateEntry)(nil), // 20: geyser.SubscribeUpdateEntry - (*SubscribeUpdatePing)(nil), // 21: geyser.SubscribeUpdatePing - (*SubscribeUpdatePong)(nil), // 22: geyser.SubscribeUpdatePong - (*PingRequest)(nil), // 23: geyser.PingRequest - (*PongResponse)(nil), // 24: geyser.PongResponse - (*GetLatestBlockhashRequest)(nil), // 25: geyser.GetLatestBlockhashRequest - (*GetLatestBlockhashResponse)(nil), // 26: geyser.GetLatestBlockhashResponse - (*GetBlockHeightRequest)(nil), // 27: geyser.GetBlockHeightRequest - (*GetBlockHeightResponse)(nil), // 28: geyser.GetBlockHeightResponse - (*GetSlotRequest)(nil), // 29: geyser.GetSlotRequest - (*GetSlotResponse)(nil), // 30: geyser.GetSlotResponse - (*GetVersionRequest)(nil), // 31: geyser.GetVersionRequest - (*GetVersionResponse)(nil), // 32: geyser.GetVersionResponse - (*IsBlockhashValidRequest)(nil), // 33: geyser.IsBlockhashValidRequest - (*IsBlockhashValidResponse)(nil), // 34: geyser.IsBlockhashValidResponse - nil, // 35: geyser.SubscribeRequest.AccountsEntry - nil, // 36: geyser.SubscribeRequest.SlotsEntry - nil, // 37: geyser.SubscribeRequest.TransactionsEntry - nil, // 38: geyser.SubscribeRequest.BlocksEntry - nil, // 39: geyser.SubscribeRequest.BlocksMetaEntry - nil, // 40: geyser.SubscribeRequest.EntryEntry - (*Transaction)(nil), // 41: solana.storage.ConfirmedBlock.Transaction - (*TransactionStatusMeta)(nil), // 42: solana.storage.ConfirmedBlock.TransactionStatusMeta - (*Rewards)(nil), // 43: solana.storage.ConfirmedBlock.Rewards - (*UnixTimestamp)(nil), // 44: solana.storage.ConfirmedBlock.UnixTimestamp - (*BlockHeight)(nil), // 45: solana.storage.ConfirmedBlock.BlockHeight + (*SubscribeUpdateTransactionStatus)(nil), // 18: geyser.SubscribeUpdateTransactionStatus + (*SubscribeUpdateBlock)(nil), // 19: geyser.SubscribeUpdateBlock + (*SubscribeUpdateBlockMeta)(nil), // 20: geyser.SubscribeUpdateBlockMeta + (*SubscribeUpdateEntry)(nil), // 21: geyser.SubscribeUpdateEntry + (*SubscribeUpdatePing)(nil), // 22: geyser.SubscribeUpdatePing + (*SubscribeUpdatePong)(nil), // 23: geyser.SubscribeUpdatePong + (*PingRequest)(nil), // 24: geyser.PingRequest + (*PongResponse)(nil), // 25: geyser.PongResponse + (*GetLatestBlockhashRequest)(nil), // 26: geyser.GetLatestBlockhashRequest + (*GetLatestBlockhashResponse)(nil), // 27: geyser.GetLatestBlockhashResponse + (*GetBlockHeightRequest)(nil), // 28: geyser.GetBlockHeightRequest + (*GetBlockHeightResponse)(nil), // 29: geyser.GetBlockHeightResponse + (*GetSlotRequest)(nil), // 30: geyser.GetSlotRequest + (*GetSlotResponse)(nil), // 31: geyser.GetSlotResponse + (*GetVersionRequest)(nil), // 32: geyser.GetVersionRequest + (*GetVersionResponse)(nil), // 33: geyser.GetVersionResponse + (*IsBlockhashValidRequest)(nil), // 34: geyser.IsBlockhashValidRequest + (*IsBlockhashValidResponse)(nil), // 35: geyser.IsBlockhashValidResponse + nil, // 36: geyser.SubscribeRequest.AccountsEntry + nil, // 37: geyser.SubscribeRequest.SlotsEntry + nil, // 38: geyser.SubscribeRequest.TransactionsEntry + nil, // 39: geyser.SubscribeRequest.TransactionsStatusEntry + nil, // 40: geyser.SubscribeRequest.BlocksEntry + nil, // 41: geyser.SubscribeRequest.BlocksMetaEntry + nil, // 42: geyser.SubscribeRequest.EntryEntry + (*Transaction)(nil), // 43: solana.storage.ConfirmedBlock.Transaction + (*TransactionStatusMeta)(nil), // 44: solana.storage.ConfirmedBlock.TransactionStatusMeta + (*TransactionError)(nil), // 45: solana.storage.ConfirmedBlock.TransactionError + (*Rewards)(nil), // 46: solana.storage.ConfirmedBlock.Rewards + (*UnixTimestamp)(nil), // 47: solana.storage.ConfirmedBlock.UnixTimestamp + (*BlockHeight)(nil), // 48: solana.storage.ConfirmedBlock.BlockHeight } var file_geyser_proto_depIdxs = []int32{ - 35, // 0: geyser.SubscribeRequest.accounts:type_name -> geyser.SubscribeRequest.AccountsEntry - 36, // 1: geyser.SubscribeRequest.slots:type_name -> geyser.SubscribeRequest.SlotsEntry - 37, // 2: geyser.SubscribeRequest.transactions:type_name -> geyser.SubscribeRequest.TransactionsEntry - 38, // 3: geyser.SubscribeRequest.blocks:type_name -> geyser.SubscribeRequest.BlocksEntry - 39, // 4: geyser.SubscribeRequest.blocks_meta:type_name -> geyser.SubscribeRequest.BlocksMetaEntry - 40, // 5: geyser.SubscribeRequest.entry:type_name -> geyser.SubscribeRequest.EntryEntry - 0, // 6: geyser.SubscribeRequest.commitment:type_name -> geyser.CommitmentLevel - 10, // 7: geyser.SubscribeRequest.accounts_data_slice:type_name -> geyser.SubscribeRequestAccountsDataSlice - 11, // 8: geyser.SubscribeRequest.ping:type_name -> geyser.SubscribeRequestPing - 3, // 9: geyser.SubscribeRequestFilterAccounts.filters:type_name -> geyser.SubscribeRequestFilterAccountsFilter - 4, // 10: geyser.SubscribeRequestFilterAccountsFilter.memcmp:type_name -> geyser.SubscribeRequestFilterAccountsFilterMemcmp - 13, // 11: geyser.SubscribeUpdate.account:type_name -> geyser.SubscribeUpdateAccount - 15, // 12: geyser.SubscribeUpdate.slot:type_name -> geyser.SubscribeUpdateSlot - 16, // 13: geyser.SubscribeUpdate.transaction:type_name -> geyser.SubscribeUpdateTransaction - 18, // 14: geyser.SubscribeUpdate.block:type_name -> geyser.SubscribeUpdateBlock - 21, // 15: geyser.SubscribeUpdate.ping:type_name -> geyser.SubscribeUpdatePing - 22, // 16: geyser.SubscribeUpdate.pong:type_name -> geyser.SubscribeUpdatePong - 19, // 17: geyser.SubscribeUpdate.block_meta:type_name -> geyser.SubscribeUpdateBlockMeta - 20, // 18: geyser.SubscribeUpdate.entry:type_name -> geyser.SubscribeUpdateEntry - 14, // 19: geyser.SubscribeUpdateAccount.account:type_name -> geyser.SubscribeUpdateAccountInfo - 0, // 20: geyser.SubscribeUpdateSlot.status:type_name -> geyser.CommitmentLevel - 17, // 21: geyser.SubscribeUpdateTransaction.transaction:type_name -> geyser.SubscribeUpdateTransactionInfo - 41, // 22: geyser.SubscribeUpdateTransactionInfo.transaction:type_name -> solana.storage.ConfirmedBlock.Transaction - 42, // 23: geyser.SubscribeUpdateTransactionInfo.meta:type_name -> solana.storage.ConfirmedBlock.TransactionStatusMeta - 43, // 24: geyser.SubscribeUpdateBlock.rewards:type_name -> solana.storage.ConfirmedBlock.Rewards - 44, // 25: geyser.SubscribeUpdateBlock.block_time:type_name -> solana.storage.ConfirmedBlock.UnixTimestamp - 45, // 26: geyser.SubscribeUpdateBlock.block_height:type_name -> solana.storage.ConfirmedBlock.BlockHeight - 17, // 27: geyser.SubscribeUpdateBlock.transactions:type_name -> geyser.SubscribeUpdateTransactionInfo - 14, // 28: geyser.SubscribeUpdateBlock.accounts:type_name -> geyser.SubscribeUpdateAccountInfo - 20, // 29: geyser.SubscribeUpdateBlock.entries:type_name -> geyser.SubscribeUpdateEntry - 43, // 30: geyser.SubscribeUpdateBlockMeta.rewards:type_name -> solana.storage.ConfirmedBlock.Rewards - 44, // 31: geyser.SubscribeUpdateBlockMeta.block_time:type_name -> solana.storage.ConfirmedBlock.UnixTimestamp - 45, // 32: geyser.SubscribeUpdateBlockMeta.block_height:type_name -> solana.storage.ConfirmedBlock.BlockHeight - 0, // 33: geyser.GetLatestBlockhashRequest.commitment:type_name -> geyser.CommitmentLevel - 0, // 34: geyser.GetBlockHeightRequest.commitment:type_name -> geyser.CommitmentLevel - 0, // 35: geyser.GetSlotRequest.commitment:type_name -> geyser.CommitmentLevel - 0, // 36: geyser.IsBlockhashValidRequest.commitment:type_name -> geyser.CommitmentLevel - 2, // 37: geyser.SubscribeRequest.AccountsEntry.value:type_name -> geyser.SubscribeRequestFilterAccounts - 5, // 38: geyser.SubscribeRequest.SlotsEntry.value:type_name -> geyser.SubscribeRequestFilterSlots - 6, // 39: geyser.SubscribeRequest.TransactionsEntry.value:type_name -> geyser.SubscribeRequestFilterTransactions - 7, // 40: geyser.SubscribeRequest.BlocksEntry.value:type_name -> geyser.SubscribeRequestFilterBlocks - 8, // 41: geyser.SubscribeRequest.BlocksMetaEntry.value:type_name -> geyser.SubscribeRequestFilterBlocksMeta - 9, // 42: geyser.SubscribeRequest.EntryEntry.value:type_name -> geyser.SubscribeRequestFilterEntry - 1, // 43: geyser.Geyser.Subscribe:input_type -> geyser.SubscribeRequest - 23, // 44: geyser.Geyser.Ping:input_type -> geyser.PingRequest - 25, // 45: geyser.Geyser.GetLatestBlockhash:input_type -> geyser.GetLatestBlockhashRequest - 27, // 46: geyser.Geyser.GetBlockHeight:input_type -> geyser.GetBlockHeightRequest - 29, // 47: geyser.Geyser.GetSlot:input_type -> geyser.GetSlotRequest - 33, // 48: geyser.Geyser.IsBlockhashValid:input_type -> geyser.IsBlockhashValidRequest - 31, // 49: geyser.Geyser.GetVersion:input_type -> geyser.GetVersionRequest - 12, // 50: geyser.Geyser.Subscribe:output_type -> geyser.SubscribeUpdate - 24, // 51: geyser.Geyser.Ping:output_type -> geyser.PongResponse - 26, // 52: geyser.Geyser.GetLatestBlockhash:output_type -> geyser.GetLatestBlockhashResponse - 28, // 53: geyser.Geyser.GetBlockHeight:output_type -> geyser.GetBlockHeightResponse - 30, // 54: geyser.Geyser.GetSlot:output_type -> geyser.GetSlotResponse - 34, // 55: geyser.Geyser.IsBlockhashValid:output_type -> geyser.IsBlockhashValidResponse - 32, // 56: geyser.Geyser.GetVersion:output_type -> geyser.GetVersionResponse - 50, // [50:57] is the sub-list for method output_type - 43, // [43:50] is the sub-list for method input_type - 43, // [43:43] is the sub-list for extension type_name - 43, // [43:43] is the sub-list for extension extendee - 0, // [0:43] is the sub-list for field type_name + 36, // 0: geyser.SubscribeRequest.accounts:type_name -> geyser.SubscribeRequest.AccountsEntry + 37, // 1: geyser.SubscribeRequest.slots:type_name -> geyser.SubscribeRequest.SlotsEntry + 38, // 2: geyser.SubscribeRequest.transactions:type_name -> geyser.SubscribeRequest.TransactionsEntry + 39, // 3: geyser.SubscribeRequest.transactions_status:type_name -> geyser.SubscribeRequest.TransactionsStatusEntry + 40, // 4: geyser.SubscribeRequest.blocks:type_name -> geyser.SubscribeRequest.BlocksEntry + 41, // 5: geyser.SubscribeRequest.blocks_meta:type_name -> geyser.SubscribeRequest.BlocksMetaEntry + 42, // 6: geyser.SubscribeRequest.entry:type_name -> geyser.SubscribeRequest.EntryEntry + 0, // 7: geyser.SubscribeRequest.commitment:type_name -> geyser.CommitmentLevel + 10, // 8: geyser.SubscribeRequest.accounts_data_slice:type_name -> geyser.SubscribeRequestAccountsDataSlice + 11, // 9: geyser.SubscribeRequest.ping:type_name -> geyser.SubscribeRequestPing + 3, // 10: geyser.SubscribeRequestFilterAccounts.filters:type_name -> geyser.SubscribeRequestFilterAccountsFilter + 4, // 11: geyser.SubscribeRequestFilterAccountsFilter.memcmp:type_name -> geyser.SubscribeRequestFilterAccountsFilterMemcmp + 13, // 12: geyser.SubscribeUpdate.account:type_name -> geyser.SubscribeUpdateAccount + 15, // 13: geyser.SubscribeUpdate.slot:type_name -> geyser.SubscribeUpdateSlot + 16, // 14: geyser.SubscribeUpdate.transaction:type_name -> geyser.SubscribeUpdateTransaction + 18, // 15: geyser.SubscribeUpdate.transaction_status:type_name -> geyser.SubscribeUpdateTransactionStatus + 19, // 16: geyser.SubscribeUpdate.block:type_name -> geyser.SubscribeUpdateBlock + 22, // 17: geyser.SubscribeUpdate.ping:type_name -> geyser.SubscribeUpdatePing + 23, // 18: geyser.SubscribeUpdate.pong:type_name -> geyser.SubscribeUpdatePong + 20, // 19: geyser.SubscribeUpdate.block_meta:type_name -> geyser.SubscribeUpdateBlockMeta + 21, // 20: geyser.SubscribeUpdate.entry:type_name -> geyser.SubscribeUpdateEntry + 14, // 21: geyser.SubscribeUpdateAccount.account:type_name -> geyser.SubscribeUpdateAccountInfo + 0, // 22: geyser.SubscribeUpdateSlot.status:type_name -> geyser.CommitmentLevel + 17, // 23: geyser.SubscribeUpdateTransaction.transaction:type_name -> geyser.SubscribeUpdateTransactionInfo + 43, // 24: geyser.SubscribeUpdateTransactionInfo.transaction:type_name -> solana.storage.ConfirmedBlock.Transaction + 44, // 25: geyser.SubscribeUpdateTransactionInfo.meta:type_name -> solana.storage.ConfirmedBlock.TransactionStatusMeta + 45, // 26: geyser.SubscribeUpdateTransactionStatus.err:type_name -> solana.storage.ConfirmedBlock.TransactionError + 46, // 27: geyser.SubscribeUpdateBlock.rewards:type_name -> solana.storage.ConfirmedBlock.Rewards + 47, // 28: geyser.SubscribeUpdateBlock.block_time:type_name -> solana.storage.ConfirmedBlock.UnixTimestamp + 48, // 29: geyser.SubscribeUpdateBlock.block_height:type_name -> solana.storage.ConfirmedBlock.BlockHeight + 17, // 30: geyser.SubscribeUpdateBlock.transactions:type_name -> geyser.SubscribeUpdateTransactionInfo + 14, // 31: geyser.SubscribeUpdateBlock.accounts:type_name -> geyser.SubscribeUpdateAccountInfo + 21, // 32: geyser.SubscribeUpdateBlock.entries:type_name -> geyser.SubscribeUpdateEntry + 46, // 33: geyser.SubscribeUpdateBlockMeta.rewards:type_name -> solana.storage.ConfirmedBlock.Rewards + 47, // 34: geyser.SubscribeUpdateBlockMeta.block_time:type_name -> solana.storage.ConfirmedBlock.UnixTimestamp + 48, // 35: geyser.SubscribeUpdateBlockMeta.block_height:type_name -> solana.storage.ConfirmedBlock.BlockHeight + 0, // 36: geyser.GetLatestBlockhashRequest.commitment:type_name -> geyser.CommitmentLevel + 0, // 37: geyser.GetBlockHeightRequest.commitment:type_name -> geyser.CommitmentLevel + 0, // 38: geyser.GetSlotRequest.commitment:type_name -> geyser.CommitmentLevel + 0, // 39: geyser.IsBlockhashValidRequest.commitment:type_name -> geyser.CommitmentLevel + 2, // 40: geyser.SubscribeRequest.AccountsEntry.value:type_name -> geyser.SubscribeRequestFilterAccounts + 5, // 41: geyser.SubscribeRequest.SlotsEntry.value:type_name -> geyser.SubscribeRequestFilterSlots + 6, // 42: geyser.SubscribeRequest.TransactionsEntry.value:type_name -> geyser.SubscribeRequestFilterTransactions + 6, // 43: geyser.SubscribeRequest.TransactionsStatusEntry.value:type_name -> geyser.SubscribeRequestFilterTransactions + 7, // 44: geyser.SubscribeRequest.BlocksEntry.value:type_name -> geyser.SubscribeRequestFilterBlocks + 8, // 45: geyser.SubscribeRequest.BlocksMetaEntry.value:type_name -> geyser.SubscribeRequestFilterBlocksMeta + 9, // 46: geyser.SubscribeRequest.EntryEntry.value:type_name -> geyser.SubscribeRequestFilterEntry + 1, // 47: geyser.Geyser.Subscribe:input_type -> geyser.SubscribeRequest + 24, // 48: geyser.Geyser.Ping:input_type -> geyser.PingRequest + 26, // 49: geyser.Geyser.GetLatestBlockhash:input_type -> geyser.GetLatestBlockhashRequest + 28, // 50: geyser.Geyser.GetBlockHeight:input_type -> geyser.GetBlockHeightRequest + 30, // 51: geyser.Geyser.GetSlot:input_type -> geyser.GetSlotRequest + 34, // 52: geyser.Geyser.IsBlockhashValid:input_type -> geyser.IsBlockhashValidRequest + 32, // 53: geyser.Geyser.GetVersion:input_type -> geyser.GetVersionRequest + 12, // 54: geyser.Geyser.Subscribe:output_type -> geyser.SubscribeUpdate + 25, // 55: geyser.Geyser.Ping:output_type -> geyser.PongResponse + 27, // 56: geyser.Geyser.GetLatestBlockhash:output_type -> geyser.GetLatestBlockhashResponse + 29, // 57: geyser.Geyser.GetBlockHeight:output_type -> geyser.GetBlockHeightResponse + 31, // 58: geyser.Geyser.GetSlot:output_type -> geyser.GetSlotResponse + 35, // 59: geyser.Geyser.IsBlockhashValid:output_type -> geyser.IsBlockhashValidResponse + 33, // 60: geyser.Geyser.GetVersion:output_type -> geyser.GetVersionResponse + 54, // [54:61] is the sub-list for method output_type + 47, // [47:54] is the sub-list for method input_type + 47, // [47:47] is the sub-list for extension type_name + 47, // [47:47] is the sub-list for extension extendee + 0, // [0:47] is the sub-list for field type_name } func init() { file_geyser_proto_init() } @@ -3174,7 +3313,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeUpdateBlock); i { + switch v := v.(*SubscribeUpdateTransactionStatus); i { case 0: return &v.state case 1: @@ -3186,7 +3325,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeUpdateBlockMeta); i { + switch v := v.(*SubscribeUpdateBlock); i { case 0: return &v.state case 1: @@ -3198,7 +3337,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeUpdateEntry); i { + switch v := v.(*SubscribeUpdateBlockMeta); i { case 0: return &v.state case 1: @@ -3210,7 +3349,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeUpdatePing); i { + switch v := v.(*SubscribeUpdateEntry); i { case 0: return &v.state case 1: @@ -3222,7 +3361,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeUpdatePong); i { + switch v := v.(*SubscribeUpdatePing); i { case 0: return &v.state case 1: @@ -3234,7 +3373,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PingRequest); i { + switch v := v.(*SubscribeUpdatePong); i { case 0: return &v.state case 1: @@ -3246,7 +3385,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PongResponse); i { + switch v := v.(*PingRequest); i { case 0: return &v.state case 1: @@ -3258,7 +3397,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetLatestBlockhashRequest); i { + switch v := v.(*PongResponse); i { case 0: return &v.state case 1: @@ -3270,7 +3409,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetLatestBlockhashResponse); i { + switch v := v.(*GetLatestBlockhashRequest); i { case 0: return &v.state case 1: @@ -3282,7 +3421,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockHeightRequest); i { + switch v := v.(*GetLatestBlockhashResponse); i { case 0: return &v.state case 1: @@ -3294,7 +3433,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockHeightResponse); i { + switch v := v.(*GetBlockHeightRequest); i { case 0: return &v.state case 1: @@ -3306,7 +3445,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSlotRequest); i { + switch v := v.(*GetBlockHeightResponse); i { case 0: return &v.state case 1: @@ -3318,7 +3457,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSlotResponse); i { + switch v := v.(*GetSlotRequest); i { case 0: return &v.state case 1: @@ -3330,7 +3469,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetVersionRequest); i { + switch v := v.(*GetSlotResponse); i { case 0: return &v.state case 1: @@ -3342,7 +3481,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetVersionResponse); i { + switch v := v.(*GetVersionRequest); i { case 0: return &v.state case 1: @@ -3354,7 +3493,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IsBlockhashValidRequest); i { + switch v := v.(*GetVersionResponse); i { case 0: return &v.state case 1: @@ -3366,6 +3505,18 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IsBlockhashValidRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_geyser_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IsBlockhashValidResponse); i { case 0: return &v.state @@ -3396,6 +3547,7 @@ func file_geyser_proto_init() { (*SubscribeUpdate_Account)(nil), (*SubscribeUpdate_Slot)(nil), (*SubscribeUpdate_Transaction)(nil), + (*SubscribeUpdate_TransactionStatus)(nil), (*SubscribeUpdate_Block)(nil), (*SubscribeUpdate_Ping)(nil), (*SubscribeUpdate_Pong)(nil), @@ -3404,17 +3556,17 @@ func file_geyser_proto_init() { } file_geyser_proto_msgTypes[13].OneofWrappers = []interface{}{} file_geyser_proto_msgTypes[14].OneofWrappers = []interface{}{} - file_geyser_proto_msgTypes[24].OneofWrappers = []interface{}{} - file_geyser_proto_msgTypes[26].OneofWrappers = []interface{}{} - file_geyser_proto_msgTypes[28].OneofWrappers = []interface{}{} - file_geyser_proto_msgTypes[32].OneofWrappers = []interface{}{} + file_geyser_proto_msgTypes[25].OneofWrappers = []interface{}{} + file_geyser_proto_msgTypes[27].OneofWrappers = []interface{}{} + file_geyser_proto_msgTypes[29].OneofWrappers = []interface{}{} + file_geyser_proto_msgTypes[33].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_geyser_proto_rawDesc, NumEnums: 1, - NumMessages: 40, + NumMessages: 42, NumExtensions: 0, NumServices: 1, }, diff --git a/examples/rust/src/bin/client.rs b/examples/rust/src/bin/client.rs index 6c532f43..72572165 100644 --- a/examples/rust/src/bin/client.rs +++ b/examples/rust/src/bin/client.rs @@ -3,7 +3,7 @@ use { clap::{Parser, Subcommand, ValueEnum}, futures::{future::TryFutureExt, sink::SinkExt, stream::StreamExt}, log::{error, info}, - solana_sdk::{pubkey::Pubkey, signature::Signature}, + solana_sdk::{pubkey::Pubkey, signature::Signature, transaction::TransactionError}, solana_transaction_status::{EncodedTransactionWithStatusMeta, UiTransactionEncoding}, std::{collections::HashMap, env, fmt, fs::File, sync::Arc, time::Duration}, tokio::sync::Mutex, @@ -17,13 +17,14 @@ use { SubscribeRequestFilterBlocks, SubscribeRequestFilterBlocksMeta, SubscribeRequestFilterEntry, SubscribeRequestFilterSlots, SubscribeRequestFilterTransactions, SubscribeRequestPing, SubscribeUpdateAccount, - SubscribeUpdateTransaction, + SubscribeUpdateTransaction, SubscribeUpdateTransactionStatus, }, }; type SlotsFilterMap = HashMap; type AccountFilterMap = HashMap; type TransactionsFilterMap = HashMap; +type TransactionsStatusFilterMap = HashMap; type EntryFilterMap = HashMap; type BlocksFilterMap = HashMap; type BlocksMetaFilterMap = HashMap; @@ -169,6 +170,34 @@ struct ActionSubscribe { #[clap(long)] transactions_account_required: Vec, + /// Subscribe on transactions_status updates + #[clap(long)] + transactions_status: bool, + + /// Filter vote transactions for transactions_status + #[clap(long)] + transactions_status_vote: Option, + + /// Filter failed transactions for transactions_status + #[clap(long)] + transactions_status_failed: Option, + + /// Filter by transaction signature for transactions_status + #[clap(long)] + transactions_status_signature: Option, + + /// Filter included account in transactions for transactions_status + #[clap(long)] + transactions_status_account_include: Vec, + + /// Filter excluded account in transactions for transactions_status + #[clap(long)] + transactions_status_account_exclude: Vec, + + /// Filter required account in transactions for transactions_status + #[clap(long)] + transactions_status_account_required: Vec, + #[clap(long)] entry: bool, @@ -289,6 +318,21 @@ impl Action { ); } + let mut transactions_status: TransactionsStatusFilterMap = HashMap::new(); + if args.transactions_status { + transactions_status.insert( + "client".to_string(), + SubscribeRequestFilterTransactions { + vote: args.transactions_status_vote, + failed: args.transactions_status_failed, + signature: args.transactions_status_signature.clone(), + account_include: args.transactions_status_account_include.clone(), + account_exclude: args.transactions_status_account_exclude.clone(), + account_required: args.transactions_status_account_required.clone(), + }, + ); + } + let mut entry: EntryFilterMap = HashMap::new(); if args.entry { entry.insert("client".to_owned(), SubscribeRequestFilterEntry {}); @@ -333,6 +377,7 @@ impl Action { slots, accounts, transactions, + transactions_status, entry, blocks, blocks_meta, @@ -429,6 +474,29 @@ impl From for TransactionPretty { } } +#[allow(dead_code)] +#[derive(Debug)] +pub struct TransactionStatusPretty { + slot: u64, + signature: Signature, + is_vote: bool, + index: u64, + err: Option, +} + +impl From for TransactionStatusPretty { + fn from(status: SubscribeUpdateTransactionStatus) -> Self { + Self { + slot: status.slot, + signature: Signature::try_from(status.signature.as_slice()).expect("valid signature"), + is_vote: status.is_vote, + index: status.index, + err: yellowstone_grpc_proto::convert_from::create_tx_error(status.err.as_ref()) + .expect("valid tx err"), + } + } +} + #[tokio::main] async fn main() -> anyhow::Result<()> { env::set_var( @@ -557,6 +625,14 @@ async fn geyser_subscribe( ); continue; } + Some(UpdateOneof::TransactionStatus(status)) => { + let status: TransactionStatusPretty = status.into(); + info!( + "new transaction update: filters {:?}, transaction status: {:?}", + msg.filters, status + ); + continue; + } Some(UpdateOneof::Ping(_)) => { // This is necessary to keep load balancers that expect client pings alive. If your load balancer doesn't // require periodic client pings then this is unnecessary @@ -588,6 +664,7 @@ async fn geyser_subscribe( slots: new_slots.clone(), accounts: HashMap::default(), transactions: HashMap::default(), + transactions_status: HashMap::default(), entry: HashMap::default(), blocks: HashMap::default(), blocks_meta: HashMap::default(), diff --git a/examples/rust/src/bin/tx-blocktime.rs b/examples/rust/src/bin/tx-blocktime.rs index e3a9313b..18cdb0fe 100644 --- a/examples/rust/src/bin/tx-blocktime.rs +++ b/examples/rust/src/bin/tx-blocktime.rs @@ -94,7 +94,8 @@ async fn main() -> anyhow::Result<()> { .send(SubscribeRequest { slots: HashMap::new(), accounts: HashMap::new(), - transactions: hashmap! { "".to_owned() => SubscribeRequestFilterTransactions { + transactions: HashMap::new(), + transactions_status: hashmap! { "".to_owned() => SubscribeRequestFilterTransactions { vote: args.vote, failed: args.failed, signature: args.signature, @@ -116,9 +117,9 @@ async fn main() -> anyhow::Result<()> { match message { Ok(msg) => { match msg.update_oneof { - Some(UpdateOneof::Transaction(tx)) => { + Some(UpdateOneof::TransactionStatus(tx)) => { let entry = messages.entry(tx.slot).or_default(); - let sig = Signature::try_from(tx.transaction.unwrap().signature.as_slice()) + let sig = Signature::try_from(tx.signature.as_slice()) .expect("valid signature from transaction") .to_string(); if let Some(timestamp) = entry.0 { diff --git a/yellowstone-grpc-client-nodejs/src/grpc/geyser.ts b/yellowstone-grpc-client-nodejs/src/grpc/geyser.ts index 995a0ba7..0368f441 100644 --- a/yellowstone-grpc-client-nodejs/src/grpc/geyser.ts +++ b/yellowstone-grpc-client-nodejs/src/grpc/geyser.ts @@ -15,7 +15,14 @@ import { } from "@grpc/grpc-js"; import * as Long from "long"; import * as _m0 from "protobufjs/minimal"; -import { BlockHeight, Rewards, Transaction, TransactionStatusMeta, UnixTimestamp } from "./solana-storage"; +import { + BlockHeight, + Rewards, + Transaction, + TransactionError, + TransactionStatusMeta, + UnixTimestamp, +} from "./solana-storage"; export const protobufPackage = "geyser"; @@ -62,6 +69,7 @@ export interface SubscribeRequest { accounts: { [key: string]: SubscribeRequestFilterAccounts }; slots: { [key: string]: SubscribeRequestFilterSlots }; transactions: { [key: string]: SubscribeRequestFilterTransactions }; + transactionsStatus: { [key: string]: SubscribeRequestFilterTransactions }; blocks: { [key: string]: SubscribeRequestFilterBlocks }; blocksMeta: { [key: string]: SubscribeRequestFilterBlocksMeta }; entry: { [key: string]: SubscribeRequestFilterEntry }; @@ -85,6 +93,11 @@ export interface SubscribeRequest_TransactionsEntry { value: SubscribeRequestFilterTransactions | undefined; } +export interface SubscribeRequest_TransactionsStatusEntry { + key: string; + value: SubscribeRequestFilterTransactions | undefined; +} + export interface SubscribeRequest_BlocksEntry { key: string; value: SubscribeRequestFilterBlocks | undefined; @@ -139,11 +152,9 @@ export interface SubscribeRequestFilterBlocks { includeEntries?: boolean | undefined; } -export interface SubscribeRequestFilterBlocksMeta { -} +export interface SubscribeRequestFilterBlocksMeta {} -export interface SubscribeRequestFilterEntry { -} +export interface SubscribeRequestFilterEntry {} export interface SubscribeRequestAccountsDataSlice { offset: string; @@ -159,6 +170,7 @@ export interface SubscribeUpdate { account?: SubscribeUpdateAccount | undefined; slot?: SubscribeUpdateSlot | undefined; transaction?: SubscribeUpdateTransaction | undefined; + transactionStatus?: SubscribeUpdateTransactionStatus | undefined; block?: SubscribeUpdateBlock | undefined; ping?: SubscribeUpdatePing | undefined; pong?: SubscribeUpdatePong | undefined; @@ -202,6 +214,14 @@ export interface SubscribeUpdateTransactionInfo { index: string; } +export interface SubscribeUpdateTransactionStatus { + slot: string; + signature: Uint8Array; + isVote: boolean; + index: string; + err: TransactionError | undefined; +} + export interface SubscribeUpdateBlock { slot: string; blockhash: string; @@ -240,8 +260,7 @@ export interface SubscribeUpdateEntry { startingTransactionIndex: string; } -export interface SubscribeUpdatePing { -} +export interface SubscribeUpdatePing {} export interface SubscribeUpdatePong { id: number; @@ -281,8 +300,7 @@ export interface GetSlotResponse { slot: string; } -export interface GetVersionRequest { -} +export interface GetVersionRequest {} export interface GetVersionResponse { version: string; @@ -303,6 +321,7 @@ function createBaseSubscribeRequest(): SubscribeRequest { accounts: {}, slots: {}, transactions: {}, + transactionsStatus: {}, blocks: {}, blocksMeta: {}, entry: {}, @@ -313,39 +332,73 @@ function createBaseSubscribeRequest(): SubscribeRequest { } export const SubscribeRequest = { - encode(message: SubscribeRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeRequest, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { Object.entries(message.accounts).forEach(([key, value]) => { - SubscribeRequest_AccountsEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).ldelim(); + SubscribeRequest_AccountsEntry.encode( + { key: key as any, value }, + writer.uint32(10).fork() + ).ldelim(); }); Object.entries(message.slots).forEach(([key, value]) => { - SubscribeRequest_SlotsEntry.encode({ key: key as any, value }, writer.uint32(18).fork()).ldelim(); + SubscribeRequest_SlotsEntry.encode( + { key: key as any, value }, + writer.uint32(18).fork() + ).ldelim(); }); Object.entries(message.transactions).forEach(([key, value]) => { - SubscribeRequest_TransactionsEntry.encode({ key: key as any, value }, writer.uint32(26).fork()).ldelim(); + SubscribeRequest_TransactionsEntry.encode( + { key: key as any, value }, + writer.uint32(26).fork() + ).ldelim(); + }); + Object.entries(message.transactionsStatus).forEach(([key, value]) => { + SubscribeRequest_TransactionsStatusEntry.encode( + { key: key as any, value }, + writer.uint32(82).fork() + ).ldelim(); }); Object.entries(message.blocks).forEach(([key, value]) => { - SubscribeRequest_BlocksEntry.encode({ key: key as any, value }, writer.uint32(34).fork()).ldelim(); + SubscribeRequest_BlocksEntry.encode( + { key: key as any, value }, + writer.uint32(34).fork() + ).ldelim(); }); Object.entries(message.blocksMeta).forEach(([key, value]) => { - SubscribeRequest_BlocksMetaEntry.encode({ key: key as any, value }, writer.uint32(42).fork()).ldelim(); + SubscribeRequest_BlocksMetaEntry.encode( + { key: key as any, value }, + writer.uint32(42).fork() + ).ldelim(); }); Object.entries(message.entry).forEach(([key, value]) => { - SubscribeRequest_EntryEntry.encode({ key: key as any, value }, writer.uint32(66).fork()).ldelim(); + SubscribeRequest_EntryEntry.encode( + { key: key as any, value }, + writer.uint32(66).fork() + ).ldelim(); }); if (message.commitment !== undefined) { writer.uint32(48).int32(message.commitment); } for (const v of message.accountsDataSlice) { - SubscribeRequestAccountsDataSlice.encode(v!, writer.uint32(58).fork()).ldelim(); + SubscribeRequestAccountsDataSlice.encode( + v!, + writer.uint32(58).fork() + ).ldelim(); } if (message.ping !== undefined) { - SubscribeRequestPing.encode(message.ping, writer.uint32(74).fork()).ldelim(); + SubscribeRequestPing.encode( + message.ping, + writer.uint32(74).fork() + ).ldelim(); } return writer; }, decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeRequest { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeRequest(); while (reader.pos < end) { @@ -356,7 +409,10 @@ export const SubscribeRequest = { break; } - const entry1 = SubscribeRequest_AccountsEntry.decode(reader, reader.uint32()); + const entry1 = SubscribeRequest_AccountsEntry.decode( + reader, + reader.uint32() + ); if (entry1.value !== undefined) { message.accounts[entry1.key] = entry1.value; } @@ -366,7 +422,10 @@ export const SubscribeRequest = { break; } - const entry2 = SubscribeRequest_SlotsEntry.decode(reader, reader.uint32()); + const entry2 = SubscribeRequest_SlotsEntry.decode( + reader, + reader.uint32() + ); if (entry2.value !== undefined) { message.slots[entry2.key] = entry2.value; } @@ -376,17 +435,36 @@ export const SubscribeRequest = { break; } - const entry3 = SubscribeRequest_TransactionsEntry.decode(reader, reader.uint32()); + const entry3 = SubscribeRequest_TransactionsEntry.decode( + reader, + reader.uint32() + ); if (entry3.value !== undefined) { message.transactions[entry3.key] = entry3.value; } continue; + case 10: + if (tag !== 82) { + break; + } + + const entry10 = SubscribeRequest_TransactionsStatusEntry.decode( + reader, + reader.uint32() + ); + if (entry10.value !== undefined) { + message.transactionsStatus[entry10.key] = entry10.value; + } + continue; case 4: if (tag !== 34) { break; } - const entry4 = SubscribeRequest_BlocksEntry.decode(reader, reader.uint32()); + const entry4 = SubscribeRequest_BlocksEntry.decode( + reader, + reader.uint32() + ); if (entry4.value !== undefined) { message.blocks[entry4.key] = entry4.value; } @@ -396,7 +474,10 @@ export const SubscribeRequest = { break; } - const entry5 = SubscribeRequest_BlocksMetaEntry.decode(reader, reader.uint32()); + const entry5 = SubscribeRequest_BlocksMetaEntry.decode( + reader, + reader.uint32() + ); if (entry5.value !== undefined) { message.blocksMeta[entry5.key] = entry5.value; } @@ -406,7 +487,10 @@ export const SubscribeRequest = { break; } - const entry8 = SubscribeRequest_EntryEntry.decode(reader, reader.uint32()); + const entry8 = SubscribeRequest_EntryEntry.decode( + reader, + reader.uint32() + ); if (entry8.value !== undefined) { message.entry[entry8.key] = entry8.value; } @@ -423,7 +507,9 @@ export const SubscribeRequest = { break; } - message.accountsDataSlice.push(SubscribeRequestAccountsDataSlice.decode(reader, reader.uint32())); + message.accountsDataSlice.push( + SubscribeRequestAccountsDataSlice.decode(reader, reader.uint32()) + ); continue; case 9: if (tag !== 74) { @@ -444,55 +530,72 @@ export const SubscribeRequest = { fromJSON(object: any): SubscribeRequest { return { accounts: isObject(object.accounts) - ? Object.entries(object.accounts).reduce<{ [key: string]: SubscribeRequestFilterAccounts }>( - (acc, [key, value]) => { + ? Object.entries(object.accounts).reduce<{ + [key: string]: SubscribeRequestFilterAccounts; + }>((acc, [key, value]) => { acc[key] = SubscribeRequestFilterAccounts.fromJSON(value); return acc; - }, - {}, - ) + }, {}) : {}, slots: isObject(object.slots) - ? Object.entries(object.slots).reduce<{ [key: string]: SubscribeRequestFilterSlots }>((acc, [key, value]) => { - acc[key] = SubscribeRequestFilterSlots.fromJSON(value); - return acc; - }, {}) + ? Object.entries(object.slots).reduce<{ + [key: string]: SubscribeRequestFilterSlots; + }>((acc, [key, value]) => { + acc[key] = SubscribeRequestFilterSlots.fromJSON(value); + return acc; + }, {}) : {}, transactions: isObject(object.transactions) - ? Object.entries(object.transactions).reduce<{ [key: string]: SubscribeRequestFilterTransactions }>( - (acc, [key, value]) => { + ? Object.entries(object.transactions).reduce<{ + [key: string]: SubscribeRequestFilterTransactions; + }>((acc, [key, value]) => { acc[key] = SubscribeRequestFilterTransactions.fromJSON(value); return acc; - }, - {}, - ) + }, {}) + : {}, + transactionsStatus: isObject(object.transactionsStatus) + ? Object.entries(object.transactionsStatus).reduce<{ + [key: string]: SubscribeRequestFilterTransactions; + }>((acc, [key, value]) => { + acc[key] = SubscribeRequestFilterTransactions.fromJSON(value); + return acc; + }, {}) : {}, blocks: isObject(object.blocks) - ? Object.entries(object.blocks).reduce<{ [key: string]: SubscribeRequestFilterBlocks }>((acc, [key, value]) => { - acc[key] = SubscribeRequestFilterBlocks.fromJSON(value); - return acc; - }, {}) + ? Object.entries(object.blocks).reduce<{ + [key: string]: SubscribeRequestFilterBlocks; + }>((acc, [key, value]) => { + acc[key] = SubscribeRequestFilterBlocks.fromJSON(value); + return acc; + }, {}) : {}, blocksMeta: isObject(object.blocksMeta) - ? Object.entries(object.blocksMeta).reduce<{ [key: string]: SubscribeRequestFilterBlocksMeta }>( - (acc, [key, value]) => { + ? Object.entries(object.blocksMeta).reduce<{ + [key: string]: SubscribeRequestFilterBlocksMeta; + }>((acc, [key, value]) => { acc[key] = SubscribeRequestFilterBlocksMeta.fromJSON(value); return acc; - }, - {}, - ) + }, {}) : {}, entry: isObject(object.entry) - ? Object.entries(object.entry).reduce<{ [key: string]: SubscribeRequestFilterEntry }>((acc, [key, value]) => { - acc[key] = SubscribeRequestFilterEntry.fromJSON(value); - return acc; - }, {}) + ? Object.entries(object.entry).reduce<{ + [key: string]: SubscribeRequestFilterEntry; + }>((acc, [key, value]) => { + acc[key] = SubscribeRequestFilterEntry.fromJSON(value); + return acc; + }, {}) : {}, - commitment: isSet(object.commitment) ? commitmentLevelFromJSON(object.commitment) : undefined, + commitment: isSet(object.commitment) + ? commitmentLevelFromJSON(object.commitment) + : undefined, accountsDataSlice: Array.isArray(object?.accountsDataSlice) - ? object.accountsDataSlice.map((e: any) => SubscribeRequestAccountsDataSlice.fromJSON(e)) + ? object.accountsDataSlice.map((e: any) => + SubscribeRequestAccountsDataSlice.fromJSON(e) + ) : [], - ping: isSet(object.ping) ? SubscribeRequestPing.fromJSON(object.ping) : undefined, + ping: isSet(object.ping) + ? SubscribeRequestPing.fromJSON(object.ping) + : undefined, }; }, @@ -516,6 +619,13 @@ export const SubscribeRequest = { obj.transactions[k] = SubscribeRequestFilterTransactions.toJSON(v); }); } + obj.transactionsStatus = {}; + if (message.transactionsStatus) { + Object.entries(message.transactionsStatus).forEach(([k, v]) => { + obj.transactionsStatus[k] = + SubscribeRequestFilterTransactions.toJSON(v); + }); + } obj.blocks = {}; if (message.blocks) { Object.entries(message.blocks).forEach(([k, v]) => { @@ -535,7 +645,10 @@ export const SubscribeRequest = { }); } message.commitment !== undefined && - (obj.commitment = message.commitment !== undefined ? commitmentLevelToJSON(message.commitment) : undefined); + (obj.commitment = + message.commitment !== undefined + ? commitmentLevelToJSON(message.commitment) + : undefined); if (message.accountsDataSlice) { obj.accountsDataSlice = message.accountsDataSlice.map((e) => e ? SubscribeRequestAccountsDataSlice.toJSON(e) : undefined @@ -543,74 +656,91 @@ export const SubscribeRequest = { } else { obj.accountsDataSlice = []; } - message.ping !== undefined && (obj.ping = message.ping ? SubscribeRequestPing.toJSON(message.ping) : undefined); + message.ping !== undefined && + (obj.ping = message.ping + ? SubscribeRequestPing.toJSON(message.ping) + : undefined); return obj; }, - create, I>>(base?: I): SubscribeRequest { + create, I>>( + base?: I + ): SubscribeRequest { return SubscribeRequest.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): SubscribeRequest { + fromPartial, I>>( + object: I + ): SubscribeRequest { const message = createBaseSubscribeRequest(); - message.accounts = Object.entries(object.accounts ?? {}).reduce<{ [key: string]: SubscribeRequestFilterAccounts }>( - (acc, [key, value]) => { - if (value !== undefined) { - acc[key] = SubscribeRequestFilterAccounts.fromPartial(value); - } - return acc; - }, - {}, - ); - message.slots = Object.entries(object.slots ?? {}).reduce<{ [key: string]: SubscribeRequestFilterSlots }>( - (acc, [key, value]) => { - if (value !== undefined) { - acc[key] = SubscribeRequestFilterSlots.fromPartial(value); - } - return acc; - }, - {}, - ); - message.transactions = Object.entries(object.transactions ?? {}).reduce< - { [key: string]: SubscribeRequestFilterTransactions } - >((acc, [key, value]) => { + message.accounts = Object.entries(object.accounts ?? {}).reduce<{ + [key: string]: SubscribeRequestFilterAccounts; + }>((acc, [key, value]) => { + if (value !== undefined) { + acc[key] = SubscribeRequestFilterAccounts.fromPartial(value); + } + return acc; + }, {}); + message.slots = Object.entries(object.slots ?? {}).reduce<{ + [key: string]: SubscribeRequestFilterSlots; + }>((acc, [key, value]) => { + if (value !== undefined) { + acc[key] = SubscribeRequestFilterSlots.fromPartial(value); + } + return acc; + }, {}); + message.transactions = Object.entries(object.transactions ?? {}).reduce<{ + [key: string]: SubscribeRequestFilterTransactions; + }>((acc, [key, value]) => { if (value !== undefined) { acc[key] = SubscribeRequestFilterTransactions.fromPartial(value); } return acc; }, {}); - message.blocks = Object.entries(object.blocks ?? {}).reduce<{ [key: string]: SubscribeRequestFilterBlocks }>( + message.transactionsStatus = Object.entries( + object.transactionsStatus ?? {} + ).reduce<{ [key: string]: SubscribeRequestFilterTransactions }>( (acc, [key, value]) => { if (value !== undefined) { - acc[key] = SubscribeRequestFilterBlocks.fromPartial(value); + acc[key] = SubscribeRequestFilterTransactions.fromPartial(value); } return acc; }, - {}, + {} ); - message.blocksMeta = Object.entries(object.blocksMeta ?? {}).reduce< - { [key: string]: SubscribeRequestFilterBlocksMeta } - >((acc, [key, value]) => { + message.blocks = Object.entries(object.blocks ?? {}).reduce<{ + [key: string]: SubscribeRequestFilterBlocks; + }>((acc, [key, value]) => { + if (value !== undefined) { + acc[key] = SubscribeRequestFilterBlocks.fromPartial(value); + } + return acc; + }, {}); + message.blocksMeta = Object.entries(object.blocksMeta ?? {}).reduce<{ + [key: string]: SubscribeRequestFilterBlocksMeta; + }>((acc, [key, value]) => { if (value !== undefined) { acc[key] = SubscribeRequestFilterBlocksMeta.fromPartial(value); } return acc; }, {}); - message.entry = Object.entries(object.entry ?? {}).reduce<{ [key: string]: SubscribeRequestFilterEntry }>( - (acc, [key, value]) => { - if (value !== undefined) { - acc[key] = SubscribeRequestFilterEntry.fromPartial(value); - } - return acc; - }, - {}, - ); + message.entry = Object.entries(object.entry ?? {}).reduce<{ + [key: string]: SubscribeRequestFilterEntry; + }>((acc, [key, value]) => { + if (value !== undefined) { + acc[key] = SubscribeRequestFilterEntry.fromPartial(value); + } + return acc; + }, {}); message.commitment = object.commitment ?? undefined; message.accountsDataSlice = - object.accountsDataSlice?.map((e) => SubscribeRequestAccountsDataSlice.fromPartial(e)) || []; - message.ping = (object.ping !== undefined && object.ping !== null) - ? SubscribeRequestPing.fromPartial(object.ping) - : undefined; + object.accountsDataSlice?.map((e) => + SubscribeRequestAccountsDataSlice.fromPartial(e) + ) || []; + message.ping = + object.ping !== undefined && object.ping !== null + ? SubscribeRequestPing.fromPartial(object.ping) + : undefined; return message; }, }; @@ -620,18 +750,28 @@ function createBaseSubscribeRequest_AccountsEntry(): SubscribeRequest_AccountsEn } export const SubscribeRequest_AccountsEntry = { - encode(message: SubscribeRequest_AccountsEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeRequest_AccountsEntry, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.key !== "") { writer.uint32(10).string(message.key); } if (message.value !== undefined) { - SubscribeRequestFilterAccounts.encode(message.value, writer.uint32(18).fork()).ldelim(); + SubscribeRequestFilterAccounts.encode( + message.value, + writer.uint32(18).fork() + ).ldelim(); } return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeRequest_AccountsEntry { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeRequest_AccountsEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeRequest_AccountsEntry(); while (reader.pos < end) { @@ -649,7 +789,10 @@ export const SubscribeRequest_AccountsEntry = { break; } - message.value = SubscribeRequestFilterAccounts.decode(reader, reader.uint32()); + message.value = SubscribeRequestFilterAccounts.decode( + reader, + reader.uint32() + ); continue; } if ((tag & 7) === 4 || tag === 0) { @@ -663,7 +806,9 @@ export const SubscribeRequest_AccountsEntry = { fromJSON(object: any): SubscribeRequest_AccountsEntry { return { key: isSet(object.key) ? String(object.key) : "", - value: isSet(object.value) ? SubscribeRequestFilterAccounts.fromJSON(object.value) : undefined, + value: isSet(object.value) + ? SubscribeRequestFilterAccounts.fromJSON(object.value) + : undefined, }; }, @@ -671,22 +816,27 @@ export const SubscribeRequest_AccountsEntry = { const obj: any = {}; message.key !== undefined && (obj.key = message.key); message.value !== undefined && - (obj.value = message.value ? SubscribeRequestFilterAccounts.toJSON(message.value) : undefined); + (obj.value = message.value + ? SubscribeRequestFilterAccounts.toJSON(message.value) + : undefined); return obj; }, - create, I>>(base?: I): SubscribeRequest_AccountsEntry { + create, I>>( + base?: I + ): SubscribeRequest_AccountsEntry { return SubscribeRequest_AccountsEntry.fromPartial(base ?? {}); }, fromPartial, I>>( - object: I, + object: I ): SubscribeRequest_AccountsEntry { const message = createBaseSubscribeRequest_AccountsEntry(); message.key = object.key ?? ""; - message.value = (object.value !== undefined && object.value !== null) - ? SubscribeRequestFilterAccounts.fromPartial(object.value) - : undefined; + message.value = + object.value !== undefined && object.value !== null + ? SubscribeRequestFilterAccounts.fromPartial(object.value) + : undefined; return message; }, }; @@ -696,18 +846,28 @@ function createBaseSubscribeRequest_SlotsEntry(): SubscribeRequest_SlotsEntry { } export const SubscribeRequest_SlotsEntry = { - encode(message: SubscribeRequest_SlotsEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeRequest_SlotsEntry, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.key !== "") { writer.uint32(10).string(message.key); } if (message.value !== undefined) { - SubscribeRequestFilterSlots.encode(message.value, writer.uint32(18).fork()).ldelim(); + SubscribeRequestFilterSlots.encode( + message.value, + writer.uint32(18).fork() + ).ldelim(); } return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeRequest_SlotsEntry { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeRequest_SlotsEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeRequest_SlotsEntry(); while (reader.pos < end) { @@ -725,7 +885,10 @@ export const SubscribeRequest_SlotsEntry = { break; } - message.value = SubscribeRequestFilterSlots.decode(reader, reader.uint32()); + message.value = SubscribeRequestFilterSlots.decode( + reader, + reader.uint32() + ); continue; } if ((tag & 7) === 4 || tag === 0) { @@ -739,7 +902,9 @@ export const SubscribeRequest_SlotsEntry = { fromJSON(object: any): SubscribeRequest_SlotsEntry { return { key: isSet(object.key) ? String(object.key) : "", - value: isSet(object.value) ? SubscribeRequestFilterSlots.fromJSON(object.value) : undefined, + value: isSet(object.value) + ? SubscribeRequestFilterSlots.fromJSON(object.value) + : undefined, }; }, @@ -747,20 +912,27 @@ export const SubscribeRequest_SlotsEntry = { const obj: any = {}; message.key !== undefined && (obj.key = message.key); message.value !== undefined && - (obj.value = message.value ? SubscribeRequestFilterSlots.toJSON(message.value) : undefined); + (obj.value = message.value + ? SubscribeRequestFilterSlots.toJSON(message.value) + : undefined); return obj; }, - create, I>>(base?: I): SubscribeRequest_SlotsEntry { + create, I>>( + base?: I + ): SubscribeRequest_SlotsEntry { return SubscribeRequest_SlotsEntry.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): SubscribeRequest_SlotsEntry { + fromPartial, I>>( + object: I + ): SubscribeRequest_SlotsEntry { const message = createBaseSubscribeRequest_SlotsEntry(); message.key = object.key ?? ""; - message.value = (object.value !== undefined && object.value !== null) - ? SubscribeRequestFilterSlots.fromPartial(object.value) - : undefined; + message.value = + object.value !== undefined && object.value !== null + ? SubscribeRequestFilterSlots.fromPartial(object.value) + : undefined; return message; }, }; @@ -770,18 +942,28 @@ function createBaseSubscribeRequest_TransactionsEntry(): SubscribeRequest_Transa } export const SubscribeRequest_TransactionsEntry = { - encode(message: SubscribeRequest_TransactionsEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeRequest_TransactionsEntry, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.key !== "") { writer.uint32(10).string(message.key); } if (message.value !== undefined) { - SubscribeRequestFilterTransactions.encode(message.value, writer.uint32(18).fork()).ldelim(); + SubscribeRequestFilterTransactions.encode( + message.value, + writer.uint32(18).fork() + ).ldelim(); } return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeRequest_TransactionsEntry { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeRequest_TransactionsEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeRequest_TransactionsEntry(); while (reader.pos < end) { @@ -799,7 +981,10 @@ export const SubscribeRequest_TransactionsEntry = { break; } - message.value = SubscribeRequestFilterTransactions.decode(reader, reader.uint32()); + message.value = SubscribeRequestFilterTransactions.decode( + reader, + reader.uint32() + ); continue; } if ((tag & 7) === 4 || tag === 0) { @@ -813,7 +998,9 @@ export const SubscribeRequest_TransactionsEntry = { fromJSON(object: any): SubscribeRequest_TransactionsEntry { return { key: isSet(object.key) ? String(object.key) : "", - value: isSet(object.value) ? SubscribeRequestFilterTransactions.fromJSON(object.value) : undefined, + value: isSet(object.value) + ? SubscribeRequestFilterTransactions.fromJSON(object.value) + : undefined, }; }, @@ -821,24 +1008,123 @@ export const SubscribeRequest_TransactionsEntry = { const obj: any = {}; message.key !== undefined && (obj.key = message.key); message.value !== undefined && - (obj.value = message.value ? SubscribeRequestFilterTransactions.toJSON(message.value) : undefined); + (obj.value = message.value + ? SubscribeRequestFilterTransactions.toJSON(message.value) + : undefined); return obj; }, create, I>>( - base?: I, + base?: I ): SubscribeRequest_TransactionsEntry { return SubscribeRequest_TransactionsEntry.fromPartial(base ?? {}); }, - fromPartial, I>>( - object: I, - ): SubscribeRequest_TransactionsEntry { + fromPartial< + I extends Exact, I> + >(object: I): SubscribeRequest_TransactionsEntry { const message = createBaseSubscribeRequest_TransactionsEntry(); message.key = object.key ?? ""; - message.value = (object.value !== undefined && object.value !== null) - ? SubscribeRequestFilterTransactions.fromPartial(object.value) - : undefined; + message.value = + object.value !== undefined && object.value !== null + ? SubscribeRequestFilterTransactions.fromPartial(object.value) + : undefined; + return message; + }, +}; + +function createBaseSubscribeRequest_TransactionsStatusEntry(): SubscribeRequest_TransactionsStatusEntry { + return { key: "", value: undefined }; +} + +export const SubscribeRequest_TransactionsStatusEntry = { + encode( + message: SubscribeRequest_TransactionsStatusEntry, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== undefined) { + SubscribeRequestFilterTransactions.encode( + message.value, + writer.uint32(18).fork() + ).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeRequest_TransactionsStatusEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseSubscribeRequest_TransactionsStatusEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = SubscribeRequestFilterTransactions.decode( + reader, + reader.uint32() + ); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): SubscribeRequest_TransactionsStatusEntry { + return { + key: isSet(object.key) ? String(object.key) : "", + value: isSet(object.value) + ? SubscribeRequestFilterTransactions.fromJSON(object.value) + : undefined, + }; + }, + + toJSON(message: SubscribeRequest_TransactionsStatusEntry): unknown { + const obj: any = {}; + message.key !== undefined && (obj.key = message.key); + message.value !== undefined && + (obj.value = message.value + ? SubscribeRequestFilterTransactions.toJSON(message.value) + : undefined); + return obj; + }, + + create< + I extends Exact, I> + >(base?: I): SubscribeRequest_TransactionsStatusEntry { + return SubscribeRequest_TransactionsStatusEntry.fromPartial(base ?? {}); + }, + + fromPartial< + I extends Exact, I> + >(object: I): SubscribeRequest_TransactionsStatusEntry { + const message = createBaseSubscribeRequest_TransactionsStatusEntry(); + message.key = object.key ?? ""; + message.value = + object.value !== undefined && object.value !== null + ? SubscribeRequestFilterTransactions.fromPartial(object.value) + : undefined; return message; }, }; @@ -848,18 +1134,28 @@ function createBaseSubscribeRequest_BlocksEntry(): SubscribeRequest_BlocksEntry } export const SubscribeRequest_BlocksEntry = { - encode(message: SubscribeRequest_BlocksEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeRequest_BlocksEntry, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.key !== "") { writer.uint32(10).string(message.key); } if (message.value !== undefined) { - SubscribeRequestFilterBlocks.encode(message.value, writer.uint32(18).fork()).ldelim(); + SubscribeRequestFilterBlocks.encode( + message.value, + writer.uint32(18).fork() + ).ldelim(); } return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeRequest_BlocksEntry { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeRequest_BlocksEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeRequest_BlocksEntry(); while (reader.pos < end) { @@ -877,7 +1173,10 @@ export const SubscribeRequest_BlocksEntry = { break; } - message.value = SubscribeRequestFilterBlocks.decode(reader, reader.uint32()); + message.value = SubscribeRequestFilterBlocks.decode( + reader, + reader.uint32() + ); continue; } if ((tag & 7) === 4 || tag === 0) { @@ -891,7 +1190,9 @@ export const SubscribeRequest_BlocksEntry = { fromJSON(object: any): SubscribeRequest_BlocksEntry { return { key: isSet(object.key) ? String(object.key) : "", - value: isSet(object.value) ? SubscribeRequestFilterBlocks.fromJSON(object.value) : undefined, + value: isSet(object.value) + ? SubscribeRequestFilterBlocks.fromJSON(object.value) + : undefined, }; }, @@ -899,20 +1200,27 @@ export const SubscribeRequest_BlocksEntry = { const obj: any = {}; message.key !== undefined && (obj.key = message.key); message.value !== undefined && - (obj.value = message.value ? SubscribeRequestFilterBlocks.toJSON(message.value) : undefined); + (obj.value = message.value + ? SubscribeRequestFilterBlocks.toJSON(message.value) + : undefined); return obj; }, - create, I>>(base?: I): SubscribeRequest_BlocksEntry { + create, I>>( + base?: I + ): SubscribeRequest_BlocksEntry { return SubscribeRequest_BlocksEntry.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): SubscribeRequest_BlocksEntry { + fromPartial, I>>( + object: I + ): SubscribeRequest_BlocksEntry { const message = createBaseSubscribeRequest_BlocksEntry(); message.key = object.key ?? ""; - message.value = (object.value !== undefined && object.value !== null) - ? SubscribeRequestFilterBlocks.fromPartial(object.value) - : undefined; + message.value = + object.value !== undefined && object.value !== null + ? SubscribeRequestFilterBlocks.fromPartial(object.value) + : undefined; return message; }, }; @@ -922,18 +1230,28 @@ function createBaseSubscribeRequest_BlocksMetaEntry(): SubscribeRequest_BlocksMe } export const SubscribeRequest_BlocksMetaEntry = { - encode(message: SubscribeRequest_BlocksMetaEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeRequest_BlocksMetaEntry, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.key !== "") { writer.uint32(10).string(message.key); } if (message.value !== undefined) { - SubscribeRequestFilterBlocksMeta.encode(message.value, writer.uint32(18).fork()).ldelim(); + SubscribeRequestFilterBlocksMeta.encode( + message.value, + writer.uint32(18).fork() + ).ldelim(); } return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeRequest_BlocksMetaEntry { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeRequest_BlocksMetaEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeRequest_BlocksMetaEntry(); while (reader.pos < end) { @@ -951,7 +1269,10 @@ export const SubscribeRequest_BlocksMetaEntry = { break; } - message.value = SubscribeRequestFilterBlocksMeta.decode(reader, reader.uint32()); + message.value = SubscribeRequestFilterBlocksMeta.decode( + reader, + reader.uint32() + ); continue; } if ((tag & 7) === 4 || tag === 0) { @@ -965,7 +1286,9 @@ export const SubscribeRequest_BlocksMetaEntry = { fromJSON(object: any): SubscribeRequest_BlocksMetaEntry { return { key: isSet(object.key) ? String(object.key) : "", - value: isSet(object.value) ? SubscribeRequestFilterBlocksMeta.fromJSON(object.value) : undefined, + value: isSet(object.value) + ? SubscribeRequestFilterBlocksMeta.fromJSON(object.value) + : undefined, }; }, @@ -973,24 +1296,27 @@ export const SubscribeRequest_BlocksMetaEntry = { const obj: any = {}; message.key !== undefined && (obj.key = message.key); message.value !== undefined && - (obj.value = message.value ? SubscribeRequestFilterBlocksMeta.toJSON(message.value) : undefined); + (obj.value = message.value + ? SubscribeRequestFilterBlocksMeta.toJSON(message.value) + : undefined); return obj; }, create, I>>( - base?: I, + base?: I ): SubscribeRequest_BlocksMetaEntry { return SubscribeRequest_BlocksMetaEntry.fromPartial(base ?? {}); }, - fromPartial, I>>( - object: I, - ): SubscribeRequest_BlocksMetaEntry { + fromPartial< + I extends Exact, I> + >(object: I): SubscribeRequest_BlocksMetaEntry { const message = createBaseSubscribeRequest_BlocksMetaEntry(); message.key = object.key ?? ""; - message.value = (object.value !== undefined && object.value !== null) - ? SubscribeRequestFilterBlocksMeta.fromPartial(object.value) - : undefined; + message.value = + object.value !== undefined && object.value !== null + ? SubscribeRequestFilterBlocksMeta.fromPartial(object.value) + : undefined; return message; }, }; @@ -1000,18 +1326,28 @@ function createBaseSubscribeRequest_EntryEntry(): SubscribeRequest_EntryEntry { } export const SubscribeRequest_EntryEntry = { - encode(message: SubscribeRequest_EntryEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeRequest_EntryEntry, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.key !== "") { writer.uint32(10).string(message.key); } if (message.value !== undefined) { - SubscribeRequestFilterEntry.encode(message.value, writer.uint32(18).fork()).ldelim(); + SubscribeRequestFilterEntry.encode( + message.value, + writer.uint32(18).fork() + ).ldelim(); } return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeRequest_EntryEntry { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeRequest_EntryEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeRequest_EntryEntry(); while (reader.pos < end) { @@ -1029,7 +1365,10 @@ export const SubscribeRequest_EntryEntry = { break; } - message.value = SubscribeRequestFilterEntry.decode(reader, reader.uint32()); + message.value = SubscribeRequestFilterEntry.decode( + reader, + reader.uint32() + ); continue; } if ((tag & 7) === 4 || tag === 0) { @@ -1043,7 +1382,9 @@ export const SubscribeRequest_EntryEntry = { fromJSON(object: any): SubscribeRequest_EntryEntry { return { key: isSet(object.key) ? String(object.key) : "", - value: isSet(object.value) ? SubscribeRequestFilterEntry.fromJSON(object.value) : undefined, + value: isSet(object.value) + ? SubscribeRequestFilterEntry.fromJSON(object.value) + : undefined, }; }, @@ -1051,20 +1392,27 @@ export const SubscribeRequest_EntryEntry = { const obj: any = {}; message.key !== undefined && (obj.key = message.key); message.value !== undefined && - (obj.value = message.value ? SubscribeRequestFilterEntry.toJSON(message.value) : undefined); + (obj.value = message.value + ? SubscribeRequestFilterEntry.toJSON(message.value) + : undefined); return obj; }, - create, I>>(base?: I): SubscribeRequest_EntryEntry { + create, I>>( + base?: I + ): SubscribeRequest_EntryEntry { return SubscribeRequest_EntryEntry.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): SubscribeRequest_EntryEntry { + fromPartial, I>>( + object: I + ): SubscribeRequest_EntryEntry { const message = createBaseSubscribeRequest_EntryEntry(); message.key = object.key ?? ""; - message.value = (object.value !== undefined && object.value !== null) - ? SubscribeRequestFilterEntry.fromPartial(object.value) - : undefined; + message.value = + object.value !== undefined && object.value !== null + ? SubscribeRequestFilterEntry.fromPartial(object.value) + : undefined; return message; }, }; @@ -1074,7 +1422,10 @@ function createBaseSubscribeRequestFilterAccounts(): SubscribeRequestFilterAccou } export const SubscribeRequestFilterAccounts = { - encode(message: SubscribeRequestFilterAccounts, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeRequestFilterAccounts, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { for (const v of message.account) { writer.uint32(18).string(v!); } @@ -1082,13 +1433,20 @@ export const SubscribeRequestFilterAccounts = { writer.uint32(26).string(v!); } for (const v of message.filters) { - SubscribeRequestFilterAccountsFilter.encode(v!, writer.uint32(34).fork()).ldelim(); + SubscribeRequestFilterAccountsFilter.encode( + v!, + writer.uint32(34).fork() + ).ldelim(); } return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeRequestFilterAccounts { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeRequestFilterAccounts { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeRequestFilterAccounts(); while (reader.pos < end) { @@ -1113,7 +1471,9 @@ export const SubscribeRequestFilterAccounts = { break; } - message.filters.push(SubscribeRequestFilterAccountsFilter.decode(reader, reader.uint32())); + message.filters.push( + SubscribeRequestFilterAccountsFilter.decode(reader, reader.uint32()) + ); continue; } if ((tag & 7) === 4 || tag === 0) { @@ -1126,10 +1486,16 @@ export const SubscribeRequestFilterAccounts = { fromJSON(object: any): SubscribeRequestFilterAccounts { return { - account: Array.isArray(object?.account) ? object.account.map((e: any) => String(e)) : [], - owner: Array.isArray(object?.owner) ? object.owner.map((e: any) => String(e)) : [], + account: Array.isArray(object?.account) + ? object.account.map((e: any) => String(e)) + : [], + owner: Array.isArray(object?.owner) + ? object.owner.map((e: any) => String(e)) + : [], filters: Array.isArray(object?.filters) - ? object.filters.map((e: any) => SubscribeRequestFilterAccountsFilter.fromJSON(e)) + ? object.filters.map((e: any) => + SubscribeRequestFilterAccountsFilter.fromJSON(e) + ) : [], }; }, @@ -1147,36 +1513,53 @@ export const SubscribeRequestFilterAccounts = { obj.owner = []; } if (message.filters) { - obj.filters = message.filters.map((e) => e ? SubscribeRequestFilterAccountsFilter.toJSON(e) : undefined); + obj.filters = message.filters.map((e) => + e ? SubscribeRequestFilterAccountsFilter.toJSON(e) : undefined + ); } else { obj.filters = []; } return obj; }, - create, I>>(base?: I): SubscribeRequestFilterAccounts { + create, I>>( + base?: I + ): SubscribeRequestFilterAccounts { return SubscribeRequestFilterAccounts.fromPartial(base ?? {}); }, fromPartial, I>>( - object: I, + object: I ): SubscribeRequestFilterAccounts { const message = createBaseSubscribeRequestFilterAccounts(); message.account = object.account?.map((e) => e) || []; message.owner = object.owner?.map((e) => e) || []; - message.filters = object.filters?.map((e) => SubscribeRequestFilterAccountsFilter.fromPartial(e)) || []; + message.filters = + object.filters?.map((e) => + SubscribeRequestFilterAccountsFilter.fromPartial(e) + ) || []; return message; }, }; function createBaseSubscribeRequestFilterAccountsFilter(): SubscribeRequestFilterAccountsFilter { - return { memcmp: undefined, datasize: undefined, tokenAccountState: undefined }; + return { + memcmp: undefined, + datasize: undefined, + tokenAccountState: undefined, + }; } export const SubscribeRequestFilterAccountsFilter = { - encode(message: SubscribeRequestFilterAccountsFilter, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeRequestFilterAccountsFilter, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.memcmp !== undefined) { - SubscribeRequestFilterAccountsFilterMemcmp.encode(message.memcmp, writer.uint32(10).fork()).ldelim(); + SubscribeRequestFilterAccountsFilterMemcmp.encode( + message.memcmp, + writer.uint32(10).fork() + ).ldelim(); } if (message.datasize !== undefined) { writer.uint32(16).uint64(message.datasize); @@ -1187,8 +1570,12 @@ export const SubscribeRequestFilterAccountsFilter = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeRequestFilterAccountsFilter { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeRequestFilterAccountsFilter { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeRequestFilterAccountsFilter(); while (reader.pos < end) { @@ -1199,7 +1586,10 @@ export const SubscribeRequestFilterAccountsFilter = { break; } - message.memcmp = SubscribeRequestFilterAccountsFilterMemcmp.decode(reader, reader.uint32()); + message.memcmp = SubscribeRequestFilterAccountsFilterMemcmp.decode( + reader, + reader.uint32() + ); continue; case 2: if (tag !== 16) { @@ -1226,34 +1616,42 @@ export const SubscribeRequestFilterAccountsFilter = { fromJSON(object: any): SubscribeRequestFilterAccountsFilter { return { - memcmp: isSet(object.memcmp) ? SubscribeRequestFilterAccountsFilterMemcmp.fromJSON(object.memcmp) : undefined, + memcmp: isSet(object.memcmp) + ? SubscribeRequestFilterAccountsFilterMemcmp.fromJSON(object.memcmp) + : undefined, datasize: isSet(object.datasize) ? String(object.datasize) : undefined, - tokenAccountState: isSet(object.tokenAccountState) ? Boolean(object.tokenAccountState) : undefined, + tokenAccountState: isSet(object.tokenAccountState) + ? Boolean(object.tokenAccountState) + : undefined, }; }, toJSON(message: SubscribeRequestFilterAccountsFilter): unknown { const obj: any = {}; message.memcmp !== undefined && - (obj.memcmp = message.memcmp ? SubscribeRequestFilterAccountsFilterMemcmp.toJSON(message.memcmp) : undefined); + (obj.memcmp = message.memcmp + ? SubscribeRequestFilterAccountsFilterMemcmp.toJSON(message.memcmp) + : undefined); message.datasize !== undefined && (obj.datasize = message.datasize); - message.tokenAccountState !== undefined && (obj.tokenAccountState = message.tokenAccountState); + message.tokenAccountState !== undefined && + (obj.tokenAccountState = message.tokenAccountState); return obj; }, create, I>>( - base?: I, + base?: I ): SubscribeRequestFilterAccountsFilter { return SubscribeRequestFilterAccountsFilter.fromPartial(base ?? {}); }, - fromPartial, I>>( - object: I, - ): SubscribeRequestFilterAccountsFilter { + fromPartial< + I extends Exact, I> + >(object: I): SubscribeRequestFilterAccountsFilter { const message = createBaseSubscribeRequestFilterAccountsFilter(); - message.memcmp = (object.memcmp !== undefined && object.memcmp !== null) - ? SubscribeRequestFilterAccountsFilterMemcmp.fromPartial(object.memcmp) - : undefined; + message.memcmp = + object.memcmp !== undefined && object.memcmp !== null + ? SubscribeRequestFilterAccountsFilterMemcmp.fromPartial(object.memcmp) + : undefined; message.datasize = object.datasize ?? undefined; message.tokenAccountState = object.tokenAccountState ?? undefined; return message; @@ -1261,11 +1659,19 @@ export const SubscribeRequestFilterAccountsFilter = { }; function createBaseSubscribeRequestFilterAccountsFilterMemcmp(): SubscribeRequestFilterAccountsFilterMemcmp { - return { offset: "0", bytes: undefined, base58: undefined, base64: undefined }; + return { + offset: "0", + bytes: undefined, + base58: undefined, + base64: undefined, + }; } export const SubscribeRequestFilterAccountsFilterMemcmp = { - encode(message: SubscribeRequestFilterAccountsFilterMemcmp, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeRequestFilterAccountsFilterMemcmp, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.offset !== "0") { writer.uint32(8).uint64(message.offset); } @@ -1281,8 +1687,12 @@ export const SubscribeRequestFilterAccountsFilterMemcmp = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeRequestFilterAccountsFilterMemcmp { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeRequestFilterAccountsFilterMemcmp { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeRequestFilterAccountsFilterMemcmp(); while (reader.pos < end) { @@ -1338,21 +1748,24 @@ export const SubscribeRequestFilterAccountsFilterMemcmp = { const obj: any = {}; message.offset !== undefined && (obj.offset = message.offset); message.bytes !== undefined && - (obj.bytes = message.bytes !== undefined ? base64FromBytes(message.bytes) : undefined); + (obj.bytes = + message.bytes !== undefined + ? base64FromBytes(message.bytes) + : undefined); message.base58 !== undefined && (obj.base58 = message.base58); message.base64 !== undefined && (obj.base64 = message.base64); return obj; }, - create, I>>( - base?: I, - ): SubscribeRequestFilterAccountsFilterMemcmp { + create< + I extends Exact, I> + >(base?: I): SubscribeRequestFilterAccountsFilterMemcmp { return SubscribeRequestFilterAccountsFilterMemcmp.fromPartial(base ?? {}); }, - fromPartial, I>>( - object: I, - ): SubscribeRequestFilterAccountsFilterMemcmp { + fromPartial< + I extends Exact, I> + >(object: I): SubscribeRequestFilterAccountsFilterMemcmp { const message = createBaseSubscribeRequestFilterAccountsFilterMemcmp(); message.offset = object.offset ?? "0"; message.bytes = object.bytes ?? undefined; @@ -1367,15 +1780,22 @@ function createBaseSubscribeRequestFilterSlots(): SubscribeRequestFilterSlots { } export const SubscribeRequestFilterSlots = { - encode(message: SubscribeRequestFilterSlots, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeRequestFilterSlots, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.filterByCommitment !== undefined) { writer.uint32(8).bool(message.filterByCommitment); } return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeRequestFilterSlots { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeRequestFilterSlots { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeRequestFilterSlots(); while (reader.pos < end) { @@ -1398,20 +1818,29 @@ export const SubscribeRequestFilterSlots = { }, fromJSON(object: any): SubscribeRequestFilterSlots { - return { filterByCommitment: isSet(object.filterByCommitment) ? Boolean(object.filterByCommitment) : undefined }; + return { + filterByCommitment: isSet(object.filterByCommitment) + ? Boolean(object.filterByCommitment) + : undefined, + }; }, toJSON(message: SubscribeRequestFilterSlots): unknown { const obj: any = {}; - message.filterByCommitment !== undefined && (obj.filterByCommitment = message.filterByCommitment); + message.filterByCommitment !== undefined && + (obj.filterByCommitment = message.filterByCommitment); return obj; }, - create, I>>(base?: I): SubscribeRequestFilterSlots { + create, I>>( + base?: I + ): SubscribeRequestFilterSlots { return SubscribeRequestFilterSlots.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): SubscribeRequestFilterSlots { + fromPartial, I>>( + object: I + ): SubscribeRequestFilterSlots { const message = createBaseSubscribeRequestFilterSlots(); message.filterByCommitment = object.filterByCommitment ?? undefined; return message; @@ -1430,7 +1859,10 @@ function createBaseSubscribeRequestFilterTransactions(): SubscribeRequestFilterT } export const SubscribeRequestFilterTransactions = { - encode(message: SubscribeRequestFilterTransactions, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeRequestFilterTransactions, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.vote !== undefined) { writer.uint32(8).bool(message.vote); } @@ -1452,8 +1884,12 @@ export const SubscribeRequestFilterTransactions = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeRequestFilterTransactions { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeRequestFilterTransactions { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeRequestFilterTransactions(); while (reader.pos < end) { @@ -1515,9 +1951,15 @@ export const SubscribeRequestFilterTransactions = { vote: isSet(object.vote) ? Boolean(object.vote) : undefined, failed: isSet(object.failed) ? Boolean(object.failed) : undefined, signature: isSet(object.signature) ? String(object.signature) : undefined, - accountInclude: Array.isArray(object?.accountInclude) ? object.accountInclude.map((e: any) => String(e)) : [], - accountExclude: Array.isArray(object?.accountExclude) ? object.accountExclude.map((e: any) => String(e)) : [], - accountRequired: Array.isArray(object?.accountRequired) ? object.accountRequired.map((e: any) => String(e)) : [], + accountInclude: Array.isArray(object?.accountInclude) + ? object.accountInclude.map((e: any) => String(e)) + : [], + accountExclude: Array.isArray(object?.accountExclude) + ? object.accountExclude.map((e: any) => String(e)) + : [], + accountRequired: Array.isArray(object?.accountRequired) + ? object.accountRequired.map((e: any) => String(e)) + : [], }; }, @@ -1545,14 +1987,14 @@ export const SubscribeRequestFilterTransactions = { }, create, I>>( - base?: I, + base?: I ): SubscribeRequestFilterTransactions { return SubscribeRequestFilterTransactions.fromPartial(base ?? {}); }, - fromPartial, I>>( - object: I, - ): SubscribeRequestFilterTransactions { + fromPartial< + I extends Exact, I> + >(object: I): SubscribeRequestFilterTransactions { const message = createBaseSubscribeRequestFilterTransactions(); message.vote = object.vote ?? undefined; message.failed = object.failed ?? undefined; @@ -1565,11 +2007,19 @@ export const SubscribeRequestFilterTransactions = { }; function createBaseSubscribeRequestFilterBlocks(): SubscribeRequestFilterBlocks { - return { accountInclude: [], includeTransactions: undefined, includeAccounts: undefined, includeEntries: undefined }; + return { + accountInclude: [], + includeTransactions: undefined, + includeAccounts: undefined, + includeEntries: undefined, + }; } export const SubscribeRequestFilterBlocks = { - encode(message: SubscribeRequestFilterBlocks, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeRequestFilterBlocks, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { for (const v of message.accountInclude) { writer.uint32(10).string(v!); } @@ -1585,8 +2035,12 @@ export const SubscribeRequestFilterBlocks = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeRequestFilterBlocks { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeRequestFilterBlocks { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeRequestFilterBlocks(); while (reader.pos < end) { @@ -1631,10 +2085,18 @@ export const SubscribeRequestFilterBlocks = { fromJSON(object: any): SubscribeRequestFilterBlocks { return { - accountInclude: Array.isArray(object?.accountInclude) ? object.accountInclude.map((e: any) => String(e)) : [], - includeTransactions: isSet(object.includeTransactions) ? Boolean(object.includeTransactions) : undefined, - includeAccounts: isSet(object.includeAccounts) ? Boolean(object.includeAccounts) : undefined, - includeEntries: isSet(object.includeEntries) ? Boolean(object.includeEntries) : undefined, + accountInclude: Array.isArray(object?.accountInclude) + ? object.accountInclude.map((e: any) => String(e)) + : [], + includeTransactions: isSet(object.includeTransactions) + ? Boolean(object.includeTransactions) + : undefined, + includeAccounts: isSet(object.includeAccounts) + ? Boolean(object.includeAccounts) + : undefined, + includeEntries: isSet(object.includeEntries) + ? Boolean(object.includeEntries) + : undefined, }; }, @@ -1645,17 +2107,24 @@ export const SubscribeRequestFilterBlocks = { } else { obj.accountInclude = []; } - message.includeTransactions !== undefined && (obj.includeTransactions = message.includeTransactions); - message.includeAccounts !== undefined && (obj.includeAccounts = message.includeAccounts); - message.includeEntries !== undefined && (obj.includeEntries = message.includeEntries); + message.includeTransactions !== undefined && + (obj.includeTransactions = message.includeTransactions); + message.includeAccounts !== undefined && + (obj.includeAccounts = message.includeAccounts); + message.includeEntries !== undefined && + (obj.includeEntries = message.includeEntries); return obj; }, - create, I>>(base?: I): SubscribeRequestFilterBlocks { + create, I>>( + base?: I + ): SubscribeRequestFilterBlocks { return SubscribeRequestFilterBlocks.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): SubscribeRequestFilterBlocks { + fromPartial, I>>( + object: I + ): SubscribeRequestFilterBlocks { const message = createBaseSubscribeRequestFilterBlocks(); message.accountInclude = object.accountInclude?.map((e) => e) || []; message.includeTransactions = object.includeTransactions ?? undefined; @@ -1670,12 +2139,19 @@ function createBaseSubscribeRequestFilterBlocksMeta(): SubscribeRequestFilterBlo } export const SubscribeRequestFilterBlocksMeta = { - encode(_: SubscribeRequestFilterBlocksMeta, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + _: SubscribeRequestFilterBlocksMeta, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeRequestFilterBlocksMeta { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeRequestFilterBlocksMeta { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeRequestFilterBlocksMeta(); while (reader.pos < end) { @@ -1700,14 +2176,14 @@ export const SubscribeRequestFilterBlocksMeta = { }, create, I>>( - base?: I, + base?: I ): SubscribeRequestFilterBlocksMeta { return SubscribeRequestFilterBlocksMeta.fromPartial(base ?? {}); }, - fromPartial, I>>( - _: I, - ): SubscribeRequestFilterBlocksMeta { + fromPartial< + I extends Exact, I> + >(_: I): SubscribeRequestFilterBlocksMeta { const message = createBaseSubscribeRequestFilterBlocksMeta(); return message; }, @@ -1718,12 +2194,19 @@ function createBaseSubscribeRequestFilterEntry(): SubscribeRequestFilterEntry { } export const SubscribeRequestFilterEntry = { - encode(_: SubscribeRequestFilterEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + _: SubscribeRequestFilterEntry, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeRequestFilterEntry { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeRequestFilterEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeRequestFilterEntry(); while (reader.pos < end) { @@ -1747,11 +2230,15 @@ export const SubscribeRequestFilterEntry = { return obj; }, - create, I>>(base?: I): SubscribeRequestFilterEntry { + create, I>>( + base?: I + ): SubscribeRequestFilterEntry { return SubscribeRequestFilterEntry.fromPartial(base ?? {}); }, - fromPartial, I>>(_: I): SubscribeRequestFilterEntry { + fromPartial, I>>( + _: I + ): SubscribeRequestFilterEntry { const message = createBaseSubscribeRequestFilterEntry(); return message; }, @@ -1762,7 +2249,10 @@ function createBaseSubscribeRequestAccountsDataSlice(): SubscribeRequestAccounts } export const SubscribeRequestAccountsDataSlice = { - encode(message: SubscribeRequestAccountsDataSlice, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeRequestAccountsDataSlice, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.offset !== "0") { writer.uint32(8).uint64(message.offset); } @@ -1772,8 +2262,12 @@ export const SubscribeRequestAccountsDataSlice = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeRequestAccountsDataSlice { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeRequestAccountsDataSlice { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeRequestAccountsDataSlice(); while (reader.pos < end) { @@ -1817,14 +2311,14 @@ export const SubscribeRequestAccountsDataSlice = { }, create, I>>( - base?: I, + base?: I ): SubscribeRequestAccountsDataSlice { return SubscribeRequestAccountsDataSlice.fromPartial(base ?? {}); }, - fromPartial, I>>( - object: I, - ): SubscribeRequestAccountsDataSlice { + fromPartial< + I extends Exact, I> + >(object: I): SubscribeRequestAccountsDataSlice { const message = createBaseSubscribeRequestAccountsDataSlice(); message.offset = object.offset ?? "0"; message.length = object.length ?? "0"; @@ -1837,15 +2331,22 @@ function createBaseSubscribeRequestPing(): SubscribeRequestPing { } export const SubscribeRequestPing = { - encode(message: SubscribeRequestPing, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeRequestPing, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.id !== 0) { writer.uint32(8).int32(message.id); } return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeRequestPing { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeRequestPing { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeRequestPing(); while (reader.pos < end) { @@ -1877,11 +2378,15 @@ export const SubscribeRequestPing = { return obj; }, - create, I>>(base?: I): SubscribeRequestPing { + create, I>>( + base?: I + ): SubscribeRequestPing { return SubscribeRequestPing.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): SubscribeRequestPing { + fromPartial, I>>( + object: I + ): SubscribeRequestPing { const message = createBaseSubscribeRequestPing(); message.id = object.id ?? 0; return message; @@ -1894,6 +2399,7 @@ function createBaseSubscribeUpdate(): SubscribeUpdate { account: undefined, slot: undefined, transaction: undefined, + transactionStatus: undefined, block: undefined, ping: undefined, pong: undefined, @@ -1903,39 +2409,73 @@ function createBaseSubscribeUpdate(): SubscribeUpdate { } export const SubscribeUpdate = { - encode(message: SubscribeUpdate, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeUpdate, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { for (const v of message.filters) { writer.uint32(10).string(v!); } if (message.account !== undefined) { - SubscribeUpdateAccount.encode(message.account, writer.uint32(18).fork()).ldelim(); + SubscribeUpdateAccount.encode( + message.account, + writer.uint32(18).fork() + ).ldelim(); } if (message.slot !== undefined) { - SubscribeUpdateSlot.encode(message.slot, writer.uint32(26).fork()).ldelim(); + SubscribeUpdateSlot.encode( + message.slot, + writer.uint32(26).fork() + ).ldelim(); } if (message.transaction !== undefined) { - SubscribeUpdateTransaction.encode(message.transaction, writer.uint32(34).fork()).ldelim(); + SubscribeUpdateTransaction.encode( + message.transaction, + writer.uint32(34).fork() + ).ldelim(); + } + if (message.transactionStatus !== undefined) { + SubscribeUpdateTransactionStatus.encode( + message.transactionStatus, + writer.uint32(82).fork() + ).ldelim(); } if (message.block !== undefined) { - SubscribeUpdateBlock.encode(message.block, writer.uint32(42).fork()).ldelim(); + SubscribeUpdateBlock.encode( + message.block, + writer.uint32(42).fork() + ).ldelim(); } if (message.ping !== undefined) { - SubscribeUpdatePing.encode(message.ping, writer.uint32(50).fork()).ldelim(); + SubscribeUpdatePing.encode( + message.ping, + writer.uint32(50).fork() + ).ldelim(); } if (message.pong !== undefined) { - SubscribeUpdatePong.encode(message.pong, writer.uint32(74).fork()).ldelim(); + SubscribeUpdatePong.encode( + message.pong, + writer.uint32(74).fork() + ).ldelim(); } if (message.blockMeta !== undefined) { - SubscribeUpdateBlockMeta.encode(message.blockMeta, writer.uint32(58).fork()).ldelim(); + SubscribeUpdateBlockMeta.encode( + message.blockMeta, + writer.uint32(58).fork() + ).ldelim(); } if (message.entry !== undefined) { - SubscribeUpdateEntry.encode(message.entry, writer.uint32(66).fork()).ldelim(); + SubscribeUpdateEntry.encode( + message.entry, + writer.uint32(66).fork() + ).ldelim(); } return writer; }, decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeUpdate { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeUpdate(); while (reader.pos < end) { @@ -1953,7 +2493,10 @@ export const SubscribeUpdate = { break; } - message.account = SubscribeUpdateAccount.decode(reader, reader.uint32()); + message.account = SubscribeUpdateAccount.decode( + reader, + reader.uint32() + ); continue; case 3: if (tag !== 26) { @@ -1967,7 +2510,20 @@ export const SubscribeUpdate = { break; } - message.transaction = SubscribeUpdateTransaction.decode(reader, reader.uint32()); + message.transaction = SubscribeUpdateTransaction.decode( + reader, + reader.uint32() + ); + continue; + case 10: + if (tag !== 82) { + break; + } + + message.transactionStatus = SubscribeUpdateTransactionStatus.decode( + reader, + reader.uint32() + ); continue; case 5: if (tag !== 42) { @@ -1995,7 +2551,10 @@ export const SubscribeUpdate = { break; } - message.blockMeta = SubscribeUpdateBlockMeta.decode(reader, reader.uint32()); + message.blockMeta = SubscribeUpdateBlockMeta.decode( + reader, + reader.uint32() + ); continue; case 8: if (tag !== 66) { @@ -2015,15 +2574,36 @@ export const SubscribeUpdate = { fromJSON(object: any): SubscribeUpdate { return { - filters: Array.isArray(object?.filters) ? object.filters.map((e: any) => String(e)) : [], - account: isSet(object.account) ? SubscribeUpdateAccount.fromJSON(object.account) : undefined, - slot: isSet(object.slot) ? SubscribeUpdateSlot.fromJSON(object.slot) : undefined, - transaction: isSet(object.transaction) ? SubscribeUpdateTransaction.fromJSON(object.transaction) : undefined, - block: isSet(object.block) ? SubscribeUpdateBlock.fromJSON(object.block) : undefined, - ping: isSet(object.ping) ? SubscribeUpdatePing.fromJSON(object.ping) : undefined, - pong: isSet(object.pong) ? SubscribeUpdatePong.fromJSON(object.pong) : undefined, - blockMeta: isSet(object.blockMeta) ? SubscribeUpdateBlockMeta.fromJSON(object.blockMeta) : undefined, - entry: isSet(object.entry) ? SubscribeUpdateEntry.fromJSON(object.entry) : undefined, + filters: Array.isArray(object?.filters) + ? object.filters.map((e: any) => String(e)) + : [], + account: isSet(object.account) + ? SubscribeUpdateAccount.fromJSON(object.account) + : undefined, + slot: isSet(object.slot) + ? SubscribeUpdateSlot.fromJSON(object.slot) + : undefined, + transaction: isSet(object.transaction) + ? SubscribeUpdateTransaction.fromJSON(object.transaction) + : undefined, + transactionStatus: isSet(object.transactionStatus) + ? SubscribeUpdateTransactionStatus.fromJSON(object.transactionStatus) + : undefined, + block: isSet(object.block) + ? SubscribeUpdateBlock.fromJSON(object.block) + : undefined, + ping: isSet(object.ping) + ? SubscribeUpdatePing.fromJSON(object.ping) + : undefined, + pong: isSet(object.pong) + ? SubscribeUpdatePong.fromJSON(object.pong) + : undefined, + blockMeta: isSet(object.blockMeta) + ? SubscribeUpdateBlockMeta.fromJSON(object.blockMeta) + : undefined, + entry: isSet(object.entry) + ? SubscribeUpdateEntry.fromJSON(object.entry) + : undefined, }; }, @@ -2035,50 +2615,92 @@ export const SubscribeUpdate = { obj.filters = []; } message.account !== undefined && - (obj.account = message.account ? SubscribeUpdateAccount.toJSON(message.account) : undefined); - message.slot !== undefined && (obj.slot = message.slot ? SubscribeUpdateSlot.toJSON(message.slot) : undefined); + (obj.account = message.account + ? SubscribeUpdateAccount.toJSON(message.account) + : undefined); + message.slot !== undefined && + (obj.slot = message.slot + ? SubscribeUpdateSlot.toJSON(message.slot) + : undefined); message.transaction !== undefined && - (obj.transaction = message.transaction ? SubscribeUpdateTransaction.toJSON(message.transaction) : undefined); - message.block !== undefined && (obj.block = message.block ? SubscribeUpdateBlock.toJSON(message.block) : undefined); - message.ping !== undefined && (obj.ping = message.ping ? SubscribeUpdatePing.toJSON(message.ping) : undefined); - message.pong !== undefined && (obj.pong = message.pong ? SubscribeUpdatePong.toJSON(message.pong) : undefined); + (obj.transaction = message.transaction + ? SubscribeUpdateTransaction.toJSON(message.transaction) + : undefined); + message.transactionStatus !== undefined && + (obj.transactionStatus = message.transactionStatus + ? SubscribeUpdateTransactionStatus.toJSON(message.transactionStatus) + : undefined); + message.block !== undefined && + (obj.block = message.block + ? SubscribeUpdateBlock.toJSON(message.block) + : undefined); + message.ping !== undefined && + (obj.ping = message.ping + ? SubscribeUpdatePing.toJSON(message.ping) + : undefined); + message.pong !== undefined && + (obj.pong = message.pong + ? SubscribeUpdatePong.toJSON(message.pong) + : undefined); message.blockMeta !== undefined && - (obj.blockMeta = message.blockMeta ? SubscribeUpdateBlockMeta.toJSON(message.blockMeta) : undefined); - message.entry !== undefined && (obj.entry = message.entry ? SubscribeUpdateEntry.toJSON(message.entry) : undefined); + (obj.blockMeta = message.blockMeta + ? SubscribeUpdateBlockMeta.toJSON(message.blockMeta) + : undefined); + message.entry !== undefined && + (obj.entry = message.entry + ? SubscribeUpdateEntry.toJSON(message.entry) + : undefined); return obj; }, - create, I>>(base?: I): SubscribeUpdate { + create, I>>( + base?: I + ): SubscribeUpdate { return SubscribeUpdate.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): SubscribeUpdate { + fromPartial, I>>( + object: I + ): SubscribeUpdate { const message = createBaseSubscribeUpdate(); message.filters = object.filters?.map((e) => e) || []; - message.account = (object.account !== undefined && object.account !== null) - ? SubscribeUpdateAccount.fromPartial(object.account) - : undefined; - message.slot = (object.slot !== undefined && object.slot !== null) - ? SubscribeUpdateSlot.fromPartial(object.slot) - : undefined; - message.transaction = (object.transaction !== undefined && object.transaction !== null) - ? SubscribeUpdateTransaction.fromPartial(object.transaction) - : undefined; - message.block = (object.block !== undefined && object.block !== null) - ? SubscribeUpdateBlock.fromPartial(object.block) - : undefined; - message.ping = (object.ping !== undefined && object.ping !== null) - ? SubscribeUpdatePing.fromPartial(object.ping) - : undefined; - message.pong = (object.pong !== undefined && object.pong !== null) - ? SubscribeUpdatePong.fromPartial(object.pong) - : undefined; - message.blockMeta = (object.blockMeta !== undefined && object.blockMeta !== null) - ? SubscribeUpdateBlockMeta.fromPartial(object.blockMeta) - : undefined; - message.entry = (object.entry !== undefined && object.entry !== null) - ? SubscribeUpdateEntry.fromPartial(object.entry) - : undefined; + message.account = + object.account !== undefined && object.account !== null + ? SubscribeUpdateAccount.fromPartial(object.account) + : undefined; + message.slot = + object.slot !== undefined && object.slot !== null + ? SubscribeUpdateSlot.fromPartial(object.slot) + : undefined; + message.transaction = + object.transaction !== undefined && object.transaction !== null + ? SubscribeUpdateTransaction.fromPartial(object.transaction) + : undefined; + message.transactionStatus = + object.transactionStatus !== undefined && + object.transactionStatus !== null + ? SubscribeUpdateTransactionStatus.fromPartial(object.transactionStatus) + : undefined; + message.block = + object.block !== undefined && object.block !== null + ? SubscribeUpdateBlock.fromPartial(object.block) + : undefined; + message.ping = + object.ping !== undefined && object.ping !== null + ? SubscribeUpdatePing.fromPartial(object.ping) + : undefined; + message.pong = + object.pong !== undefined && object.pong !== null + ? SubscribeUpdatePong.fromPartial(object.pong) + : undefined; + message.blockMeta = + object.blockMeta !== undefined && object.blockMeta !== null + ? SubscribeUpdateBlockMeta.fromPartial(object.blockMeta) + : undefined; + message.entry = + object.entry !== undefined && object.entry !== null + ? SubscribeUpdateEntry.fromPartial(object.entry) + : undefined; return message; }, }; @@ -2088,9 +2710,15 @@ function createBaseSubscribeUpdateAccount(): SubscribeUpdateAccount { } export const SubscribeUpdateAccount = { - encode(message: SubscribeUpdateAccount, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeUpdateAccount, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.account !== undefined) { - SubscribeUpdateAccountInfo.encode(message.account, writer.uint32(10).fork()).ldelim(); + SubscribeUpdateAccountInfo.encode( + message.account, + writer.uint32(10).fork() + ).ldelim(); } if (message.slot !== "0") { writer.uint32(16).uint64(message.slot); @@ -2101,8 +2729,12 @@ export const SubscribeUpdateAccount = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeUpdateAccount { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeUpdateAccount { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeUpdateAccount(); while (reader.pos < end) { @@ -2113,7 +2745,10 @@ export const SubscribeUpdateAccount = { break; } - message.account = SubscribeUpdateAccountInfo.decode(reader, reader.uint32()); + message.account = SubscribeUpdateAccountInfo.decode( + reader, + reader.uint32() + ); continue; case 2: if (tag !== 16) { @@ -2140,7 +2775,9 @@ export const SubscribeUpdateAccount = { fromJSON(object: any): SubscribeUpdateAccount { return { - account: isSet(object.account) ? SubscribeUpdateAccountInfo.fromJSON(object.account) : undefined, + account: isSet(object.account) + ? SubscribeUpdateAccountInfo.fromJSON(object.account) + : undefined, slot: isSet(object.slot) ? String(object.slot) : "0", isStartup: isSet(object.isStartup) ? Boolean(object.isStartup) : false, }; @@ -2149,21 +2786,28 @@ export const SubscribeUpdateAccount = { toJSON(message: SubscribeUpdateAccount): unknown { const obj: any = {}; message.account !== undefined && - (obj.account = message.account ? SubscribeUpdateAccountInfo.toJSON(message.account) : undefined); + (obj.account = message.account + ? SubscribeUpdateAccountInfo.toJSON(message.account) + : undefined); message.slot !== undefined && (obj.slot = message.slot); message.isStartup !== undefined && (obj.isStartup = message.isStartup); return obj; }, - create, I>>(base?: I): SubscribeUpdateAccount { + create, I>>( + base?: I + ): SubscribeUpdateAccount { return SubscribeUpdateAccount.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): SubscribeUpdateAccount { + fromPartial, I>>( + object: I + ): SubscribeUpdateAccount { const message = createBaseSubscribeUpdateAccount(); - message.account = (object.account !== undefined && object.account !== null) - ? SubscribeUpdateAccountInfo.fromPartial(object.account) - : undefined; + message.account = + object.account !== undefined && object.account !== null + ? SubscribeUpdateAccountInfo.fromPartial(object.account) + : undefined; message.slot = object.slot ?? "0"; message.isStartup = object.isStartup ?? false; return message; @@ -2184,7 +2828,10 @@ function createBaseSubscribeUpdateAccountInfo(): SubscribeUpdateAccountInfo { } export const SubscribeUpdateAccountInfo = { - encode(message: SubscribeUpdateAccountInfo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeUpdateAccountInfo, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.pubkey.length !== 0) { writer.uint32(10).bytes(message.pubkey); } @@ -2212,8 +2859,12 @@ export const SubscribeUpdateAccountInfo = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeUpdateAccountInfo { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeUpdateAccountInfo { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeUpdateAccountInfo(); while (reader.pos < end) { @@ -2286,39 +2937,63 @@ export const SubscribeUpdateAccountInfo = { fromJSON(object: any): SubscribeUpdateAccountInfo { return { - pubkey: isSet(object.pubkey) ? bytesFromBase64(object.pubkey) : new Uint8Array(0), + pubkey: isSet(object.pubkey) + ? bytesFromBase64(object.pubkey) + : new Uint8Array(0), lamports: isSet(object.lamports) ? String(object.lamports) : "0", - owner: isSet(object.owner) ? bytesFromBase64(object.owner) : new Uint8Array(0), + owner: isSet(object.owner) + ? bytesFromBase64(object.owner) + : new Uint8Array(0), executable: isSet(object.executable) ? Boolean(object.executable) : false, rentEpoch: isSet(object.rentEpoch) ? String(object.rentEpoch) : "0", - data: isSet(object.data) ? bytesFromBase64(object.data) : new Uint8Array(0), - writeVersion: isSet(object.writeVersion) ? String(object.writeVersion) : "0", - txnSignature: isSet(object.txnSignature) ? bytesFromBase64(object.txnSignature) : undefined, + data: isSet(object.data) + ? bytesFromBase64(object.data) + : new Uint8Array(0), + writeVersion: isSet(object.writeVersion) + ? String(object.writeVersion) + : "0", + txnSignature: isSet(object.txnSignature) + ? bytesFromBase64(object.txnSignature) + : undefined, }; }, toJSON(message: SubscribeUpdateAccountInfo): unknown { const obj: any = {}; message.pubkey !== undefined && - (obj.pubkey = base64FromBytes(message.pubkey !== undefined ? message.pubkey : new Uint8Array(0))); + (obj.pubkey = base64FromBytes( + message.pubkey !== undefined ? message.pubkey : new Uint8Array(0) + )); message.lamports !== undefined && (obj.lamports = message.lamports); message.owner !== undefined && - (obj.owner = base64FromBytes(message.owner !== undefined ? message.owner : new Uint8Array(0))); + (obj.owner = base64FromBytes( + message.owner !== undefined ? message.owner : new Uint8Array(0) + )); message.executable !== undefined && (obj.executable = message.executable); message.rentEpoch !== undefined && (obj.rentEpoch = message.rentEpoch); message.data !== undefined && - (obj.data = base64FromBytes(message.data !== undefined ? message.data : new Uint8Array(0))); - message.writeVersion !== undefined && (obj.writeVersion = message.writeVersion); + (obj.data = base64FromBytes( + message.data !== undefined ? message.data : new Uint8Array(0) + )); + message.writeVersion !== undefined && + (obj.writeVersion = message.writeVersion); message.txnSignature !== undefined && - (obj.txnSignature = message.txnSignature !== undefined ? base64FromBytes(message.txnSignature) : undefined); + (obj.txnSignature = + message.txnSignature !== undefined + ? base64FromBytes(message.txnSignature) + : undefined); return obj; }, - create, I>>(base?: I): SubscribeUpdateAccountInfo { + create, I>>( + base?: I + ): SubscribeUpdateAccountInfo { return SubscribeUpdateAccountInfo.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): SubscribeUpdateAccountInfo { + fromPartial, I>>( + object: I + ): SubscribeUpdateAccountInfo { const message = createBaseSubscribeUpdateAccountInfo(); message.pubkey = object.pubkey ?? new Uint8Array(0); message.lamports = object.lamports ?? "0"; @@ -2337,7 +3012,10 @@ function createBaseSubscribeUpdateSlot(): SubscribeUpdateSlot { } export const SubscribeUpdateSlot = { - encode(message: SubscribeUpdateSlot, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeUpdateSlot, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.slot !== "0") { writer.uint32(8).uint64(message.slot); } @@ -2351,7 +3029,8 @@ export const SubscribeUpdateSlot = { }, decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeUpdateSlot { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeUpdateSlot(); while (reader.pos < end) { @@ -2399,15 +3078,20 @@ export const SubscribeUpdateSlot = { const obj: any = {}; message.slot !== undefined && (obj.slot = message.slot); message.parent !== undefined && (obj.parent = message.parent); - message.status !== undefined && (obj.status = commitmentLevelToJSON(message.status)); + message.status !== undefined && + (obj.status = commitmentLevelToJSON(message.status)); return obj; }, - create, I>>(base?: I): SubscribeUpdateSlot { + create, I>>( + base?: I + ): SubscribeUpdateSlot { return SubscribeUpdateSlot.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): SubscribeUpdateSlot { + fromPartial, I>>( + object: I + ): SubscribeUpdateSlot { const message = createBaseSubscribeUpdateSlot(); message.slot = object.slot ?? "0"; message.parent = object.parent ?? undefined; @@ -2421,9 +3105,15 @@ function createBaseSubscribeUpdateTransaction(): SubscribeUpdateTransaction { } export const SubscribeUpdateTransaction = { - encode(message: SubscribeUpdateTransaction, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeUpdateTransaction, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.transaction !== undefined) { - SubscribeUpdateTransactionInfo.encode(message.transaction, writer.uint32(10).fork()).ldelim(); + SubscribeUpdateTransactionInfo.encode( + message.transaction, + writer.uint32(10).fork() + ).ldelim(); } if (message.slot !== "0") { writer.uint32(16).uint64(message.slot); @@ -2431,8 +3121,12 @@ export const SubscribeUpdateTransaction = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeUpdateTransaction { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeUpdateTransaction { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeUpdateTransaction(); while (reader.pos < end) { @@ -2443,7 +3137,10 @@ export const SubscribeUpdateTransaction = { break; } - message.transaction = SubscribeUpdateTransactionInfo.decode(reader, reader.uint32()); + message.transaction = SubscribeUpdateTransactionInfo.decode( + reader, + reader.uint32() + ); continue; case 2: if (tag !== 16) { @@ -2463,7 +3160,9 @@ export const SubscribeUpdateTransaction = { fromJSON(object: any): SubscribeUpdateTransaction { return { - transaction: isSet(object.transaction) ? SubscribeUpdateTransactionInfo.fromJSON(object.transaction) : undefined, + transaction: isSet(object.transaction) + ? SubscribeUpdateTransactionInfo.fromJSON(object.transaction) + : undefined, slot: isSet(object.slot) ? String(object.slot) : "0", }; }, @@ -2471,31 +3170,47 @@ export const SubscribeUpdateTransaction = { toJSON(message: SubscribeUpdateTransaction): unknown { const obj: any = {}; message.transaction !== undefined && - (obj.transaction = message.transaction ? SubscribeUpdateTransactionInfo.toJSON(message.transaction) : undefined); + (obj.transaction = message.transaction + ? SubscribeUpdateTransactionInfo.toJSON(message.transaction) + : undefined); message.slot !== undefined && (obj.slot = message.slot); return obj; }, - create, I>>(base?: I): SubscribeUpdateTransaction { + create, I>>( + base?: I + ): SubscribeUpdateTransaction { return SubscribeUpdateTransaction.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): SubscribeUpdateTransaction { + fromPartial, I>>( + object: I + ): SubscribeUpdateTransaction { const message = createBaseSubscribeUpdateTransaction(); - message.transaction = (object.transaction !== undefined && object.transaction !== null) - ? SubscribeUpdateTransactionInfo.fromPartial(object.transaction) - : undefined; + message.transaction = + object.transaction !== undefined && object.transaction !== null + ? SubscribeUpdateTransactionInfo.fromPartial(object.transaction) + : undefined; message.slot = object.slot ?? "0"; return message; }, }; function createBaseSubscribeUpdateTransactionInfo(): SubscribeUpdateTransactionInfo { - return { signature: new Uint8Array(0), isVote: false, transaction: undefined, meta: undefined, index: "0" }; + return { + signature: new Uint8Array(0), + isVote: false, + transaction: undefined, + meta: undefined, + index: "0", + }; } export const SubscribeUpdateTransactionInfo = { - encode(message: SubscribeUpdateTransactionInfo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeUpdateTransactionInfo, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.signature.length !== 0) { writer.uint32(10).bytes(message.signature); } @@ -2503,10 +3218,16 @@ export const SubscribeUpdateTransactionInfo = { writer.uint32(16).bool(message.isVote); } if (message.transaction !== undefined) { - Transaction.encode(message.transaction, writer.uint32(26).fork()).ldelim(); + Transaction.encode( + message.transaction, + writer.uint32(26).fork() + ).ldelim(); } if (message.meta !== undefined) { - TransactionStatusMeta.encode(message.meta, writer.uint32(34).fork()).ldelim(); + TransactionStatusMeta.encode( + message.meta, + writer.uint32(34).fork() + ).ldelim(); } if (message.index !== "0") { writer.uint32(40).uint64(message.index); @@ -2514,8 +3235,12 @@ export const SubscribeUpdateTransactionInfo = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeUpdateTransactionInfo { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeUpdateTransactionInfo { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeUpdateTransactionInfo(); while (reader.pos < end) { @@ -2567,10 +3292,16 @@ export const SubscribeUpdateTransactionInfo = { fromJSON(object: any): SubscribeUpdateTransactionInfo { return { - signature: isSet(object.signature) ? bytesFromBase64(object.signature) : new Uint8Array(0), + signature: isSet(object.signature) + ? bytesFromBase64(object.signature) + : new Uint8Array(0), isVote: isSet(object.isVote) ? Boolean(object.isVote) : false, - transaction: isSet(object.transaction) ? Transaction.fromJSON(object.transaction) : undefined, - meta: isSet(object.meta) ? TransactionStatusMeta.fromJSON(object.meta) : undefined, + transaction: isSet(object.transaction) + ? Transaction.fromJSON(object.transaction) + : undefined, + meta: isSet(object.meta) + ? TransactionStatusMeta.fromJSON(object.meta) + : undefined, index: isSet(object.index) ? String(object.index) : "0", }; }, @@ -2578,36 +3309,187 @@ export const SubscribeUpdateTransactionInfo = { toJSON(message: SubscribeUpdateTransactionInfo): unknown { const obj: any = {}; message.signature !== undefined && - (obj.signature = base64FromBytes(message.signature !== undefined ? message.signature : new Uint8Array(0))); + (obj.signature = base64FromBytes( + message.signature !== undefined ? message.signature : new Uint8Array(0) + )); message.isVote !== undefined && (obj.isVote = message.isVote); message.transaction !== undefined && - (obj.transaction = message.transaction ? Transaction.toJSON(message.transaction) : undefined); - message.meta !== undefined && (obj.meta = message.meta ? TransactionStatusMeta.toJSON(message.meta) : undefined); + (obj.transaction = message.transaction + ? Transaction.toJSON(message.transaction) + : undefined); + message.meta !== undefined && + (obj.meta = message.meta + ? TransactionStatusMeta.toJSON(message.meta) + : undefined); message.index !== undefined && (obj.index = message.index); return obj; }, - create, I>>(base?: I): SubscribeUpdateTransactionInfo { + create, I>>( + base?: I + ): SubscribeUpdateTransactionInfo { return SubscribeUpdateTransactionInfo.fromPartial(base ?? {}); }, fromPartial, I>>( - object: I, + object: I ): SubscribeUpdateTransactionInfo { const message = createBaseSubscribeUpdateTransactionInfo(); message.signature = object.signature ?? new Uint8Array(0); message.isVote = object.isVote ?? false; - message.transaction = (object.transaction !== undefined && object.transaction !== null) - ? Transaction.fromPartial(object.transaction) - : undefined; - message.meta = (object.meta !== undefined && object.meta !== null) - ? TransactionStatusMeta.fromPartial(object.meta) - : undefined; + message.transaction = + object.transaction !== undefined && object.transaction !== null + ? Transaction.fromPartial(object.transaction) + : undefined; + message.meta = + object.meta !== undefined && object.meta !== null + ? TransactionStatusMeta.fromPartial(object.meta) + : undefined; message.index = object.index ?? "0"; return message; }, }; +function createBaseSubscribeUpdateTransactionStatus(): SubscribeUpdateTransactionStatus { + return { + slot: "0", + signature: new Uint8Array(0), + isVote: false, + index: "0", + err: undefined, + }; +} + +export const SubscribeUpdateTransactionStatus = { + encode( + message: SubscribeUpdateTransactionStatus, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { + if (message.slot !== "0") { + writer.uint32(8).uint64(message.slot); + } + if (message.signature.length !== 0) { + writer.uint32(18).bytes(message.signature); + } + if (message.isVote === true) { + writer.uint32(24).bool(message.isVote); + } + if (message.index !== "0") { + writer.uint32(32).uint64(message.index); + } + if (message.err !== undefined) { + TransactionError.encode(message.err, writer.uint32(42).fork()).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeUpdateTransactionStatus { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseSubscribeUpdateTransactionStatus(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 8) { + break; + } + + message.slot = longToString(reader.uint64() as Long); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.signature = reader.bytes(); + continue; + case 3: + if (tag !== 24) { + break; + } + + message.isVote = reader.bool(); + continue; + case 4: + if (tag !== 32) { + break; + } + + message.index = longToString(reader.uint64() as Long); + continue; + case 5: + if (tag !== 42) { + break; + } + + message.err = TransactionError.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): SubscribeUpdateTransactionStatus { + return { + slot: isSet(object.slot) ? String(object.slot) : "0", + signature: isSet(object.signature) + ? bytesFromBase64(object.signature) + : new Uint8Array(0), + isVote: isSet(object.isVote) ? Boolean(object.isVote) : false, + index: isSet(object.index) ? String(object.index) : "0", + err: isSet(object.err) + ? TransactionError.fromJSON(object.err) + : undefined, + }; + }, + + toJSON(message: SubscribeUpdateTransactionStatus): unknown { + const obj: any = {}; + message.slot !== undefined && (obj.slot = message.slot); + message.signature !== undefined && + (obj.signature = base64FromBytes( + message.signature !== undefined ? message.signature : new Uint8Array(0) + )); + message.isVote !== undefined && (obj.isVote = message.isVote); + message.index !== undefined && (obj.index = message.index); + message.err !== undefined && + (obj.err = message.err + ? TransactionError.toJSON(message.err) + : undefined); + return obj; + }, + + create, I>>( + base?: I + ): SubscribeUpdateTransactionStatus { + return SubscribeUpdateTransactionStatus.fromPartial(base ?? {}); + }, + + fromPartial< + I extends Exact, I> + >(object: I): SubscribeUpdateTransactionStatus { + const message = createBaseSubscribeUpdateTransactionStatus(); + message.slot = object.slot ?? "0"; + message.signature = object.signature ?? new Uint8Array(0); + message.isVote = object.isVote ?? false; + message.index = object.index ?? "0"; + message.err = + object.err !== undefined && object.err !== null + ? TransactionError.fromPartial(object.err) + : undefined; + return message; + }, +}; + function createBaseSubscribeUpdateBlock(): SubscribeUpdateBlock { return { slot: "0", @@ -2627,7 +3509,10 @@ function createBaseSubscribeUpdateBlock(): SubscribeUpdateBlock { } export const SubscribeUpdateBlock = { - encode(message: SubscribeUpdateBlock, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeUpdateBlock, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.slot !== "0") { writer.uint32(8).uint64(message.slot); } @@ -2638,10 +3523,16 @@ export const SubscribeUpdateBlock = { Rewards.encode(message.rewards, writer.uint32(26).fork()).ldelim(); } if (message.blockTime !== undefined) { - UnixTimestamp.encode(message.blockTime, writer.uint32(34).fork()).ldelim(); + UnixTimestamp.encode( + message.blockTime, + writer.uint32(34).fork() + ).ldelim(); } if (message.blockHeight !== undefined) { - BlockHeight.encode(message.blockHeight, writer.uint32(42).fork()).ldelim(); + BlockHeight.encode( + message.blockHeight, + writer.uint32(42).fork() + ).ldelim(); } if (message.parentSlot !== "0") { writer.uint32(56).uint64(message.parentSlot); @@ -2653,7 +3544,10 @@ export const SubscribeUpdateBlock = { writer.uint32(72).uint64(message.executedTransactionCount); } for (const v of message.transactions) { - SubscribeUpdateTransactionInfo.encode(v!, writer.uint32(50).fork()).ldelim(); + SubscribeUpdateTransactionInfo.encode( + v!, + writer.uint32(50).fork() + ).ldelim(); } if (message.updatedAccountCount !== "0") { writer.uint32(80).uint64(message.updatedAccountCount); @@ -2670,8 +3564,12 @@ export const SubscribeUpdateBlock = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeUpdateBlock { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeUpdateBlock { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeUpdateBlock(); while (reader.pos < end) { @@ -2731,14 +3629,18 @@ export const SubscribeUpdateBlock = { break; } - message.executedTransactionCount = longToString(reader.uint64() as Long); + message.executedTransactionCount = longToString( + reader.uint64() as Long + ); continue; case 6: if (tag !== 50) { break; } - message.transactions.push(SubscribeUpdateTransactionInfo.decode(reader, reader.uint32())); + message.transactions.push( + SubscribeUpdateTransactionInfo.decode(reader, reader.uint32()) + ); continue; case 10: if (tag !== 80) { @@ -2752,7 +3654,9 @@ export const SubscribeUpdateBlock = { break; } - message.accounts.push(SubscribeUpdateAccountInfo.decode(reader, reader.uint32())); + message.accounts.push( + SubscribeUpdateAccountInfo.decode(reader, reader.uint32()) + ); continue; case 12: if (tag !== 96) { @@ -2766,7 +3670,9 @@ export const SubscribeUpdateBlock = { break; } - message.entries.push(SubscribeUpdateEntry.decode(reader, reader.uint32())); + message.entries.push( + SubscribeUpdateEntry.decode(reader, reader.uint32()) + ); continue; } if ((tag & 7) === 4 || tag === 0) { @@ -2781,21 +3687,41 @@ export const SubscribeUpdateBlock = { return { slot: isSet(object.slot) ? String(object.slot) : "0", blockhash: isSet(object.blockhash) ? String(object.blockhash) : "", - rewards: isSet(object.rewards) ? Rewards.fromJSON(object.rewards) : undefined, - blockTime: isSet(object.blockTime) ? UnixTimestamp.fromJSON(object.blockTime) : undefined, - blockHeight: isSet(object.blockHeight) ? BlockHeight.fromJSON(object.blockHeight) : undefined, + rewards: isSet(object.rewards) + ? Rewards.fromJSON(object.rewards) + : undefined, + blockTime: isSet(object.blockTime) + ? UnixTimestamp.fromJSON(object.blockTime) + : undefined, + blockHeight: isSet(object.blockHeight) + ? BlockHeight.fromJSON(object.blockHeight) + : undefined, parentSlot: isSet(object.parentSlot) ? String(object.parentSlot) : "0", - parentBlockhash: isSet(object.parentBlockhash) ? String(object.parentBlockhash) : "", - executedTransactionCount: isSet(object.executedTransactionCount) ? String(object.executedTransactionCount) : "0", + parentBlockhash: isSet(object.parentBlockhash) + ? String(object.parentBlockhash) + : "", + executedTransactionCount: isSet(object.executedTransactionCount) + ? String(object.executedTransactionCount) + : "0", transactions: Array.isArray(object?.transactions) - ? object.transactions.map((e: any) => SubscribeUpdateTransactionInfo.fromJSON(e)) + ? object.transactions.map((e: any) => + SubscribeUpdateTransactionInfo.fromJSON(e) + ) : [], - updatedAccountCount: isSet(object.updatedAccountCount) ? String(object.updatedAccountCount) : "0", + updatedAccountCount: isSet(object.updatedAccountCount) + ? String(object.updatedAccountCount) + : "0", accounts: Array.isArray(object?.accounts) - ? object.accounts.map((e: any) => SubscribeUpdateAccountInfo.fromJSON(e)) + ? object.accounts.map((e: any) => + SubscribeUpdateAccountInfo.fromJSON(e) + ) + : [], + entriesCount: isSet(object.entriesCount) + ? String(object.entriesCount) + : "0", + entries: Array.isArray(object?.entries) + ? object.entries.map((e: any) => SubscribeUpdateEntry.fromJSON(e)) : [], - entriesCount: isSet(object.entriesCount) ? String(object.entriesCount) : "0", - entries: Array.isArray(object?.entries) ? object.entries.map((e: any) => SubscribeUpdateEntry.fromJSON(e)) : [], }; }, @@ -2803,59 +3729,89 @@ export const SubscribeUpdateBlock = { const obj: any = {}; message.slot !== undefined && (obj.slot = message.slot); message.blockhash !== undefined && (obj.blockhash = message.blockhash); - message.rewards !== undefined && (obj.rewards = message.rewards ? Rewards.toJSON(message.rewards) : undefined); + message.rewards !== undefined && + (obj.rewards = message.rewards + ? Rewards.toJSON(message.rewards) + : undefined); message.blockTime !== undefined && - (obj.blockTime = message.blockTime ? UnixTimestamp.toJSON(message.blockTime) : undefined); + (obj.blockTime = message.blockTime + ? UnixTimestamp.toJSON(message.blockTime) + : undefined); message.blockHeight !== undefined && - (obj.blockHeight = message.blockHeight ? BlockHeight.toJSON(message.blockHeight) : undefined); + (obj.blockHeight = message.blockHeight + ? BlockHeight.toJSON(message.blockHeight) + : undefined); message.parentSlot !== undefined && (obj.parentSlot = message.parentSlot); - message.parentBlockhash !== undefined && (obj.parentBlockhash = message.parentBlockhash); - message.executedTransactionCount !== undefined && (obj.executedTransactionCount = message.executedTransactionCount); + message.parentBlockhash !== undefined && + (obj.parentBlockhash = message.parentBlockhash); + message.executedTransactionCount !== undefined && + (obj.executedTransactionCount = message.executedTransactionCount); if (message.transactions) { - obj.transactions = message.transactions.map((e) => e ? SubscribeUpdateTransactionInfo.toJSON(e) : undefined); + obj.transactions = message.transactions.map((e) => + e ? SubscribeUpdateTransactionInfo.toJSON(e) : undefined + ); } else { obj.transactions = []; } - message.updatedAccountCount !== undefined && (obj.updatedAccountCount = message.updatedAccountCount); + message.updatedAccountCount !== undefined && + (obj.updatedAccountCount = message.updatedAccountCount); if (message.accounts) { - obj.accounts = message.accounts.map((e) => e ? SubscribeUpdateAccountInfo.toJSON(e) : undefined); + obj.accounts = message.accounts.map((e) => + e ? SubscribeUpdateAccountInfo.toJSON(e) : undefined + ); } else { obj.accounts = []; } - message.entriesCount !== undefined && (obj.entriesCount = message.entriesCount); + message.entriesCount !== undefined && + (obj.entriesCount = message.entriesCount); if (message.entries) { - obj.entries = message.entries.map((e) => e ? SubscribeUpdateEntry.toJSON(e) : undefined); + obj.entries = message.entries.map((e) => + e ? SubscribeUpdateEntry.toJSON(e) : undefined + ); } else { obj.entries = []; } return obj; }, - create, I>>(base?: I): SubscribeUpdateBlock { + create, I>>( + base?: I + ): SubscribeUpdateBlock { return SubscribeUpdateBlock.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): SubscribeUpdateBlock { + fromPartial, I>>( + object: I + ): SubscribeUpdateBlock { const message = createBaseSubscribeUpdateBlock(); message.slot = object.slot ?? "0"; message.blockhash = object.blockhash ?? ""; - message.rewards = (object.rewards !== undefined && object.rewards !== null) - ? Rewards.fromPartial(object.rewards) - : undefined; - message.blockTime = (object.blockTime !== undefined && object.blockTime !== null) - ? UnixTimestamp.fromPartial(object.blockTime) - : undefined; - message.blockHeight = (object.blockHeight !== undefined && object.blockHeight !== null) - ? BlockHeight.fromPartial(object.blockHeight) - : undefined; + message.rewards = + object.rewards !== undefined && object.rewards !== null + ? Rewards.fromPartial(object.rewards) + : undefined; + message.blockTime = + object.blockTime !== undefined && object.blockTime !== null + ? UnixTimestamp.fromPartial(object.blockTime) + : undefined; + message.blockHeight = + object.blockHeight !== undefined && object.blockHeight !== null + ? BlockHeight.fromPartial(object.blockHeight) + : undefined; message.parentSlot = object.parentSlot ?? "0"; message.parentBlockhash = object.parentBlockhash ?? ""; message.executedTransactionCount = object.executedTransactionCount ?? "0"; - message.transactions = object.transactions?.map((e) => SubscribeUpdateTransactionInfo.fromPartial(e)) || []; + message.transactions = + object.transactions?.map((e) => + SubscribeUpdateTransactionInfo.fromPartial(e) + ) || []; message.updatedAccountCount = object.updatedAccountCount ?? "0"; - message.accounts = object.accounts?.map((e) => SubscribeUpdateAccountInfo.fromPartial(e)) || []; + message.accounts = + object.accounts?.map((e) => SubscribeUpdateAccountInfo.fromPartial(e)) || + []; message.entriesCount = object.entriesCount ?? "0"; - message.entries = object.entries?.map((e) => SubscribeUpdateEntry.fromPartial(e)) || []; + message.entries = + object.entries?.map((e) => SubscribeUpdateEntry.fromPartial(e)) || []; return message; }, }; @@ -2875,7 +3831,10 @@ function createBaseSubscribeUpdateBlockMeta(): SubscribeUpdateBlockMeta { } export const SubscribeUpdateBlockMeta = { - encode(message: SubscribeUpdateBlockMeta, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeUpdateBlockMeta, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.slot !== "0") { writer.uint32(8).uint64(message.slot); } @@ -2886,10 +3845,16 @@ export const SubscribeUpdateBlockMeta = { Rewards.encode(message.rewards, writer.uint32(26).fork()).ldelim(); } if (message.blockTime !== undefined) { - UnixTimestamp.encode(message.blockTime, writer.uint32(34).fork()).ldelim(); + UnixTimestamp.encode( + message.blockTime, + writer.uint32(34).fork() + ).ldelim(); } if (message.blockHeight !== undefined) { - BlockHeight.encode(message.blockHeight, writer.uint32(42).fork()).ldelim(); + BlockHeight.encode( + message.blockHeight, + writer.uint32(42).fork() + ).ldelim(); } if (message.parentSlot !== "0") { writer.uint32(48).uint64(message.parentSlot); @@ -2906,8 +3871,12 @@ export const SubscribeUpdateBlockMeta = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeUpdateBlockMeta { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeUpdateBlockMeta { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeUpdateBlockMeta(); while (reader.pos < end) { @@ -2967,7 +3936,9 @@ export const SubscribeUpdateBlockMeta = { break; } - message.executedTransactionCount = longToString(reader.uint64() as Long); + message.executedTransactionCount = longToString( + reader.uint64() as Long + ); continue; case 9: if (tag !== 72) { @@ -2989,13 +3960,25 @@ export const SubscribeUpdateBlockMeta = { return { slot: isSet(object.slot) ? String(object.slot) : "0", blockhash: isSet(object.blockhash) ? String(object.blockhash) : "", - rewards: isSet(object.rewards) ? Rewards.fromJSON(object.rewards) : undefined, - blockTime: isSet(object.blockTime) ? UnixTimestamp.fromJSON(object.blockTime) : undefined, - blockHeight: isSet(object.blockHeight) ? BlockHeight.fromJSON(object.blockHeight) : undefined, + rewards: isSet(object.rewards) + ? Rewards.fromJSON(object.rewards) + : undefined, + blockTime: isSet(object.blockTime) + ? UnixTimestamp.fromJSON(object.blockTime) + : undefined, + blockHeight: isSet(object.blockHeight) + ? BlockHeight.fromJSON(object.blockHeight) + : undefined, parentSlot: isSet(object.parentSlot) ? String(object.parentSlot) : "0", - parentBlockhash: isSet(object.parentBlockhash) ? String(object.parentBlockhash) : "", - executedTransactionCount: isSet(object.executedTransactionCount) ? String(object.executedTransactionCount) : "0", - entriesCount: isSet(object.entriesCount) ? String(object.entriesCount) : "0", + parentBlockhash: isSet(object.parentBlockhash) + ? String(object.parentBlockhash) + : "", + executedTransactionCount: isSet(object.executedTransactionCount) + ? String(object.executedTransactionCount) + : "0", + entriesCount: isSet(object.entriesCount) + ? String(object.entriesCount) + : "0", }; }, @@ -3003,35 +3986,52 @@ export const SubscribeUpdateBlockMeta = { const obj: any = {}; message.slot !== undefined && (obj.slot = message.slot); message.blockhash !== undefined && (obj.blockhash = message.blockhash); - message.rewards !== undefined && (obj.rewards = message.rewards ? Rewards.toJSON(message.rewards) : undefined); + message.rewards !== undefined && + (obj.rewards = message.rewards + ? Rewards.toJSON(message.rewards) + : undefined); message.blockTime !== undefined && - (obj.blockTime = message.blockTime ? UnixTimestamp.toJSON(message.blockTime) : undefined); + (obj.blockTime = message.blockTime + ? UnixTimestamp.toJSON(message.blockTime) + : undefined); message.blockHeight !== undefined && - (obj.blockHeight = message.blockHeight ? BlockHeight.toJSON(message.blockHeight) : undefined); + (obj.blockHeight = message.blockHeight + ? BlockHeight.toJSON(message.blockHeight) + : undefined); message.parentSlot !== undefined && (obj.parentSlot = message.parentSlot); - message.parentBlockhash !== undefined && (obj.parentBlockhash = message.parentBlockhash); - message.executedTransactionCount !== undefined && (obj.executedTransactionCount = message.executedTransactionCount); - message.entriesCount !== undefined && (obj.entriesCount = message.entriesCount); + message.parentBlockhash !== undefined && + (obj.parentBlockhash = message.parentBlockhash); + message.executedTransactionCount !== undefined && + (obj.executedTransactionCount = message.executedTransactionCount); + message.entriesCount !== undefined && + (obj.entriesCount = message.entriesCount); return obj; }, - create, I>>(base?: I): SubscribeUpdateBlockMeta { + create, I>>( + base?: I + ): SubscribeUpdateBlockMeta { return SubscribeUpdateBlockMeta.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): SubscribeUpdateBlockMeta { + fromPartial, I>>( + object: I + ): SubscribeUpdateBlockMeta { const message = createBaseSubscribeUpdateBlockMeta(); message.slot = object.slot ?? "0"; message.blockhash = object.blockhash ?? ""; - message.rewards = (object.rewards !== undefined && object.rewards !== null) - ? Rewards.fromPartial(object.rewards) - : undefined; - message.blockTime = (object.blockTime !== undefined && object.blockTime !== null) - ? UnixTimestamp.fromPartial(object.blockTime) - : undefined; - message.blockHeight = (object.blockHeight !== undefined && object.blockHeight !== null) - ? BlockHeight.fromPartial(object.blockHeight) - : undefined; + message.rewards = + object.rewards !== undefined && object.rewards !== null + ? Rewards.fromPartial(object.rewards) + : undefined; + message.blockTime = + object.blockTime !== undefined && object.blockTime !== null + ? UnixTimestamp.fromPartial(object.blockTime) + : undefined; + message.blockHeight = + object.blockHeight !== undefined && object.blockHeight !== null + ? BlockHeight.fromPartial(object.blockHeight) + : undefined; message.parentSlot = object.parentSlot ?? "0"; message.parentBlockhash = object.parentBlockhash ?? ""; message.executedTransactionCount = object.executedTransactionCount ?? "0"; @@ -3052,7 +4052,10 @@ function createBaseSubscribeUpdateEntry(): SubscribeUpdateEntry { } export const SubscribeUpdateEntry = { - encode(message: SubscribeUpdateEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeUpdateEntry, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.slot !== "0") { writer.uint32(8).uint64(message.slot); } @@ -3074,8 +4077,12 @@ export const SubscribeUpdateEntry = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeUpdateEntry { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): SubscribeUpdateEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeUpdateEntry(); while (reader.pos < end) { @@ -3114,14 +4121,18 @@ export const SubscribeUpdateEntry = { break; } - message.executedTransactionCount = longToString(reader.uint64() as Long); + message.executedTransactionCount = longToString( + reader.uint64() as Long + ); continue; case 6: if (tag !== 48) { break; } - message.startingTransactionIndex = longToString(reader.uint64() as Long); + message.startingTransactionIndex = longToString( + reader.uint64() as Long + ); continue; } if ((tag & 7) === 4 || tag === 0) { @@ -3137,9 +4148,15 @@ export const SubscribeUpdateEntry = { slot: isSet(object.slot) ? String(object.slot) : "0", index: isSet(object.index) ? String(object.index) : "0", numHashes: isSet(object.numHashes) ? String(object.numHashes) : "0", - hash: isSet(object.hash) ? bytesFromBase64(object.hash) : new Uint8Array(0), - executedTransactionCount: isSet(object.executedTransactionCount) ? String(object.executedTransactionCount) : "0", - startingTransactionIndex: isSet(object.startingTransactionIndex) ? String(object.startingTransactionIndex) : "0", + hash: isSet(object.hash) + ? bytesFromBase64(object.hash) + : new Uint8Array(0), + executedTransactionCount: isSet(object.executedTransactionCount) + ? String(object.executedTransactionCount) + : "0", + startingTransactionIndex: isSet(object.startingTransactionIndex) + ? String(object.startingTransactionIndex) + : "0", }; }, @@ -3149,17 +4166,25 @@ export const SubscribeUpdateEntry = { message.index !== undefined && (obj.index = message.index); message.numHashes !== undefined && (obj.numHashes = message.numHashes); message.hash !== undefined && - (obj.hash = base64FromBytes(message.hash !== undefined ? message.hash : new Uint8Array(0))); - message.executedTransactionCount !== undefined && (obj.executedTransactionCount = message.executedTransactionCount); - message.startingTransactionIndex !== undefined && (obj.startingTransactionIndex = message.startingTransactionIndex); + (obj.hash = base64FromBytes( + message.hash !== undefined ? message.hash : new Uint8Array(0) + )); + message.executedTransactionCount !== undefined && + (obj.executedTransactionCount = message.executedTransactionCount); + message.startingTransactionIndex !== undefined && + (obj.startingTransactionIndex = message.startingTransactionIndex); return obj; }, - create, I>>(base?: I): SubscribeUpdateEntry { + create, I>>( + base?: I + ): SubscribeUpdateEntry { return SubscribeUpdateEntry.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): SubscribeUpdateEntry { + fromPartial, I>>( + object: I + ): SubscribeUpdateEntry { const message = createBaseSubscribeUpdateEntry(); message.slot = object.slot ?? "0"; message.index = object.index ?? "0"; @@ -3176,12 +4201,16 @@ function createBaseSubscribeUpdatePing(): SubscribeUpdatePing { } export const SubscribeUpdatePing = { - encode(_: SubscribeUpdatePing, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + _: SubscribeUpdatePing, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { return writer; }, decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeUpdatePing { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeUpdatePing(); while (reader.pos < end) { @@ -3205,11 +4234,15 @@ export const SubscribeUpdatePing = { return obj; }, - create, I>>(base?: I): SubscribeUpdatePing { + create, I>>( + base?: I + ): SubscribeUpdatePing { return SubscribeUpdatePing.fromPartial(base ?? {}); }, - fromPartial, I>>(_: I): SubscribeUpdatePing { + fromPartial, I>>( + _: I + ): SubscribeUpdatePing { const message = createBaseSubscribeUpdatePing(); return message; }, @@ -3220,7 +4253,10 @@ function createBaseSubscribeUpdatePong(): SubscribeUpdatePong { } export const SubscribeUpdatePong = { - encode(message: SubscribeUpdatePong, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: SubscribeUpdatePong, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.id !== 0) { writer.uint32(8).int32(message.id); } @@ -3228,7 +4264,8 @@ export const SubscribeUpdatePong = { }, decode(input: _m0.Reader | Uint8Array, length?: number): SubscribeUpdatePong { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseSubscribeUpdatePong(); while (reader.pos < end) { @@ -3260,11 +4297,15 @@ export const SubscribeUpdatePong = { return obj; }, - create, I>>(base?: I): SubscribeUpdatePong { + create, I>>( + base?: I + ): SubscribeUpdatePong { return SubscribeUpdatePong.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): SubscribeUpdatePong { + fromPartial, I>>( + object: I + ): SubscribeUpdatePong { const message = createBaseSubscribeUpdatePong(); message.id = object.id ?? 0; return message; @@ -3276,7 +4317,10 @@ function createBasePingRequest(): PingRequest { } export const PingRequest = { - encode(message: PingRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: PingRequest, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.count !== 0) { writer.uint32(8).int32(message.count); } @@ -3284,7 +4328,8 @@ export const PingRequest = { }, decode(input: _m0.Reader | Uint8Array, length?: number): PingRequest { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBasePingRequest(); while (reader.pos < end) { @@ -3320,7 +4365,9 @@ export const PingRequest = { return PingRequest.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): PingRequest { + fromPartial, I>>( + object: I + ): PingRequest { const message = createBasePingRequest(); message.count = object.count ?? 0; return message; @@ -3332,7 +4379,10 @@ function createBasePongResponse(): PongResponse { } export const PongResponse = { - encode(message: PongResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: PongResponse, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.count !== 0) { writer.uint32(8).int32(message.count); } @@ -3340,7 +4390,8 @@ export const PongResponse = { }, decode(input: _m0.Reader | Uint8Array, length?: number): PongResponse { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBasePongResponse(); while (reader.pos < end) { @@ -3372,11 +4423,15 @@ export const PongResponse = { return obj; }, - create, I>>(base?: I): PongResponse { + create, I>>( + base?: I + ): PongResponse { return PongResponse.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): PongResponse { + fromPartial, I>>( + object: I + ): PongResponse { const message = createBasePongResponse(); message.count = object.count ?? 0; return message; @@ -3388,15 +4443,22 @@ function createBaseGetLatestBlockhashRequest(): GetLatestBlockhashRequest { } export const GetLatestBlockhashRequest = { - encode(message: GetLatestBlockhashRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: GetLatestBlockhashRequest, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.commitment !== undefined) { writer.uint32(8).int32(message.commitment); } return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): GetLatestBlockhashRequest { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): GetLatestBlockhashRequest { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseGetLatestBlockhashRequest(); while (reader.pos < end) { @@ -3419,21 +4481,32 @@ export const GetLatestBlockhashRequest = { }, fromJSON(object: any): GetLatestBlockhashRequest { - return { commitment: isSet(object.commitment) ? commitmentLevelFromJSON(object.commitment) : undefined }; + return { + commitment: isSet(object.commitment) + ? commitmentLevelFromJSON(object.commitment) + : undefined, + }; }, toJSON(message: GetLatestBlockhashRequest): unknown { const obj: any = {}; message.commitment !== undefined && - (obj.commitment = message.commitment !== undefined ? commitmentLevelToJSON(message.commitment) : undefined); + (obj.commitment = + message.commitment !== undefined + ? commitmentLevelToJSON(message.commitment) + : undefined); return obj; }, - create, I>>(base?: I): GetLatestBlockhashRequest { + create, I>>( + base?: I + ): GetLatestBlockhashRequest { return GetLatestBlockhashRequest.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): GetLatestBlockhashRequest { + fromPartial, I>>( + object: I + ): GetLatestBlockhashRequest { const message = createBaseGetLatestBlockhashRequest(); message.commitment = object.commitment ?? undefined; return message; @@ -3445,7 +4518,10 @@ function createBaseGetLatestBlockhashResponse(): GetLatestBlockhashResponse { } export const GetLatestBlockhashResponse = { - encode(message: GetLatestBlockhashResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: GetLatestBlockhashResponse, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.slot !== "0") { writer.uint32(8).uint64(message.slot); } @@ -3458,8 +4534,12 @@ export const GetLatestBlockhashResponse = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): GetLatestBlockhashResponse { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): GetLatestBlockhashResponse { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseGetLatestBlockhashResponse(); while (reader.pos < end) { @@ -3499,7 +4579,9 @@ export const GetLatestBlockhashResponse = { return { slot: isSet(object.slot) ? String(object.slot) : "0", blockhash: isSet(object.blockhash) ? String(object.blockhash) : "", - lastValidBlockHeight: isSet(object.lastValidBlockHeight) ? String(object.lastValidBlockHeight) : "0", + lastValidBlockHeight: isSet(object.lastValidBlockHeight) + ? String(object.lastValidBlockHeight) + : "0", }; }, @@ -3507,15 +4589,20 @@ export const GetLatestBlockhashResponse = { const obj: any = {}; message.slot !== undefined && (obj.slot = message.slot); message.blockhash !== undefined && (obj.blockhash = message.blockhash); - message.lastValidBlockHeight !== undefined && (obj.lastValidBlockHeight = message.lastValidBlockHeight); + message.lastValidBlockHeight !== undefined && + (obj.lastValidBlockHeight = message.lastValidBlockHeight); return obj; }, - create, I>>(base?: I): GetLatestBlockhashResponse { + create, I>>( + base?: I + ): GetLatestBlockhashResponse { return GetLatestBlockhashResponse.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): GetLatestBlockhashResponse { + fromPartial, I>>( + object: I + ): GetLatestBlockhashResponse { const message = createBaseGetLatestBlockhashResponse(); message.slot = object.slot ?? "0"; message.blockhash = object.blockhash ?? ""; @@ -3529,15 +4616,22 @@ function createBaseGetBlockHeightRequest(): GetBlockHeightRequest { } export const GetBlockHeightRequest = { - encode(message: GetBlockHeightRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: GetBlockHeightRequest, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.commitment !== undefined) { writer.uint32(8).int32(message.commitment); } return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): GetBlockHeightRequest { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): GetBlockHeightRequest { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseGetBlockHeightRequest(); while (reader.pos < end) { @@ -3560,21 +4654,32 @@ export const GetBlockHeightRequest = { }, fromJSON(object: any): GetBlockHeightRequest { - return { commitment: isSet(object.commitment) ? commitmentLevelFromJSON(object.commitment) : undefined }; + return { + commitment: isSet(object.commitment) + ? commitmentLevelFromJSON(object.commitment) + : undefined, + }; }, toJSON(message: GetBlockHeightRequest): unknown { const obj: any = {}; message.commitment !== undefined && - (obj.commitment = message.commitment !== undefined ? commitmentLevelToJSON(message.commitment) : undefined); + (obj.commitment = + message.commitment !== undefined + ? commitmentLevelToJSON(message.commitment) + : undefined); return obj; }, - create, I>>(base?: I): GetBlockHeightRequest { + create, I>>( + base?: I + ): GetBlockHeightRequest { return GetBlockHeightRequest.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): GetBlockHeightRequest { + fromPartial, I>>( + object: I + ): GetBlockHeightRequest { const message = createBaseGetBlockHeightRequest(); message.commitment = object.commitment ?? undefined; return message; @@ -3586,15 +4691,22 @@ function createBaseGetBlockHeightResponse(): GetBlockHeightResponse { } export const GetBlockHeightResponse = { - encode(message: GetBlockHeightResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: GetBlockHeightResponse, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.blockHeight !== "0") { writer.uint32(8).uint64(message.blockHeight); } return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): GetBlockHeightResponse { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): GetBlockHeightResponse { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseGetBlockHeightResponse(); while (reader.pos < end) { @@ -3617,20 +4729,27 @@ export const GetBlockHeightResponse = { }, fromJSON(object: any): GetBlockHeightResponse { - return { blockHeight: isSet(object.blockHeight) ? String(object.blockHeight) : "0" }; + return { + blockHeight: isSet(object.blockHeight) ? String(object.blockHeight) : "0", + }; }, toJSON(message: GetBlockHeightResponse): unknown { const obj: any = {}; - message.blockHeight !== undefined && (obj.blockHeight = message.blockHeight); + message.blockHeight !== undefined && + (obj.blockHeight = message.blockHeight); return obj; }, - create, I>>(base?: I): GetBlockHeightResponse { + create, I>>( + base?: I + ): GetBlockHeightResponse { return GetBlockHeightResponse.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): GetBlockHeightResponse { + fromPartial, I>>( + object: I + ): GetBlockHeightResponse { const message = createBaseGetBlockHeightResponse(); message.blockHeight = object.blockHeight ?? "0"; return message; @@ -3642,7 +4761,10 @@ function createBaseGetSlotRequest(): GetSlotRequest { } export const GetSlotRequest = { - encode(message: GetSlotRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: GetSlotRequest, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.commitment !== undefined) { writer.uint32(8).int32(message.commitment); } @@ -3650,7 +4772,8 @@ export const GetSlotRequest = { }, decode(input: _m0.Reader | Uint8Array, length?: number): GetSlotRequest { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseGetSlotRequest(); while (reader.pos < end) { @@ -3673,21 +4796,32 @@ export const GetSlotRequest = { }, fromJSON(object: any): GetSlotRequest { - return { commitment: isSet(object.commitment) ? commitmentLevelFromJSON(object.commitment) : undefined }; + return { + commitment: isSet(object.commitment) + ? commitmentLevelFromJSON(object.commitment) + : undefined, + }; }, toJSON(message: GetSlotRequest): unknown { const obj: any = {}; message.commitment !== undefined && - (obj.commitment = message.commitment !== undefined ? commitmentLevelToJSON(message.commitment) : undefined); + (obj.commitment = + message.commitment !== undefined + ? commitmentLevelToJSON(message.commitment) + : undefined); return obj; }, - create, I>>(base?: I): GetSlotRequest { + create, I>>( + base?: I + ): GetSlotRequest { return GetSlotRequest.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): GetSlotRequest { + fromPartial, I>>( + object: I + ): GetSlotRequest { const message = createBaseGetSlotRequest(); message.commitment = object.commitment ?? undefined; return message; @@ -3699,7 +4833,10 @@ function createBaseGetSlotResponse(): GetSlotResponse { } export const GetSlotResponse = { - encode(message: GetSlotResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: GetSlotResponse, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.slot !== "0") { writer.uint32(8).uint64(message.slot); } @@ -3707,7 +4844,8 @@ export const GetSlotResponse = { }, decode(input: _m0.Reader | Uint8Array, length?: number): GetSlotResponse { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseGetSlotResponse(); while (reader.pos < end) { @@ -3739,11 +4877,15 @@ export const GetSlotResponse = { return obj; }, - create, I>>(base?: I): GetSlotResponse { + create, I>>( + base?: I + ): GetSlotResponse { return GetSlotResponse.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): GetSlotResponse { + fromPartial, I>>( + object: I + ): GetSlotResponse { const message = createBaseGetSlotResponse(); message.slot = object.slot ?? "0"; return message; @@ -3755,12 +4897,16 @@ function createBaseGetVersionRequest(): GetVersionRequest { } export const GetVersionRequest = { - encode(_: GetVersionRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + _: GetVersionRequest, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { return writer; }, decode(input: _m0.Reader | Uint8Array, length?: number): GetVersionRequest { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseGetVersionRequest(); while (reader.pos < end) { @@ -3784,11 +4930,15 @@ export const GetVersionRequest = { return obj; }, - create, I>>(base?: I): GetVersionRequest { + create, I>>( + base?: I + ): GetVersionRequest { return GetVersionRequest.fromPartial(base ?? {}); }, - fromPartial, I>>(_: I): GetVersionRequest { + fromPartial, I>>( + _: I + ): GetVersionRequest { const message = createBaseGetVersionRequest(); return message; }, @@ -3799,7 +4949,10 @@ function createBaseGetVersionResponse(): GetVersionResponse { } export const GetVersionResponse = { - encode(message: GetVersionResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: GetVersionResponse, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.version !== "") { writer.uint32(10).string(message.version); } @@ -3807,7 +4960,8 @@ export const GetVersionResponse = { }, decode(input: _m0.Reader | Uint8Array, length?: number): GetVersionResponse { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseGetVersionResponse(); while (reader.pos < end) { @@ -3839,11 +4993,15 @@ export const GetVersionResponse = { return obj; }, - create, I>>(base?: I): GetVersionResponse { + create, I>>( + base?: I + ): GetVersionResponse { return GetVersionResponse.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): GetVersionResponse { + fromPartial, I>>( + object: I + ): GetVersionResponse { const message = createBaseGetVersionResponse(); message.version = object.version ?? ""; return message; @@ -3855,7 +5013,10 @@ function createBaseIsBlockhashValidRequest(): IsBlockhashValidRequest { } export const IsBlockhashValidRequest = { - encode(message: IsBlockhashValidRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: IsBlockhashValidRequest, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.blockhash !== "") { writer.uint32(10).string(message.blockhash); } @@ -3865,8 +5026,12 @@ export const IsBlockhashValidRequest = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): IsBlockhashValidRequest { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): IsBlockhashValidRequest { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseIsBlockhashValidRequest(); while (reader.pos < end) { @@ -3898,7 +5063,9 @@ export const IsBlockhashValidRequest = { fromJSON(object: any): IsBlockhashValidRequest { return { blockhash: isSet(object.blockhash) ? String(object.blockhash) : "", - commitment: isSet(object.commitment) ? commitmentLevelFromJSON(object.commitment) : undefined, + commitment: isSet(object.commitment) + ? commitmentLevelFromJSON(object.commitment) + : undefined, }; }, @@ -3906,15 +5073,22 @@ export const IsBlockhashValidRequest = { const obj: any = {}; message.blockhash !== undefined && (obj.blockhash = message.blockhash); message.commitment !== undefined && - (obj.commitment = message.commitment !== undefined ? commitmentLevelToJSON(message.commitment) : undefined); + (obj.commitment = + message.commitment !== undefined + ? commitmentLevelToJSON(message.commitment) + : undefined); return obj; }, - create, I>>(base?: I): IsBlockhashValidRequest { + create, I>>( + base?: I + ): IsBlockhashValidRequest { return IsBlockhashValidRequest.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): IsBlockhashValidRequest { + fromPartial, I>>( + object: I + ): IsBlockhashValidRequest { const message = createBaseIsBlockhashValidRequest(); message.blockhash = object.blockhash ?? ""; message.commitment = object.commitment ?? undefined; @@ -3927,7 +5101,10 @@ function createBaseIsBlockhashValidResponse(): IsBlockhashValidResponse { } export const IsBlockhashValidResponse = { - encode(message: IsBlockhashValidResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: IsBlockhashValidResponse, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.slot !== "0") { writer.uint32(8).uint64(message.slot); } @@ -3937,8 +5114,12 @@ export const IsBlockhashValidResponse = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): IsBlockhashValidResponse { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): IsBlockhashValidResponse { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseIsBlockhashValidResponse(); while (reader.pos < end) { @@ -3981,11 +5162,15 @@ export const IsBlockhashValidResponse = { return obj; }, - create, I>>(base?: I): IsBlockhashValidResponse { + create, I>>( + base?: I + ): IsBlockhashValidResponse { return IsBlockhashValidResponse.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): IsBlockhashValidResponse { + fromPartial, I>>( + object: I + ): IsBlockhashValidResponse { const message = createBaseIsBlockhashValidResponse(); message.slot = object.slot ?? "0"; message.valid = object.valid ?? false; @@ -3999,18 +5184,22 @@ export const GeyserService = { path: "/geyser.Geyser/Subscribe", requestStream: true, responseStream: true, - requestSerialize: (value: SubscribeRequest) => Buffer.from(SubscribeRequest.encode(value).finish()), + requestSerialize: (value: SubscribeRequest) => + Buffer.from(SubscribeRequest.encode(value).finish()), requestDeserialize: (value: Buffer) => SubscribeRequest.decode(value), - responseSerialize: (value: SubscribeUpdate) => Buffer.from(SubscribeUpdate.encode(value).finish()), + responseSerialize: (value: SubscribeUpdate) => + Buffer.from(SubscribeUpdate.encode(value).finish()), responseDeserialize: (value: Buffer) => SubscribeUpdate.decode(value), }, ping: { path: "/geyser.Geyser/Ping", requestStream: false, responseStream: false, - requestSerialize: (value: PingRequest) => Buffer.from(PingRequest.encode(value).finish()), + requestSerialize: (value: PingRequest) => + Buffer.from(PingRequest.encode(value).finish()), requestDeserialize: (value: Buffer) => PingRequest.decode(value), - responseSerialize: (value: PongResponse) => Buffer.from(PongResponse.encode(value).finish()), + responseSerialize: (value: PongResponse) => + Buffer.from(PongResponse.encode(value).finish()), responseDeserialize: (value: Buffer) => PongResponse.decode(value), }, getLatestBlockhash: { @@ -4019,46 +5208,58 @@ export const GeyserService = { responseStream: false, requestSerialize: (value: GetLatestBlockhashRequest) => Buffer.from(GetLatestBlockhashRequest.encode(value).finish()), - requestDeserialize: (value: Buffer) => GetLatestBlockhashRequest.decode(value), + requestDeserialize: (value: Buffer) => + GetLatestBlockhashRequest.decode(value), responseSerialize: (value: GetLatestBlockhashResponse) => Buffer.from(GetLatestBlockhashResponse.encode(value).finish()), - responseDeserialize: (value: Buffer) => GetLatestBlockhashResponse.decode(value), + responseDeserialize: (value: Buffer) => + GetLatestBlockhashResponse.decode(value), }, getBlockHeight: { path: "/geyser.Geyser/GetBlockHeight", requestStream: false, responseStream: false, - requestSerialize: (value: GetBlockHeightRequest) => Buffer.from(GetBlockHeightRequest.encode(value).finish()), + requestSerialize: (value: GetBlockHeightRequest) => + Buffer.from(GetBlockHeightRequest.encode(value).finish()), requestDeserialize: (value: Buffer) => GetBlockHeightRequest.decode(value), - responseSerialize: (value: GetBlockHeightResponse) => Buffer.from(GetBlockHeightResponse.encode(value).finish()), - responseDeserialize: (value: Buffer) => GetBlockHeightResponse.decode(value), + responseSerialize: (value: GetBlockHeightResponse) => + Buffer.from(GetBlockHeightResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => + GetBlockHeightResponse.decode(value), }, getSlot: { path: "/geyser.Geyser/GetSlot", requestStream: false, responseStream: false, - requestSerialize: (value: GetSlotRequest) => Buffer.from(GetSlotRequest.encode(value).finish()), + requestSerialize: (value: GetSlotRequest) => + Buffer.from(GetSlotRequest.encode(value).finish()), requestDeserialize: (value: Buffer) => GetSlotRequest.decode(value), - responseSerialize: (value: GetSlotResponse) => Buffer.from(GetSlotResponse.encode(value).finish()), + responseSerialize: (value: GetSlotResponse) => + Buffer.from(GetSlotResponse.encode(value).finish()), responseDeserialize: (value: Buffer) => GetSlotResponse.decode(value), }, isBlockhashValid: { path: "/geyser.Geyser/IsBlockhashValid", requestStream: false, responseStream: false, - requestSerialize: (value: IsBlockhashValidRequest) => Buffer.from(IsBlockhashValidRequest.encode(value).finish()), - requestDeserialize: (value: Buffer) => IsBlockhashValidRequest.decode(value), + requestSerialize: (value: IsBlockhashValidRequest) => + Buffer.from(IsBlockhashValidRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => + IsBlockhashValidRequest.decode(value), responseSerialize: (value: IsBlockhashValidResponse) => Buffer.from(IsBlockhashValidResponse.encode(value).finish()), - responseDeserialize: (value: Buffer) => IsBlockhashValidResponse.decode(value), + responseDeserialize: (value: Buffer) => + IsBlockhashValidResponse.decode(value), }, getVersion: { path: "/geyser.Geyser/GetVersion", requestStream: false, responseStream: false, - requestSerialize: (value: GetVersionRequest) => Buffer.from(GetVersionRequest.encode(value).finish()), + requestSerialize: (value: GetVersionRequest) => + Buffer.from(GetVersionRequest.encode(value).finish()), requestDeserialize: (value: Buffer) => GetVersionRequest.decode(value), - responseSerialize: (value: GetVersionResponse) => Buffer.from(GetVersionResponse.encode(value).finish()), + responseSerialize: (value: GetVersionResponse) => + Buffer.from(GetVersionResponse.encode(value).finish()), responseDeserialize: (value: Buffer) => GetVersionResponse.decode(value), }, } as const; @@ -4066,108 +5267,159 @@ export const GeyserService = { export interface GeyserServer extends UntypedServiceImplementation { subscribe: handleBidiStreamingCall; ping: handleUnaryCall; - getLatestBlockhash: handleUnaryCall; - getBlockHeight: handleUnaryCall; + getLatestBlockhash: handleUnaryCall< + GetLatestBlockhashRequest, + GetLatestBlockhashResponse + >; + getBlockHeight: handleUnaryCall< + GetBlockHeightRequest, + GetBlockHeightResponse + >; getSlot: handleUnaryCall; - isBlockhashValid: handleUnaryCall; + isBlockhashValid: handleUnaryCall< + IsBlockhashValidRequest, + IsBlockhashValidResponse + >; getVersion: handleUnaryCall; } export interface GeyserClient extends Client { subscribe(): ClientDuplexStream; - subscribe(options: Partial): ClientDuplexStream; - subscribe(metadata: Metadata, options?: Partial): ClientDuplexStream; - ping(request: PingRequest, callback: (error: ServiceError | null, response: PongResponse) => void): ClientUnaryCall; + subscribe( + options: Partial + ): ClientDuplexStream; + subscribe( + metadata: Metadata, + options?: Partial + ): ClientDuplexStream; + ping( + request: PingRequest, + callback: (error: ServiceError | null, response: PongResponse) => void + ): ClientUnaryCall; ping( request: PingRequest, metadata: Metadata, - callback: (error: ServiceError | null, response: PongResponse) => void, + callback: (error: ServiceError | null, response: PongResponse) => void ): ClientUnaryCall; ping( request: PingRequest, metadata: Metadata, options: Partial, - callback: (error: ServiceError | null, response: PongResponse) => void, + callback: (error: ServiceError | null, response: PongResponse) => void ): ClientUnaryCall; getLatestBlockhash( request: GetLatestBlockhashRequest, - callback: (error: ServiceError | null, response: GetLatestBlockhashResponse) => void, + callback: ( + error: ServiceError | null, + response: GetLatestBlockhashResponse + ) => void ): ClientUnaryCall; getLatestBlockhash( request: GetLatestBlockhashRequest, metadata: Metadata, - callback: (error: ServiceError | null, response: GetLatestBlockhashResponse) => void, + callback: ( + error: ServiceError | null, + response: GetLatestBlockhashResponse + ) => void ): ClientUnaryCall; getLatestBlockhash( request: GetLatestBlockhashRequest, metadata: Metadata, options: Partial, - callback: (error: ServiceError | null, response: GetLatestBlockhashResponse) => void, + callback: ( + error: ServiceError | null, + response: GetLatestBlockhashResponse + ) => void ): ClientUnaryCall; getBlockHeight( request: GetBlockHeightRequest, - callback: (error: ServiceError | null, response: GetBlockHeightResponse) => void, + callback: ( + error: ServiceError | null, + response: GetBlockHeightResponse + ) => void ): ClientUnaryCall; getBlockHeight( request: GetBlockHeightRequest, metadata: Metadata, - callback: (error: ServiceError | null, response: GetBlockHeightResponse) => void, + callback: ( + error: ServiceError | null, + response: GetBlockHeightResponse + ) => void ): ClientUnaryCall; getBlockHeight( request: GetBlockHeightRequest, metadata: Metadata, options: Partial, - callback: (error: ServiceError | null, response: GetBlockHeightResponse) => void, + callback: ( + error: ServiceError | null, + response: GetBlockHeightResponse + ) => void ): ClientUnaryCall; getSlot( request: GetSlotRequest, - callback: (error: ServiceError | null, response: GetSlotResponse) => void, + callback: (error: ServiceError | null, response: GetSlotResponse) => void ): ClientUnaryCall; getSlot( request: GetSlotRequest, metadata: Metadata, - callback: (error: ServiceError | null, response: GetSlotResponse) => void, + callback: (error: ServiceError | null, response: GetSlotResponse) => void ): ClientUnaryCall; getSlot( request: GetSlotRequest, metadata: Metadata, options: Partial, - callback: (error: ServiceError | null, response: GetSlotResponse) => void, + callback: (error: ServiceError | null, response: GetSlotResponse) => void ): ClientUnaryCall; isBlockhashValid( request: IsBlockhashValidRequest, - callback: (error: ServiceError | null, response: IsBlockhashValidResponse) => void, + callback: ( + error: ServiceError | null, + response: IsBlockhashValidResponse + ) => void ): ClientUnaryCall; isBlockhashValid( request: IsBlockhashValidRequest, metadata: Metadata, - callback: (error: ServiceError | null, response: IsBlockhashValidResponse) => void, + callback: ( + error: ServiceError | null, + response: IsBlockhashValidResponse + ) => void ): ClientUnaryCall; isBlockhashValid( request: IsBlockhashValidRequest, metadata: Metadata, options: Partial, - callback: (error: ServiceError | null, response: IsBlockhashValidResponse) => void, + callback: ( + error: ServiceError | null, + response: IsBlockhashValidResponse + ) => void ): ClientUnaryCall; getVersion( request: GetVersionRequest, - callback: (error: ServiceError | null, response: GetVersionResponse) => void, + callback: (error: ServiceError | null, response: GetVersionResponse) => void ): ClientUnaryCall; getVersion( request: GetVersionRequest, metadata: Metadata, - callback: (error: ServiceError | null, response: GetVersionResponse) => void, + callback: (error: ServiceError | null, response: GetVersionResponse) => void ): ClientUnaryCall; getVersion( request: GetVersionRequest, metadata: Metadata, options: Partial, - callback: (error: ServiceError | null, response: GetVersionResponse) => void, + callback: (error: ServiceError | null, response: GetVersionResponse) => void ): ClientUnaryCall; } -export const GeyserClient = makeGenericClientConstructor(GeyserService, "geyser.Geyser") as unknown as { - new (address: string, credentials: ChannelCredentials, options?: Partial): GeyserClient; +export const GeyserClient = makeGenericClientConstructor( + GeyserService, + "geyser.Geyser" +) as unknown as { + new ( + address: string, + credentials: ChannelCredentials, + options?: Partial + ): GeyserClient; service: typeof GeyserService; }; @@ -4215,16 +5467,31 @@ function base64FromBytes(arr: Uint8Array): string { } } -type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; - -export type DeepPartial = T extends Builtin ? T - : T extends Array ? Array> : T extends ReadonlyArray ? ReadonlyArray> - : T extends {} ? { [K in keyof T]?: DeepPartial } +type Builtin = + | Date + | Function + | Uint8Array + | string + | number + | boolean + | undefined; + +export type DeepPartial = T extends Builtin + ? T + : T extends Array + ? Array> + : T extends ReadonlyArray + ? ReadonlyArray> + : T extends {} + ? { [K in keyof T]?: DeepPartial } : Partial; type KeysOfUnion = T extends T ? keyof T : never; -export type Exact = P extends Builtin ? P - : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never }; +export type Exact = P extends Builtin + ? P + : P & { [K in keyof P]: Exact } & { + [K in Exclude>]: never; + }; function longToString(long: Long) { return long.toString(); diff --git a/yellowstone-grpc-client-nodejs/src/grpc/solana-storage.ts b/yellowstone-grpc-client-nodejs/src/grpc/solana-storage.ts index 107b5430..1014cc69 100644 --- a/yellowstone-grpc-client-nodejs/src/grpc/solana-storage.ts +++ b/yellowstone-grpc-client-nodejs/src/grpc/solana-storage.ts @@ -200,7 +200,10 @@ function createBaseConfirmedBlock(): ConfirmedBlock { } export const ConfirmedBlock = { - encode(message: ConfirmedBlock, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: ConfirmedBlock, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.previousBlockhash !== "") { writer.uint32(10).string(message.previousBlockhash); } @@ -217,16 +220,23 @@ export const ConfirmedBlock = { Reward.encode(v!, writer.uint32(42).fork()).ldelim(); } if (message.blockTime !== undefined) { - UnixTimestamp.encode(message.blockTime, writer.uint32(50).fork()).ldelim(); + UnixTimestamp.encode( + message.blockTime, + writer.uint32(50).fork() + ).ldelim(); } if (message.blockHeight !== undefined) { - BlockHeight.encode(message.blockHeight, writer.uint32(58).fork()).ldelim(); + BlockHeight.encode( + message.blockHeight, + writer.uint32(58).fork() + ).ldelim(); } return writer; }, decode(input: _m0.Reader | Uint8Array, length?: number): ConfirmedBlock { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseConfirmedBlock(); while (reader.pos < end) { @@ -258,7 +268,9 @@ export const ConfirmedBlock = { break; } - message.transactions.push(ConfirmedTransaction.decode(reader, reader.uint32())); + message.transactions.push( + ConfirmedTransaction.decode(reader, reader.uint32()) + ); continue; case 5: if (tag !== 42) { @@ -292,57 +304,82 @@ export const ConfirmedBlock = { fromJSON(object: any): ConfirmedBlock { return { - previousBlockhash: isSet(object.previousBlockhash) ? String(object.previousBlockhash) : "", + previousBlockhash: isSet(object.previousBlockhash) + ? String(object.previousBlockhash) + : "", blockhash: isSet(object.blockhash) ? String(object.blockhash) : "", parentSlot: isSet(object.parentSlot) ? String(object.parentSlot) : "0", transactions: Array.isArray(object?.transactions) ? object.transactions.map((e: any) => ConfirmedTransaction.fromJSON(e)) : [], - rewards: Array.isArray(object?.rewards) ? object.rewards.map((e: any) => Reward.fromJSON(e)) : [], - blockTime: isSet(object.blockTime) ? UnixTimestamp.fromJSON(object.blockTime) : undefined, - blockHeight: isSet(object.blockHeight) ? BlockHeight.fromJSON(object.blockHeight) : undefined, + rewards: Array.isArray(object?.rewards) + ? object.rewards.map((e: any) => Reward.fromJSON(e)) + : [], + blockTime: isSet(object.blockTime) + ? UnixTimestamp.fromJSON(object.blockTime) + : undefined, + blockHeight: isSet(object.blockHeight) + ? BlockHeight.fromJSON(object.blockHeight) + : undefined, }; }, toJSON(message: ConfirmedBlock): unknown { const obj: any = {}; - message.previousBlockhash !== undefined && (obj.previousBlockhash = message.previousBlockhash); + message.previousBlockhash !== undefined && + (obj.previousBlockhash = message.previousBlockhash); message.blockhash !== undefined && (obj.blockhash = message.blockhash); message.parentSlot !== undefined && (obj.parentSlot = message.parentSlot); if (message.transactions) { - obj.transactions = message.transactions.map((e) => e ? ConfirmedTransaction.toJSON(e) : undefined); + obj.transactions = message.transactions.map((e) => + e ? ConfirmedTransaction.toJSON(e) : undefined + ); } else { obj.transactions = []; } if (message.rewards) { - obj.rewards = message.rewards.map((e) => e ? Reward.toJSON(e) : undefined); + obj.rewards = message.rewards.map((e) => + e ? Reward.toJSON(e) : undefined + ); } else { obj.rewards = []; } message.blockTime !== undefined && - (obj.blockTime = message.blockTime ? UnixTimestamp.toJSON(message.blockTime) : undefined); + (obj.blockTime = message.blockTime + ? UnixTimestamp.toJSON(message.blockTime) + : undefined); message.blockHeight !== undefined && - (obj.blockHeight = message.blockHeight ? BlockHeight.toJSON(message.blockHeight) : undefined); + (obj.blockHeight = message.blockHeight + ? BlockHeight.toJSON(message.blockHeight) + : undefined); return obj; }, - create, I>>(base?: I): ConfirmedBlock { + create, I>>( + base?: I + ): ConfirmedBlock { return ConfirmedBlock.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): ConfirmedBlock { + fromPartial, I>>( + object: I + ): ConfirmedBlock { const message = createBaseConfirmedBlock(); message.previousBlockhash = object.previousBlockhash ?? ""; message.blockhash = object.blockhash ?? ""; message.parentSlot = object.parentSlot ?? "0"; - message.transactions = object.transactions?.map((e) => ConfirmedTransaction.fromPartial(e)) || []; + message.transactions = + object.transactions?.map((e) => ConfirmedTransaction.fromPartial(e)) || + []; message.rewards = object.rewards?.map((e) => Reward.fromPartial(e)) || []; - message.blockTime = (object.blockTime !== undefined && object.blockTime !== null) - ? UnixTimestamp.fromPartial(object.blockTime) - : undefined; - message.blockHeight = (object.blockHeight !== undefined && object.blockHeight !== null) - ? BlockHeight.fromPartial(object.blockHeight) - : undefined; + message.blockTime = + object.blockTime !== undefined && object.blockTime !== null + ? UnixTimestamp.fromPartial(object.blockTime) + : undefined; + message.blockHeight = + object.blockHeight !== undefined && object.blockHeight !== null + ? BlockHeight.fromPartial(object.blockHeight) + : undefined; return message; }, }; @@ -352,18 +389,31 @@ function createBaseConfirmedTransaction(): ConfirmedTransaction { } export const ConfirmedTransaction = { - encode(message: ConfirmedTransaction, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: ConfirmedTransaction, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.transaction !== undefined) { - Transaction.encode(message.transaction, writer.uint32(10).fork()).ldelim(); + Transaction.encode( + message.transaction, + writer.uint32(10).fork() + ).ldelim(); } if (message.meta !== undefined) { - TransactionStatusMeta.encode(message.meta, writer.uint32(18).fork()).ldelim(); + TransactionStatusMeta.encode( + message.meta, + writer.uint32(18).fork() + ).ldelim(); } return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): ConfirmedTransaction { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): ConfirmedTransaction { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseConfirmedTransaction(); while (reader.pos < end) { @@ -394,31 +444,46 @@ export const ConfirmedTransaction = { fromJSON(object: any): ConfirmedTransaction { return { - transaction: isSet(object.transaction) ? Transaction.fromJSON(object.transaction) : undefined, - meta: isSet(object.meta) ? TransactionStatusMeta.fromJSON(object.meta) : undefined, + transaction: isSet(object.transaction) + ? Transaction.fromJSON(object.transaction) + : undefined, + meta: isSet(object.meta) + ? TransactionStatusMeta.fromJSON(object.meta) + : undefined, }; }, toJSON(message: ConfirmedTransaction): unknown { const obj: any = {}; message.transaction !== undefined && - (obj.transaction = message.transaction ? Transaction.toJSON(message.transaction) : undefined); - message.meta !== undefined && (obj.meta = message.meta ? TransactionStatusMeta.toJSON(message.meta) : undefined); + (obj.transaction = message.transaction + ? Transaction.toJSON(message.transaction) + : undefined); + message.meta !== undefined && + (obj.meta = message.meta + ? TransactionStatusMeta.toJSON(message.meta) + : undefined); return obj; }, - create, I>>(base?: I): ConfirmedTransaction { + create, I>>( + base?: I + ): ConfirmedTransaction { return ConfirmedTransaction.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): ConfirmedTransaction { + fromPartial, I>>( + object: I + ): ConfirmedTransaction { const message = createBaseConfirmedTransaction(); - message.transaction = (object.transaction !== undefined && object.transaction !== null) - ? Transaction.fromPartial(object.transaction) - : undefined; - message.meta = (object.meta !== undefined && object.meta !== null) - ? TransactionStatusMeta.fromPartial(object.meta) - : undefined; + message.transaction = + object.transaction !== undefined && object.transaction !== null + ? Transaction.fromPartial(object.transaction) + : undefined; + message.meta = + object.meta !== undefined && object.meta !== null + ? TransactionStatusMeta.fromPartial(object.meta) + : undefined; return message; }, }; @@ -428,7 +493,10 @@ function createBaseTransaction(): Transaction { } export const Transaction = { - encode(message: Transaction, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: Transaction, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { for (const v of message.signatures) { writer.uint32(10).bytes(v!); } @@ -439,7 +507,8 @@ export const Transaction = { }, decode(input: _m0.Reader | Uint8Array, length?: number): Transaction { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseTransaction(); while (reader.pos < end) { @@ -470,19 +539,28 @@ export const Transaction = { fromJSON(object: any): Transaction { return { - signatures: Array.isArray(object?.signatures) ? object.signatures.map((e: any) => bytesFromBase64(e)) : [], - message: isSet(object.message) ? Message.fromJSON(object.message) : undefined, + signatures: Array.isArray(object?.signatures) + ? object.signatures.map((e: any) => bytesFromBase64(e)) + : [], + message: isSet(object.message) + ? Message.fromJSON(object.message) + : undefined, }; }, toJSON(message: Transaction): unknown { const obj: any = {}; if (message.signatures) { - obj.signatures = message.signatures.map((e) => base64FromBytes(e !== undefined ? e : new Uint8Array(0))); + obj.signatures = message.signatures.map((e) => + base64FromBytes(e !== undefined ? e : new Uint8Array(0)) + ); } else { obj.signatures = []; } - message.message !== undefined && (obj.message = message.message ? Message.toJSON(message.message) : undefined); + message.message !== undefined && + (obj.message = message.message + ? Message.toJSON(message.message) + : undefined); return obj; }, @@ -490,12 +568,15 @@ export const Transaction = { return Transaction.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): Transaction { + fromPartial, I>>( + object: I + ): Transaction { const message = createBaseTransaction(); message.signatures = object.signatures?.map((e) => e) || []; - message.message = (object.message !== undefined && object.message !== null) - ? Message.fromPartial(object.message) - : undefined; + message.message = + object.message !== undefined && object.message !== null + ? Message.fromPartial(object.message) + : undefined; return message; }, }; @@ -512,7 +593,10 @@ function createBaseMessage(): Message { } export const Message = { - encode(message: Message, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: Message, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.header !== undefined) { MessageHeader.encode(message.header, writer.uint32(10).fork()).ldelim(); } @@ -535,7 +619,8 @@ export const Message = { }, decode(input: _m0.Reader | Uint8Array, length?: number): Message { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseMessage(); while (reader.pos < end) { @@ -567,7 +652,9 @@ export const Message = { break; } - message.instructions.push(CompiledInstruction.decode(reader, reader.uint32())); + message.instructions.push( + CompiledInstruction.decode(reader, reader.uint32()) + ); continue; case 5: if (tag !== 40) { @@ -581,7 +668,9 @@ export const Message = { break; } - message.addressTableLookups.push(MessageAddressTableLookup.decode(reader, reader.uint32())); + message.addressTableLookups.push( + MessageAddressTableLookup.decode(reader, reader.uint32()) + ); continue; } if ((tag & 7) === 4 || tag === 0) { @@ -594,33 +683,50 @@ export const Message = { fromJSON(object: any): Message { return { - header: isSet(object.header) ? MessageHeader.fromJSON(object.header) : undefined, - accountKeys: Array.isArray(object?.accountKeys) ? object.accountKeys.map((e: any) => bytesFromBase64(e)) : [], - recentBlockhash: isSet(object.recentBlockhash) ? bytesFromBase64(object.recentBlockhash) : new Uint8Array(0), + header: isSet(object.header) + ? MessageHeader.fromJSON(object.header) + : undefined, + accountKeys: Array.isArray(object?.accountKeys) + ? object.accountKeys.map((e: any) => bytesFromBase64(e)) + : [], + recentBlockhash: isSet(object.recentBlockhash) + ? bytesFromBase64(object.recentBlockhash) + : new Uint8Array(0), instructions: Array.isArray(object?.instructions) ? object.instructions.map((e: any) => CompiledInstruction.fromJSON(e)) : [], versioned: isSet(object.versioned) ? Boolean(object.versioned) : false, addressTableLookups: Array.isArray(object?.addressTableLookups) - ? object.addressTableLookups.map((e: any) => MessageAddressTableLookup.fromJSON(e)) + ? object.addressTableLookups.map((e: any) => + MessageAddressTableLookup.fromJSON(e) + ) : [], }; }, toJSON(message: Message): unknown { const obj: any = {}; - message.header !== undefined && (obj.header = message.header ? MessageHeader.toJSON(message.header) : undefined); + message.header !== undefined && + (obj.header = message.header + ? MessageHeader.toJSON(message.header) + : undefined); if (message.accountKeys) { - obj.accountKeys = message.accountKeys.map((e) => base64FromBytes(e !== undefined ? e : new Uint8Array(0))); + obj.accountKeys = message.accountKeys.map((e) => + base64FromBytes(e !== undefined ? e : new Uint8Array(0)) + ); } else { obj.accountKeys = []; } message.recentBlockhash !== undefined && (obj.recentBlockhash = base64FromBytes( - message.recentBlockhash !== undefined ? message.recentBlockhash : new Uint8Array(0), + message.recentBlockhash !== undefined + ? message.recentBlockhash + : new Uint8Array(0) )); if (message.instructions) { - obj.instructions = message.instructions.map((e) => e ? CompiledInstruction.toJSON(e) : undefined); + obj.instructions = message.instructions.map((e) => + e ? CompiledInstruction.toJSON(e) : undefined + ); } else { obj.instructions = []; } @@ -641,25 +747,36 @@ export const Message = { fromPartial, I>>(object: I): Message { const message = createBaseMessage(); - message.header = (object.header !== undefined && object.header !== null) - ? MessageHeader.fromPartial(object.header) - : undefined; + message.header = + object.header !== undefined && object.header !== null + ? MessageHeader.fromPartial(object.header) + : undefined; message.accountKeys = object.accountKeys?.map((e) => e) || []; message.recentBlockhash = object.recentBlockhash ?? new Uint8Array(0); - message.instructions = object.instructions?.map((e) => CompiledInstruction.fromPartial(e)) || []; + message.instructions = + object.instructions?.map((e) => CompiledInstruction.fromPartial(e)) || []; message.versioned = object.versioned ?? false; - message.addressTableLookups = object.addressTableLookups?.map((e) => MessageAddressTableLookup.fromPartial(e)) || - []; + message.addressTableLookups = + object.addressTableLookups?.map((e) => + MessageAddressTableLookup.fromPartial(e) + ) || []; return message; }, }; function createBaseMessageHeader(): MessageHeader { - return { numRequiredSignatures: 0, numReadonlySignedAccounts: 0, numReadonlyUnsignedAccounts: 0 }; + return { + numRequiredSignatures: 0, + numReadonlySignedAccounts: 0, + numReadonlyUnsignedAccounts: 0, + }; } export const MessageHeader = { - encode(message: MessageHeader, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: MessageHeader, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.numRequiredSignatures !== 0) { writer.uint32(8).uint32(message.numRequiredSignatures); } @@ -673,7 +790,8 @@ export const MessageHeader = { }, decode(input: _m0.Reader | Uint8Array, length?: number): MessageHeader { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseMessageHeader(); while (reader.pos < end) { @@ -711,8 +829,12 @@ export const MessageHeader = { fromJSON(object: any): MessageHeader { return { - numRequiredSignatures: isSet(object.numRequiredSignatures) ? Number(object.numRequiredSignatures) : 0, - numReadonlySignedAccounts: isSet(object.numReadonlySignedAccounts) ? Number(object.numReadonlySignedAccounts) : 0, + numRequiredSignatures: isSet(object.numRequiredSignatures) + ? Number(object.numRequiredSignatures) + : 0, + numReadonlySignedAccounts: isSet(object.numReadonlySignedAccounts) + ? Number(object.numReadonlySignedAccounts) + : 0, numReadonlyUnsignedAccounts: isSet(object.numReadonlyUnsignedAccounts) ? Number(object.numReadonlyUnsignedAccounts) : 0, @@ -724,31 +846,47 @@ export const MessageHeader = { message.numRequiredSignatures !== undefined && (obj.numRequiredSignatures = Math.round(message.numRequiredSignatures)); message.numReadonlySignedAccounts !== undefined && - (obj.numReadonlySignedAccounts = Math.round(message.numReadonlySignedAccounts)); + (obj.numReadonlySignedAccounts = Math.round( + message.numReadonlySignedAccounts + )); message.numReadonlyUnsignedAccounts !== undefined && - (obj.numReadonlyUnsignedAccounts = Math.round(message.numReadonlyUnsignedAccounts)); + (obj.numReadonlyUnsignedAccounts = Math.round( + message.numReadonlyUnsignedAccounts + )); return obj; }, - create, I>>(base?: I): MessageHeader { + create, I>>( + base?: I + ): MessageHeader { return MessageHeader.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): MessageHeader { + fromPartial, I>>( + object: I + ): MessageHeader { const message = createBaseMessageHeader(); message.numRequiredSignatures = object.numRequiredSignatures ?? 0; message.numReadonlySignedAccounts = object.numReadonlySignedAccounts ?? 0; - message.numReadonlyUnsignedAccounts = object.numReadonlyUnsignedAccounts ?? 0; + message.numReadonlyUnsignedAccounts = + object.numReadonlyUnsignedAccounts ?? 0; return message; }, }; function createBaseMessageAddressTableLookup(): MessageAddressTableLookup { - return { accountKey: new Uint8Array(0), writableIndexes: new Uint8Array(0), readonlyIndexes: new Uint8Array(0) }; + return { + accountKey: new Uint8Array(0), + writableIndexes: new Uint8Array(0), + readonlyIndexes: new Uint8Array(0), + }; } export const MessageAddressTableLookup = { - encode(message: MessageAddressTableLookup, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: MessageAddressTableLookup, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.accountKey.length !== 0) { writer.uint32(10).bytes(message.accountKey); } @@ -761,8 +899,12 @@ export const MessageAddressTableLookup = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): MessageAddressTableLookup { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): MessageAddressTableLookup { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseMessageAddressTableLookup(); while (reader.pos < end) { @@ -800,32 +942,50 @@ export const MessageAddressTableLookup = { fromJSON(object: any): MessageAddressTableLookup { return { - accountKey: isSet(object.accountKey) ? bytesFromBase64(object.accountKey) : new Uint8Array(0), - writableIndexes: isSet(object.writableIndexes) ? bytesFromBase64(object.writableIndexes) : new Uint8Array(0), - readonlyIndexes: isSet(object.readonlyIndexes) ? bytesFromBase64(object.readonlyIndexes) : new Uint8Array(0), + accountKey: isSet(object.accountKey) + ? bytesFromBase64(object.accountKey) + : new Uint8Array(0), + writableIndexes: isSet(object.writableIndexes) + ? bytesFromBase64(object.writableIndexes) + : new Uint8Array(0), + readonlyIndexes: isSet(object.readonlyIndexes) + ? bytesFromBase64(object.readonlyIndexes) + : new Uint8Array(0), }; }, toJSON(message: MessageAddressTableLookup): unknown { const obj: any = {}; message.accountKey !== undefined && - (obj.accountKey = base64FromBytes(message.accountKey !== undefined ? message.accountKey : new Uint8Array(0))); + (obj.accountKey = base64FromBytes( + message.accountKey !== undefined + ? message.accountKey + : new Uint8Array(0) + )); message.writableIndexes !== undefined && (obj.writableIndexes = base64FromBytes( - message.writableIndexes !== undefined ? message.writableIndexes : new Uint8Array(0), + message.writableIndexes !== undefined + ? message.writableIndexes + : new Uint8Array(0) )); message.readonlyIndexes !== undefined && (obj.readonlyIndexes = base64FromBytes( - message.readonlyIndexes !== undefined ? message.readonlyIndexes : new Uint8Array(0), + message.readonlyIndexes !== undefined + ? message.readonlyIndexes + : new Uint8Array(0) )); return obj; }, - create, I>>(base?: I): MessageAddressTableLookup { + create, I>>( + base?: I + ): MessageAddressTableLookup { return MessageAddressTableLookup.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): MessageAddressTableLookup { + fromPartial, I>>( + object: I + ): MessageAddressTableLookup { const message = createBaseMessageAddressTableLookup(); message.accountKey = object.accountKey ?? new Uint8Array(0); message.writableIndexes = object.writableIndexes ?? new Uint8Array(0); @@ -856,7 +1016,10 @@ function createBaseTransactionStatusMeta(): TransactionStatusMeta { } export const TransactionStatusMeta = { - encode(message: TransactionStatusMeta, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: TransactionStatusMeta, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.err !== undefined) { TransactionError.encode(message.err, writer.uint32(10).fork()).ldelim(); } @@ -912,8 +1075,12 @@ export const TransactionStatusMeta = { return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): TransactionStatusMeta { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + decode( + input: _m0.Reader | Uint8Array, + length?: number + ): TransactionStatusMeta { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseTransactionStatusMeta(); while (reader.pos < end) { @@ -972,7 +1139,9 @@ export const TransactionStatusMeta = { break; } - message.innerInstructions.push(InnerInstructions.decode(reader, reader.uint32())); + message.innerInstructions.push( + InnerInstructions.decode(reader, reader.uint32()) + ); continue; case 10: if (tag !== 80) { @@ -1000,14 +1169,18 @@ export const TransactionStatusMeta = { break; } - message.preTokenBalances.push(TokenBalance.decode(reader, reader.uint32())); + message.preTokenBalances.push( + TokenBalance.decode(reader, reader.uint32()) + ); continue; case 8: if (tag !== 66) { break; } - message.postTokenBalances.push(TokenBalance.decode(reader, reader.uint32())); + message.postTokenBalances.push( + TokenBalance.decode(reader, reader.uint32()) + ); continue; case 9: if (tag !== 74) { @@ -1062,38 +1235,63 @@ export const TransactionStatusMeta = { fromJSON(object: any): TransactionStatusMeta { return { - err: isSet(object.err) ? TransactionError.fromJSON(object.err) : undefined, + err: isSet(object.err) + ? TransactionError.fromJSON(object.err) + : undefined, fee: isSet(object.fee) ? String(object.fee) : "0", - preBalances: Array.isArray(object?.preBalances) ? object.preBalances.map((e: any) => String(e)) : [], - postBalances: Array.isArray(object?.postBalances) ? object.postBalances.map((e: any) => String(e)) : [], + preBalances: Array.isArray(object?.preBalances) + ? object.preBalances.map((e: any) => String(e)) + : [], + postBalances: Array.isArray(object?.postBalances) + ? object.postBalances.map((e: any) => String(e)) + : [], innerInstructions: Array.isArray(object?.innerInstructions) - ? object.innerInstructions.map((e: any) => InnerInstructions.fromJSON(e)) + ? object.innerInstructions.map((e: any) => + InnerInstructions.fromJSON(e) + ) + : [], + innerInstructionsNone: isSet(object.innerInstructionsNone) + ? Boolean(object.innerInstructionsNone) + : false, + logMessages: Array.isArray(object?.logMessages) + ? object.logMessages.map((e: any) => String(e)) : [], - innerInstructionsNone: isSet(object.innerInstructionsNone) ? Boolean(object.innerInstructionsNone) : false, - logMessages: Array.isArray(object?.logMessages) ? object.logMessages.map((e: any) => String(e)) : [], - logMessagesNone: isSet(object.logMessagesNone) ? Boolean(object.logMessagesNone) : false, + logMessagesNone: isSet(object.logMessagesNone) + ? Boolean(object.logMessagesNone) + : false, preTokenBalances: Array.isArray(object?.preTokenBalances) ? object.preTokenBalances.map((e: any) => TokenBalance.fromJSON(e)) : [], postTokenBalances: Array.isArray(object?.postTokenBalances) ? object.postTokenBalances.map((e: any) => TokenBalance.fromJSON(e)) : [], - rewards: Array.isArray(object?.rewards) ? object.rewards.map((e: any) => Reward.fromJSON(e)) : [], + rewards: Array.isArray(object?.rewards) + ? object.rewards.map((e: any) => Reward.fromJSON(e)) + : [], loadedWritableAddresses: Array.isArray(object?.loadedWritableAddresses) ? object.loadedWritableAddresses.map((e: any) => bytesFromBase64(e)) : [], loadedReadonlyAddresses: Array.isArray(object?.loadedReadonlyAddresses) ? object.loadedReadonlyAddresses.map((e: any) => bytesFromBase64(e)) : [], - returnData: isSet(object.returnData) ? ReturnData.fromJSON(object.returnData) : undefined, - returnDataNone: isSet(object.returnDataNone) ? Boolean(object.returnDataNone) : false, - computeUnitsConsumed: isSet(object.computeUnitsConsumed) ? String(object.computeUnitsConsumed) : undefined, + returnData: isSet(object.returnData) + ? ReturnData.fromJSON(object.returnData) + : undefined, + returnDataNone: isSet(object.returnDataNone) + ? Boolean(object.returnDataNone) + : false, + computeUnitsConsumed: isSet(object.computeUnitsConsumed) + ? String(object.computeUnitsConsumed) + : undefined, }; }, toJSON(message: TransactionStatusMeta): unknown { const obj: any = {}; - message.err !== undefined && (obj.err = message.err ? TransactionError.toJSON(message.err) : undefined); + message.err !== undefined && + (obj.err = message.err + ? TransactionError.toJSON(message.err) + : undefined); message.fee !== undefined && (obj.fee = message.fee); if (message.preBalances) { obj.preBalances = message.preBalances.map((e) => e); @@ -1106,29 +1304,39 @@ export const TransactionStatusMeta = { obj.postBalances = []; } if (message.innerInstructions) { - obj.innerInstructions = message.innerInstructions.map((e) => e ? InnerInstructions.toJSON(e) : undefined); + obj.innerInstructions = message.innerInstructions.map((e) => + e ? InnerInstructions.toJSON(e) : undefined + ); } else { obj.innerInstructions = []; } - message.innerInstructionsNone !== undefined && (obj.innerInstructionsNone = message.innerInstructionsNone); + message.innerInstructionsNone !== undefined && + (obj.innerInstructionsNone = message.innerInstructionsNone); if (message.logMessages) { obj.logMessages = message.logMessages.map((e) => e); } else { obj.logMessages = []; } - message.logMessagesNone !== undefined && (obj.logMessagesNone = message.logMessagesNone); + message.logMessagesNone !== undefined && + (obj.logMessagesNone = message.logMessagesNone); if (message.preTokenBalances) { - obj.preTokenBalances = message.preTokenBalances.map((e) => e ? TokenBalance.toJSON(e) : undefined); + obj.preTokenBalances = message.preTokenBalances.map((e) => + e ? TokenBalance.toJSON(e) : undefined + ); } else { obj.preTokenBalances = []; } if (message.postTokenBalances) { - obj.postTokenBalances = message.postTokenBalances.map((e) => e ? TokenBalance.toJSON(e) : undefined); + obj.postTokenBalances = message.postTokenBalances.map((e) => + e ? TokenBalance.toJSON(e) : undefined + ); } else { obj.postTokenBalances = []; } if (message.rewards) { - obj.rewards = message.rewards.map((e) => e ? Reward.toJSON(e) : undefined); + obj.rewards = message.rewards.map((e) => + e ? Reward.toJSON(e) : undefined + ); } else { obj.rewards = []; } @@ -1147,36 +1355,52 @@ export const TransactionStatusMeta = { obj.loadedReadonlyAddresses = []; } message.returnData !== undefined && - (obj.returnData = message.returnData ? ReturnData.toJSON(message.returnData) : undefined); - message.returnDataNone !== undefined && (obj.returnDataNone = message.returnDataNone); - message.computeUnitsConsumed !== undefined && (obj.computeUnitsConsumed = message.computeUnitsConsumed); + (obj.returnData = message.returnData + ? ReturnData.toJSON(message.returnData) + : undefined); + message.returnDataNone !== undefined && + (obj.returnDataNone = message.returnDataNone); + message.computeUnitsConsumed !== undefined && + (obj.computeUnitsConsumed = message.computeUnitsConsumed); return obj; }, - create, I>>(base?: I): TransactionStatusMeta { + create, I>>( + base?: I + ): TransactionStatusMeta { return TransactionStatusMeta.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): TransactionStatusMeta { + fromPartial, I>>( + object: I + ): TransactionStatusMeta { const message = createBaseTransactionStatusMeta(); - message.err = (object.err !== undefined && object.err !== null) - ? TransactionError.fromPartial(object.err) - : undefined; + message.err = + object.err !== undefined && object.err !== null + ? TransactionError.fromPartial(object.err) + : undefined; message.fee = object.fee ?? "0"; message.preBalances = object.preBalances?.map((e) => e) || []; message.postBalances = object.postBalances?.map((e) => e) || []; - message.innerInstructions = object.innerInstructions?.map((e) => InnerInstructions.fromPartial(e)) || []; + message.innerInstructions = + object.innerInstructions?.map((e) => InnerInstructions.fromPartial(e)) || + []; message.innerInstructionsNone = object.innerInstructionsNone ?? false; message.logMessages = object.logMessages?.map((e) => e) || []; message.logMessagesNone = object.logMessagesNone ?? false; - message.preTokenBalances = object.preTokenBalances?.map((e) => TokenBalance.fromPartial(e)) || []; - message.postTokenBalances = object.postTokenBalances?.map((e) => TokenBalance.fromPartial(e)) || []; + message.preTokenBalances = + object.preTokenBalances?.map((e) => TokenBalance.fromPartial(e)) || []; + message.postTokenBalances = + object.postTokenBalances?.map((e) => TokenBalance.fromPartial(e)) || []; message.rewards = object.rewards?.map((e) => Reward.fromPartial(e)) || []; - message.loadedWritableAddresses = object.loadedWritableAddresses?.map((e) => e) || []; - message.loadedReadonlyAddresses = object.loadedReadonlyAddresses?.map((e) => e) || []; - message.returnData = (object.returnData !== undefined && object.returnData !== null) - ? ReturnData.fromPartial(object.returnData) - : undefined; + message.loadedWritableAddresses = + object.loadedWritableAddresses?.map((e) => e) || []; + message.loadedReadonlyAddresses = + object.loadedReadonlyAddresses?.map((e) => e) || []; + message.returnData = + object.returnData !== undefined && object.returnData !== null + ? ReturnData.fromPartial(object.returnData) + : undefined; message.returnDataNone = object.returnDataNone ?? false; message.computeUnitsConsumed = object.computeUnitsConsumed ?? undefined; return message; @@ -1188,7 +1412,10 @@ function createBaseTransactionError(): TransactionError { } export const TransactionError = { - encode(message: TransactionError, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: TransactionError, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.err.length !== 0) { writer.uint32(10).bytes(message.err); } @@ -1196,7 +1423,8 @@ export const TransactionError = { }, decode(input: _m0.Reader | Uint8Array, length?: number): TransactionError { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseTransactionError(); while (reader.pos < end) { @@ -1219,21 +1447,29 @@ export const TransactionError = { }, fromJSON(object: any): TransactionError { - return { err: isSet(object.err) ? bytesFromBase64(object.err) : new Uint8Array(0) }; + return { + err: isSet(object.err) ? bytesFromBase64(object.err) : new Uint8Array(0), + }; }, toJSON(message: TransactionError): unknown { const obj: any = {}; message.err !== undefined && - (obj.err = base64FromBytes(message.err !== undefined ? message.err : new Uint8Array(0))); + (obj.err = base64FromBytes( + message.err !== undefined ? message.err : new Uint8Array(0) + )); return obj; }, - create, I>>(base?: I): TransactionError { + create, I>>( + base?: I + ): TransactionError { return TransactionError.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): TransactionError { + fromPartial, I>>( + object: I + ): TransactionError { const message = createBaseTransactionError(); message.err = object.err ?? new Uint8Array(0); return message; @@ -1245,7 +1481,10 @@ function createBaseInnerInstructions(): InnerInstructions { } export const InnerInstructions = { - encode(message: InnerInstructions, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: InnerInstructions, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.index !== 0) { writer.uint32(8).uint32(message.index); } @@ -1256,7 +1495,8 @@ export const InnerInstructions = { }, decode(input: _m0.Reader | Uint8Array, length?: number): InnerInstructions { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseInnerInstructions(); while (reader.pos < end) { @@ -1274,7 +1514,9 @@ export const InnerInstructions = { break; } - message.instructions.push(InnerInstruction.decode(reader, reader.uint32())); + message.instructions.push( + InnerInstruction.decode(reader, reader.uint32()) + ); continue; } if ((tag & 7) === 4 || tag === 0) { @@ -1298,31 +1540,46 @@ export const InnerInstructions = { const obj: any = {}; message.index !== undefined && (obj.index = Math.round(message.index)); if (message.instructions) { - obj.instructions = message.instructions.map((e) => e ? InnerInstruction.toJSON(e) : undefined); + obj.instructions = message.instructions.map((e) => + e ? InnerInstruction.toJSON(e) : undefined + ); } else { obj.instructions = []; } return obj; }, - create, I>>(base?: I): InnerInstructions { + create, I>>( + base?: I + ): InnerInstructions { return InnerInstructions.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): InnerInstructions { + fromPartial, I>>( + object: I + ): InnerInstructions { const message = createBaseInnerInstructions(); message.index = object.index ?? 0; - message.instructions = object.instructions?.map((e) => InnerInstruction.fromPartial(e)) || []; + message.instructions = + object.instructions?.map((e) => InnerInstruction.fromPartial(e)) || []; return message; }, }; function createBaseInnerInstruction(): InnerInstruction { - return { programIdIndex: 0, accounts: new Uint8Array(0), data: new Uint8Array(0), stackHeight: undefined }; + return { + programIdIndex: 0, + accounts: new Uint8Array(0), + data: new Uint8Array(0), + stackHeight: undefined, + }; } export const InnerInstruction = { - encode(message: InnerInstruction, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: InnerInstruction, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.programIdIndex !== 0) { writer.uint32(8).uint32(message.programIdIndex); } @@ -1339,7 +1596,8 @@ export const InnerInstruction = { }, decode(input: _m0.Reader | Uint8Array, length?: number): InnerInstruction { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseInnerInstruction(); while (reader.pos < end) { @@ -1384,29 +1642,47 @@ export const InnerInstruction = { fromJSON(object: any): InnerInstruction { return { - programIdIndex: isSet(object.programIdIndex) ? Number(object.programIdIndex) : 0, - accounts: isSet(object.accounts) ? bytesFromBase64(object.accounts) : new Uint8Array(0), - data: isSet(object.data) ? bytesFromBase64(object.data) : new Uint8Array(0), - stackHeight: isSet(object.stackHeight) ? Number(object.stackHeight) : undefined, + programIdIndex: isSet(object.programIdIndex) + ? Number(object.programIdIndex) + : 0, + accounts: isSet(object.accounts) + ? bytesFromBase64(object.accounts) + : new Uint8Array(0), + data: isSet(object.data) + ? bytesFromBase64(object.data) + : new Uint8Array(0), + stackHeight: isSet(object.stackHeight) + ? Number(object.stackHeight) + : undefined, }; }, toJSON(message: InnerInstruction): unknown { const obj: any = {}; - message.programIdIndex !== undefined && (obj.programIdIndex = Math.round(message.programIdIndex)); + message.programIdIndex !== undefined && + (obj.programIdIndex = Math.round(message.programIdIndex)); message.accounts !== undefined && - (obj.accounts = base64FromBytes(message.accounts !== undefined ? message.accounts : new Uint8Array(0))); + (obj.accounts = base64FromBytes( + message.accounts !== undefined ? message.accounts : new Uint8Array(0) + )); message.data !== undefined && - (obj.data = base64FromBytes(message.data !== undefined ? message.data : new Uint8Array(0))); - message.stackHeight !== undefined && (obj.stackHeight = Math.round(message.stackHeight)); + (obj.data = base64FromBytes( + message.data !== undefined ? message.data : new Uint8Array(0) + )); + message.stackHeight !== undefined && + (obj.stackHeight = Math.round(message.stackHeight)); return obj; }, - create, I>>(base?: I): InnerInstruction { + create, I>>( + base?: I + ): InnerInstruction { return InnerInstruction.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): InnerInstruction { + fromPartial, I>>( + object: I + ): InnerInstruction { const message = createBaseInnerInstruction(); message.programIdIndex = object.programIdIndex ?? 0; message.accounts = object.accounts ?? new Uint8Array(0); @@ -1417,11 +1693,18 @@ export const InnerInstruction = { }; function createBaseCompiledInstruction(): CompiledInstruction { - return { programIdIndex: 0, accounts: new Uint8Array(0), data: new Uint8Array(0) }; + return { + programIdIndex: 0, + accounts: new Uint8Array(0), + data: new Uint8Array(0), + }; } export const CompiledInstruction = { - encode(message: CompiledInstruction, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: CompiledInstruction, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.programIdIndex !== 0) { writer.uint32(8).uint32(message.programIdIndex); } @@ -1435,7 +1718,8 @@ export const CompiledInstruction = { }, decode(input: _m0.Reader | Uint8Array, length?: number): CompiledInstruction { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseCompiledInstruction(); while (reader.pos < end) { @@ -1473,27 +1757,42 @@ export const CompiledInstruction = { fromJSON(object: any): CompiledInstruction { return { - programIdIndex: isSet(object.programIdIndex) ? Number(object.programIdIndex) : 0, - accounts: isSet(object.accounts) ? bytesFromBase64(object.accounts) : new Uint8Array(0), - data: isSet(object.data) ? bytesFromBase64(object.data) : new Uint8Array(0), + programIdIndex: isSet(object.programIdIndex) + ? Number(object.programIdIndex) + : 0, + accounts: isSet(object.accounts) + ? bytesFromBase64(object.accounts) + : new Uint8Array(0), + data: isSet(object.data) + ? bytesFromBase64(object.data) + : new Uint8Array(0), }; }, toJSON(message: CompiledInstruction): unknown { const obj: any = {}; - message.programIdIndex !== undefined && (obj.programIdIndex = Math.round(message.programIdIndex)); + message.programIdIndex !== undefined && + (obj.programIdIndex = Math.round(message.programIdIndex)); message.accounts !== undefined && - (obj.accounts = base64FromBytes(message.accounts !== undefined ? message.accounts : new Uint8Array(0))); + (obj.accounts = base64FromBytes( + message.accounts !== undefined ? message.accounts : new Uint8Array(0) + )); message.data !== undefined && - (obj.data = base64FromBytes(message.data !== undefined ? message.data : new Uint8Array(0))); + (obj.data = base64FromBytes( + message.data !== undefined ? message.data : new Uint8Array(0) + )); return obj; }, - create, I>>(base?: I): CompiledInstruction { + create, I>>( + base?: I + ): CompiledInstruction { return CompiledInstruction.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): CompiledInstruction { + fromPartial, I>>( + object: I + ): CompiledInstruction { const message = createBaseCompiledInstruction(); message.programIdIndex = object.programIdIndex ?? 0; message.accounts = object.accounts ?? new Uint8Array(0); @@ -1503,11 +1802,20 @@ export const CompiledInstruction = { }; function createBaseTokenBalance(): TokenBalance { - return { accountIndex: 0, mint: "", uiTokenAmount: undefined, owner: "", programId: "" }; + return { + accountIndex: 0, + mint: "", + uiTokenAmount: undefined, + owner: "", + programId: "", + }; } export const TokenBalance = { - encode(message: TokenBalance, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: TokenBalance, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.accountIndex !== 0) { writer.uint32(8).uint32(message.accountIndex); } @@ -1515,7 +1823,10 @@ export const TokenBalance = { writer.uint32(18).string(message.mint); } if (message.uiTokenAmount !== undefined) { - UiTokenAmount.encode(message.uiTokenAmount, writer.uint32(26).fork()).ldelim(); + UiTokenAmount.encode( + message.uiTokenAmount, + writer.uint32(26).fork() + ).ldelim(); } if (message.owner !== "") { writer.uint32(34).string(message.owner); @@ -1527,7 +1838,8 @@ export const TokenBalance = { }, decode(input: _m0.Reader | Uint8Array, length?: number): TokenBalance { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseTokenBalance(); while (reader.pos < end) { @@ -1579,9 +1891,13 @@ export const TokenBalance = { fromJSON(object: any): TokenBalance { return { - accountIndex: isSet(object.accountIndex) ? Number(object.accountIndex) : 0, + accountIndex: isSet(object.accountIndex) + ? Number(object.accountIndex) + : 0, mint: isSet(object.mint) ? String(object.mint) : "", - uiTokenAmount: isSet(object.uiTokenAmount) ? UiTokenAmount.fromJSON(object.uiTokenAmount) : undefined, + uiTokenAmount: isSet(object.uiTokenAmount) + ? UiTokenAmount.fromJSON(object.uiTokenAmount) + : undefined, owner: isSet(object.owner) ? String(object.owner) : "", programId: isSet(object.programId) ? String(object.programId) : "", }; @@ -1589,26 +1905,34 @@ export const TokenBalance = { toJSON(message: TokenBalance): unknown { const obj: any = {}; - message.accountIndex !== undefined && (obj.accountIndex = Math.round(message.accountIndex)); + message.accountIndex !== undefined && + (obj.accountIndex = Math.round(message.accountIndex)); message.mint !== undefined && (obj.mint = message.mint); message.uiTokenAmount !== undefined && - (obj.uiTokenAmount = message.uiTokenAmount ? UiTokenAmount.toJSON(message.uiTokenAmount) : undefined); + (obj.uiTokenAmount = message.uiTokenAmount + ? UiTokenAmount.toJSON(message.uiTokenAmount) + : undefined); message.owner !== undefined && (obj.owner = message.owner); message.programId !== undefined && (obj.programId = message.programId); return obj; }, - create, I>>(base?: I): TokenBalance { + create, I>>( + base?: I + ): TokenBalance { return TokenBalance.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): TokenBalance { + fromPartial, I>>( + object: I + ): TokenBalance { const message = createBaseTokenBalance(); message.accountIndex = object.accountIndex ?? 0; message.mint = object.mint ?? ""; - message.uiTokenAmount = (object.uiTokenAmount !== undefined && object.uiTokenAmount !== null) - ? UiTokenAmount.fromPartial(object.uiTokenAmount) - : undefined; + message.uiTokenAmount = + object.uiTokenAmount !== undefined && object.uiTokenAmount !== null + ? UiTokenAmount.fromPartial(object.uiTokenAmount) + : undefined; message.owner = object.owner ?? ""; message.programId = object.programId ?? ""; return message; @@ -1620,7 +1944,10 @@ function createBaseUiTokenAmount(): UiTokenAmount { } export const UiTokenAmount = { - encode(message: UiTokenAmount, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: UiTokenAmount, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.uiAmount !== 0) { writer.uint32(9).double(message.uiAmount); } @@ -1637,7 +1964,8 @@ export const UiTokenAmount = { }, decode(input: _m0.Reader | Uint8Array, length?: number): UiTokenAmount { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseUiTokenAmount(); while (reader.pos < end) { @@ -1685,24 +2013,32 @@ export const UiTokenAmount = { uiAmount: isSet(object.uiAmount) ? Number(object.uiAmount) : 0, decimals: isSet(object.decimals) ? Number(object.decimals) : 0, amount: isSet(object.amount) ? String(object.amount) : "", - uiAmountString: isSet(object.uiAmountString) ? String(object.uiAmountString) : "", + uiAmountString: isSet(object.uiAmountString) + ? String(object.uiAmountString) + : "", }; }, toJSON(message: UiTokenAmount): unknown { const obj: any = {}; message.uiAmount !== undefined && (obj.uiAmount = message.uiAmount); - message.decimals !== undefined && (obj.decimals = Math.round(message.decimals)); + message.decimals !== undefined && + (obj.decimals = Math.round(message.decimals)); message.amount !== undefined && (obj.amount = message.amount); - message.uiAmountString !== undefined && (obj.uiAmountString = message.uiAmountString); + message.uiAmountString !== undefined && + (obj.uiAmountString = message.uiAmountString); return obj; }, - create, I>>(base?: I): UiTokenAmount { + create, I>>( + base?: I + ): UiTokenAmount { return UiTokenAmount.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): UiTokenAmount { + fromPartial, I>>( + object: I + ): UiTokenAmount { const message = createBaseUiTokenAmount(); message.uiAmount = object.uiAmount ?? 0; message.decimals = object.decimals ?? 0; @@ -1717,7 +2053,10 @@ function createBaseReturnData(): ReturnData { } export const ReturnData = { - encode(message: ReturnData, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: ReturnData, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.programId.length !== 0) { writer.uint32(10).bytes(message.programId); } @@ -1728,7 +2067,8 @@ export const ReturnData = { }, decode(input: _m0.Reader | Uint8Array, length?: number): ReturnData { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseReturnData(); while (reader.pos < end) { @@ -1759,17 +2099,25 @@ export const ReturnData = { fromJSON(object: any): ReturnData { return { - programId: isSet(object.programId) ? bytesFromBase64(object.programId) : new Uint8Array(0), - data: isSet(object.data) ? bytesFromBase64(object.data) : new Uint8Array(0), + programId: isSet(object.programId) + ? bytesFromBase64(object.programId) + : new Uint8Array(0), + data: isSet(object.data) + ? bytesFromBase64(object.data) + : new Uint8Array(0), }; }, toJSON(message: ReturnData): unknown { const obj: any = {}; message.programId !== undefined && - (obj.programId = base64FromBytes(message.programId !== undefined ? message.programId : new Uint8Array(0))); + (obj.programId = base64FromBytes( + message.programId !== undefined ? message.programId : new Uint8Array(0) + )); message.data !== undefined && - (obj.data = base64FromBytes(message.data !== undefined ? message.data : new Uint8Array(0))); + (obj.data = base64FromBytes( + message.data !== undefined ? message.data : new Uint8Array(0) + )); return obj; }, @@ -1777,7 +2125,9 @@ export const ReturnData = { return ReturnData.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): ReturnData { + fromPartial, I>>( + object: I + ): ReturnData { const message = createBaseReturnData(); message.programId = object.programId ?? new Uint8Array(0); message.data = object.data ?? new Uint8Array(0); @@ -1786,11 +2136,20 @@ export const ReturnData = { }; function createBaseReward(): Reward { - return { pubkey: "", lamports: "0", postBalance: "0", rewardType: 0, commission: "" }; + return { + pubkey: "", + lamports: "0", + postBalance: "0", + rewardType: 0, + commission: "", + }; } export const Reward = { - encode(message: Reward, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: Reward, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.pubkey !== "") { writer.uint32(10).string(message.pubkey); } @@ -1810,7 +2169,8 @@ export const Reward = { }, decode(input: _m0.Reader | Uint8Array, length?: number): Reward { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseReward(); while (reader.pos < end) { @@ -1865,7 +2225,9 @@ export const Reward = { pubkey: isSet(object.pubkey) ? String(object.pubkey) : "", lamports: isSet(object.lamports) ? String(object.lamports) : "0", postBalance: isSet(object.postBalance) ? String(object.postBalance) : "0", - rewardType: isSet(object.rewardType) ? rewardTypeFromJSON(object.rewardType) : 0, + rewardType: isSet(object.rewardType) + ? rewardTypeFromJSON(object.rewardType) + : 0, commission: isSet(object.commission) ? String(object.commission) : "", }; }, @@ -1874,8 +2236,10 @@ export const Reward = { const obj: any = {}; message.pubkey !== undefined && (obj.pubkey = message.pubkey); message.lamports !== undefined && (obj.lamports = message.lamports); - message.postBalance !== undefined && (obj.postBalance = message.postBalance); - message.rewardType !== undefined && (obj.rewardType = rewardTypeToJSON(message.rewardType)); + message.postBalance !== undefined && + (obj.postBalance = message.postBalance); + message.rewardType !== undefined && + (obj.rewardType = rewardTypeToJSON(message.rewardType)); message.commission !== undefined && (obj.commission = message.commission); return obj; }, @@ -1900,7 +2264,10 @@ function createBaseRewards(): Rewards { } export const Rewards = { - encode(message: Rewards, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: Rewards, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { for (const v of message.rewards) { Reward.encode(v!, writer.uint32(10).fork()).ldelim(); } @@ -1908,7 +2275,8 @@ export const Rewards = { }, decode(input: _m0.Reader | Uint8Array, length?: number): Rewards { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseRewards(); while (reader.pos < end) { @@ -1931,13 +2299,19 @@ export const Rewards = { }, fromJSON(object: any): Rewards { - return { rewards: Array.isArray(object?.rewards) ? object.rewards.map((e: any) => Reward.fromJSON(e)) : [] }; + return { + rewards: Array.isArray(object?.rewards) + ? object.rewards.map((e: any) => Reward.fromJSON(e)) + : [], + }; }, toJSON(message: Rewards): unknown { const obj: any = {}; if (message.rewards) { - obj.rewards = message.rewards.map((e) => e ? Reward.toJSON(e) : undefined); + obj.rewards = message.rewards.map((e) => + e ? Reward.toJSON(e) : undefined + ); } else { obj.rewards = []; } @@ -1960,7 +2334,10 @@ function createBaseUnixTimestamp(): UnixTimestamp { } export const UnixTimestamp = { - encode(message: UnixTimestamp, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: UnixTimestamp, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.timestamp !== "0") { writer.uint32(8).int64(message.timestamp); } @@ -1968,7 +2345,8 @@ export const UnixTimestamp = { }, decode(input: _m0.Reader | Uint8Array, length?: number): UnixTimestamp { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseUnixTimestamp(); while (reader.pos < end) { @@ -1991,7 +2369,9 @@ export const UnixTimestamp = { }, fromJSON(object: any): UnixTimestamp { - return { timestamp: isSet(object.timestamp) ? String(object.timestamp) : "0" }; + return { + timestamp: isSet(object.timestamp) ? String(object.timestamp) : "0", + }; }, toJSON(message: UnixTimestamp): unknown { @@ -2000,11 +2380,15 @@ export const UnixTimestamp = { return obj; }, - create, I>>(base?: I): UnixTimestamp { + create, I>>( + base?: I + ): UnixTimestamp { return UnixTimestamp.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): UnixTimestamp { + fromPartial, I>>( + object: I + ): UnixTimestamp { const message = createBaseUnixTimestamp(); message.timestamp = object.timestamp ?? "0"; return message; @@ -2016,7 +2400,10 @@ function createBaseBlockHeight(): BlockHeight { } export const BlockHeight = { - encode(message: BlockHeight, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode( + message: BlockHeight, + writer: _m0.Writer = _m0.Writer.create() + ): _m0.Writer { if (message.blockHeight !== "0") { writer.uint32(8).uint64(message.blockHeight); } @@ -2024,7 +2411,8 @@ export const BlockHeight = { }, decode(input: _m0.Reader | Uint8Array, length?: number): BlockHeight { - const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseBlockHeight(); while (reader.pos < end) { @@ -2047,12 +2435,15 @@ export const BlockHeight = { }, fromJSON(object: any): BlockHeight { - return { blockHeight: isSet(object.blockHeight) ? String(object.blockHeight) : "0" }; + return { + blockHeight: isSet(object.blockHeight) ? String(object.blockHeight) : "0", + }; }, toJSON(message: BlockHeight): unknown { const obj: any = {}; - message.blockHeight !== undefined && (obj.blockHeight = message.blockHeight); + message.blockHeight !== undefined && + (obj.blockHeight = message.blockHeight); return obj; }, @@ -2060,7 +2451,9 @@ export const BlockHeight = { return BlockHeight.fromPartial(base ?? {}); }, - fromPartial, I>>(object: I): BlockHeight { + fromPartial, I>>( + object: I + ): BlockHeight { const message = createBaseBlockHeight(); message.blockHeight = object.blockHeight ?? "0"; return message; @@ -2111,16 +2504,31 @@ function base64FromBytes(arr: Uint8Array): string { } } -type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; - -export type DeepPartial = T extends Builtin ? T - : T extends Array ? Array> : T extends ReadonlyArray ? ReadonlyArray> - : T extends {} ? { [K in keyof T]?: DeepPartial } +type Builtin = + | Date + | Function + | Uint8Array + | string + | number + | boolean + | undefined; + +export type DeepPartial = T extends Builtin + ? T + : T extends Array + ? Array> + : T extends ReadonlyArray + ? ReadonlyArray> + : T extends {} + ? { [K in keyof T]?: DeepPartial } : Partial; type KeysOfUnion = T extends T ? keyof T : never; -export type Exact = P extends Builtin ? P - : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never }; +export type Exact = P extends Builtin + ? P + : P & { [K in keyof P]: Exact } & { + [K in Exclude>]: never; + }; function longToString(long: Long) { return long.toString(); diff --git a/yellowstone-grpc-client-nodejs/src/index.ts b/yellowstone-grpc-client-nodejs/src/index.ts index 7c9610c0..a13b66ea 100644 --- a/yellowstone-grpc-client-nodejs/src/index.ts +++ b/yellowstone-grpc-client-nodejs/src/index.ts @@ -92,6 +92,7 @@ export default class Client { accounts: { [key: string]: SubscribeRequestFilterAccounts }, slots: { [key: string]: SubscribeRequestFilterSlots }, transactions: { [key: string]: SubscribeRequestFilterTransactions }, + transactionsStatus: { [key: string]: SubscribeRequestFilterTransactions }, entry: { [key: string]: SubscribeRequestFilterEntry }, blocks: { [key: string]: SubscribeRequestFilterBlocks }, blocksMeta: { [key: string]: SubscribeRequestFilterBlocksMeta }, @@ -106,6 +107,7 @@ export default class Client { accounts, slots, transactions, + transactionsStatus, entry, blocks, blocksMeta, diff --git a/yellowstone-grpc-geyser/config.json b/yellowstone-grpc-geyser/config.json index 72922a49..2ab1d557 100644 --- a/yellowstone-grpc-geyser/config.json +++ b/yellowstone-grpc-geyser/config.json @@ -35,6 +35,14 @@ "account_exclude_max": 10, "account_required_max": 10 }, + "transactions_status": { + "max": 1, + "any": false, + "account_include_max": 10, + "account_include_reject": ["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"], + "account_exclude_max": 10, + "account_required_max": 10 + }, "blocks": { "max": 1, "account_include_max": 10, diff --git a/yellowstone-grpc-geyser/src/config.rs b/yellowstone-grpc-geyser/src/config.rs index 1d69a240..2ff31155 100644 --- a/yellowstone-grpc-geyser/src/config.rs +++ b/yellowstone-grpc-geyser/src/config.rs @@ -20,6 +20,9 @@ pub struct Config { /// Action on block re-construction error #[serde(default)] pub block_fail_action: ConfigBlockFailAction, + /// Collect client filters, processed slot and make it available on prometheus port `/debug_clients` + #[serde(default)] + pub debug_clients_http: bool, } impl Config { @@ -138,6 +141,7 @@ pub struct ConfigGrpcFilters { pub accounts: ConfigGrpcFiltersAccounts, pub slots: ConfigGrpcFiltersSlots, pub transactions: ConfigGrpcFiltersTransactions, + pub transactions_status: ConfigGrpcFiltersTransactions, pub blocks: ConfigGrpcFiltersBlocks, pub blocks_meta: ConfigGrpcFiltersBlocksMeta, pub entry: ConfigGrpcFiltersEntry, diff --git a/yellowstone-grpc-geyser/src/filters.rs b/yellowstone-grpc-geyser/src/filters.rs index d0a41fce..04425e5b 100644 --- a/yellowstone-grpc-geyser/src/filters.rs +++ b/yellowstone-grpc-geyser/src/filters.rs @@ -33,6 +33,7 @@ pub struct Filter { accounts: FilterAccounts, slots: FilterSlots, transactions: FilterTransactions, + transactions_status: FilterTransactions, entry: FilterEntry, blocks: FilterBlocks, blocks_meta: FilterBlocksMeta, @@ -46,7 +47,16 @@ impl Filter { Ok(Self { accounts: FilterAccounts::new(&config.accounts, &limit.accounts)?, slots: FilterSlots::new(&config.slots, &limit.slots)?, - transactions: FilterTransactions::new(&config.transactions, &limit.transactions)?, + transactions: FilterTransactions::new( + &config.transactions, + &limit.transactions, + FilterTransactionsType::Transaction, + )?, + transactions_status: FilterTransactions::new( + &config.transactions_status, + &limit.transactions_status, + FilterTransactionsType::TransactionStatus, + )?, entry: FilterEntry::new(&config.entry, &limit.entry)?, blocks: FilterBlocks::new(&config.blocks, &limit.blocks)?, blocks_meta: FilterBlocksMeta::new(&config.blocks_meta, &limit.blocks_meta)?, @@ -91,38 +101,42 @@ impl Filter { } pub fn get_filters<'a>( - &self, + &'a self, message: &'a Message, commitment: Option, - ) -> Vec<(Vec, MessageRef<'a>)> { + ) -> Box, MessageRef<'a>)> + Send + 'a> { match message { Message::Account(message) => self.accounts.get_filters(message), Message::Slot(message) => self.slots.get_filters(message, commitment), - Message::Transaction(message) => self.transactions.get_filters(message), + Message::Transaction(message) => Box::new( + self.transactions + .get_filters(message) + .chain(self.transactions_status.get_filters(message)), + ), Message::Entry(message) => self.entry.get_filters(message), Message::Block(message) => self.blocks.get_filters(message), Message::BlockMeta(message) => self.blocks_meta.get_filters(message), } } - pub fn get_update( - &self, - message: &Message, + pub fn get_update<'a>( + &'a self, + message: &'a Message, commitment: Option, - ) -> Vec { - self.get_filters(message, commitment) - .into_iter() - .filter_map(|(filters, message)| { - if filters.is_empty() { - None - } else { - Some(SubscribeUpdate { - filters, - update_oneof: Some(message.to_proto(&self.accounts_data_slice)), - }) - } - }) - .collect() + ) -> Box + Send + 'a> { + Box::new( + self.get_filters(message, commitment) + .filter_map(|(filters, message)| { + if filters.is_empty() { + None + } else { + Some(SubscribeUpdate { + filters, + update_oneof: Some(message.to_proto(&self.accounts_data_slice)), + }) + } + }), + ) } pub fn get_pong_msg(&self) -> Option { @@ -197,12 +211,18 @@ impl FilterAccounts { Ok(required) } - fn get_filters<'a>(&self, message: &'a MessageAccount) -> Vec<(Vec, MessageRef<'a>)> { + fn get_filters<'a>( + &'a self, + message: &'a MessageAccount, + ) -> Box, MessageRef<'a>)> + Send + 'a> { let mut filter = FilterAccountsMatch::new(self); filter.match_account(&message.account.pubkey); filter.match_owner(&message.account.owner); filter.match_data(&message.account.data); - vec![(filter.get_filters(), MessageRef::Account(message))] + Box::new(std::iter::once(( + filter.get_filters(), + MessageRef::Account(message), + ))) } } @@ -391,11 +411,11 @@ impl FilterSlots { } fn get_filters<'a>( - &self, + &'a self, message: &'a MessageSlot, commitment: Option, - ) -> Vec<(Vec, MessageRef<'a>)> { - vec![( + ) -> Box, MessageRef<'a>)> + Send + 'a> { + Box::new(std::iter::once(( self.filters .iter() .filter_map(|(name, inner)| { @@ -407,10 +427,16 @@ impl FilterSlots { }) .collect(), MessageRef::Slot(message), - )] + ))) } } +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum FilterTransactionsType { + Transaction, + TransactionStatus, +} + #[derive(Debug, Clone)] pub struct FilterTransactionsInner { vote: Option, @@ -421,8 +447,9 @@ pub struct FilterTransactionsInner { account_required: Vec, } -#[derive(Debug, Default, Clone)] +#[derive(Debug, Clone)] pub struct FilterTransactions { + filter_type: FilterTransactionsType, filters: HashMap, } @@ -430,10 +457,11 @@ impl FilterTransactions { fn new( configs: &HashMap, limit: &ConfigGrpcFiltersTransactions, + filter_type: FilterTransactionsType, ) -> anyhow::Result { ConfigGrpcFilters::check_max(configs.len(), limit.max)?; - let mut this = Self::default(); + let mut filters = HashMap::new(); for (name, filter) in configs { ConfigGrpcFilters::check_any( filter.vote.is_none() @@ -456,7 +484,7 @@ impl FilterTransactions { limit.account_required_max, )?; - this.filters.insert( + filters.insert( name.clone(), FilterTransactionsInner { vote: filter.vote, @@ -485,13 +513,16 @@ impl FilterTransactions { }, ); } - Ok(this) + Ok(Self { + filter_type, + filters, + }) } pub fn get_filters<'a>( - &self, + &'a self, message: &'a MessageTransaction, - ) -> Vec<(Vec, MessageRef<'a>)> { + ) -> Box, MessageRef<'a>)> + Send + 'a> { let filters = self .filters .iter() @@ -565,7 +596,11 @@ impl FilterTransactions { Some(name.clone()) }) .collect(); - vec![(filters, MessageRef::Transaction(message))] + let message = match self.filter_type { + FilterTransactionsType::Transaction => MessageRef::Transaction(message), + FilterTransactionsType::TransactionStatus => MessageRef::TransactionStatus(message), + }; + Box::new(std::iter::once((filters, message))) } } @@ -590,8 +625,14 @@ impl FilterEntry { }) } - fn get_filters<'a>(&self, message: &'a MessageEntry) -> Vec<(Vec, MessageRef<'a>)> { - vec![(self.filters.clone(), MessageRef::Entry(message))] + fn get_filters<'a>( + &'a self, + message: &'a MessageEntry, + ) -> Box, MessageRef<'a>)> + Send + 'a> { + Box::new(std::iter::once(( + self.filters.clone(), + MessageRef::Entry(message), + ))) } } @@ -654,68 +695,68 @@ impl FilterBlocks { Ok(this) } - fn get_filters<'a>(&self, message: &'a MessageBlock) -> Vec<(Vec, MessageRef<'a>)> { - self.filters - .iter() - .map(|(filter, inner)| { - #[allow(clippy::unnecessary_filter_map)] - let transactions = - if matches!(inner.include_transactions, None | Some(true)) { - message - .transactions - .iter() - .filter_map(|tx| { - if !inner.account_include.is_empty() - && tx.transaction.message().account_keys().iter().all( - |pubkey| { - inner.account_include.binary_search(pubkey).is_err() - }, - ) - { - return None; - } - - Some(tx) - }) - .collect::>() - } else { - vec![] - }; + fn get_filters<'a>( + &'a self, + message: &'a MessageBlock, + ) -> Box, MessageRef<'a>)> + Send + 'a> { + Box::new(self.filters.iter().map(move |(filter, inner)| { + #[allow(clippy::unnecessary_filter_map)] + let transactions = if matches!(inner.include_transactions, None | Some(true)) { + message + .transactions + .iter() + .filter_map(|tx| { + if !inner.account_include.is_empty() + && tx + .transaction + .message() + .account_keys() + .iter() + .all(|pubkey| inner.account_include.binary_search(pubkey).is_err()) + { + return None; + } - #[allow(clippy::unnecessary_filter_map)] - let accounts = if inner.include_accounts == Some(true) { - message - .accounts - .iter() - .filter_map(|account| { - if !inner.account_include.is_empty() - && inner - .account_include - .binary_search(&account.pubkey) - .is_err() - { - return None; - } - - Some(account) - }) - .collect::>() - } else { - vec![] - }; - - let entries = if inner.include_entries == Some(true) { - message.entries.iter().collect::>() - } else { - vec![] - }; - - ( - vec![filter.clone()], - MessageRef::Block((message, transactions, accounts, entries).into()), - ) - }) - .collect() + Some(tx) + }) + .collect::>() + } else { + vec![] + }; + + #[allow(clippy::unnecessary_filter_map)] + let accounts = if inner.include_accounts == Some(true) { + message + .accounts + .iter() + .filter_map(|account| { + if !inner.account_include.is_empty() + && inner + .account_include + .binary_search(&account.pubkey) + .is_err() + { + return None; + } + + Some(account) + }) + .collect::>() + } else { + vec![] + }; + + let entries = if inner.include_entries == Some(true) { + message.entries.iter().collect::>() + } else { + vec![] + }; + + ( + vec![filter.clone()], + MessageRef::Block((message, transactions, accounts, entries).into()), + ) + })) } } @@ -740,8 +781,14 @@ impl FilterBlocksMeta { }) } - fn get_filters<'a>(&self, message: &'a MessageBlockMeta) -> Vec<(Vec, MessageRef<'a>)> { - vec![(self.filters.clone(), MessageRef::BlockMeta(message))] + fn get_filters<'a>( + &'a self, + message: &'a MessageBlockMeta, + ) -> Box, MessageRef<'a>)> + Send + 'a> { + Box::new(std::iter::once(( + self.filters.clone(), + MessageRef::BlockMeta(message), + ))) } } @@ -788,7 +835,7 @@ mod tests { crate::{ config::ConfigGrpcFilters, filters::Filter, - grpc::{Message, MessageTransaction, MessageTransactionInfo}, + grpc::{Message, MessageRef, MessageTransaction, MessageTransactionInfo}, }, solana_sdk::{ hash::Hash, @@ -855,6 +902,7 @@ mod tests { accounts: HashMap::new(), slots: HashMap::new(), transactions: HashMap::new(), + transactions_status: HashMap::new(), blocks: HashMap::new(), blocks_meta: HashMap::new(), entry: HashMap::new(), @@ -884,6 +932,7 @@ mod tests { accounts, slots: HashMap::new(), transactions: HashMap::new(), + transactions_status: HashMap::new(), blocks: HashMap::new(), blocks_meta: HashMap::new(), entry: HashMap::new(), @@ -918,6 +967,7 @@ mod tests { accounts: HashMap::new(), slots: HashMap::new(), transactions, + transactions_status: HashMap::new(), blocks: HashMap::new(), blocks_meta: HashMap::new(), entry: HashMap::new(), @@ -951,6 +1001,7 @@ mod tests { accounts: HashMap::new(), slots: HashMap::new(), transactions, + transactions_status: HashMap::new(), blocks: HashMap::new(), blocks_meta: HashMap::new(), entry: HashMap::new(), @@ -990,6 +1041,7 @@ mod tests { accounts: HashMap::new(), slots: HashMap::new(), transactions, + transactions_status: HashMap::new(), blocks: HashMap::new(), blocks_meta: HashMap::new(), entry: HashMap::new(), @@ -1003,9 +1055,12 @@ mod tests { let message_transaction = create_message_transaction(&keypair_b, vec![account_key_b, account_key_a]); let message = Message::Transaction(message_transaction); - for (filters, _message) in filter.get_filters(&message, None) { - assert!(!filters.is_empty()); - } + let updates = filter.get_filters(&message, None).collect::>(); + assert_eq!(updates.len(), 2); + assert_eq!(updates[0].0, vec!["serum"]); + assert!(matches!(updates[0].1, MessageRef::Transaction(_))); + assert_eq!(updates[1].0, Vec::::new()); + assert!(matches!(updates[1].1, MessageRef::TransactionStatus(_))); } #[test] @@ -1033,6 +1088,7 @@ mod tests { accounts: HashMap::new(), slots: HashMap::new(), transactions, + transactions_status: HashMap::new(), blocks: HashMap::new(), blocks_meta: HashMap::new(), entry: HashMap::new(), @@ -1046,9 +1102,12 @@ mod tests { let message_transaction = create_message_transaction(&keypair_b, vec![account_key_b, account_key_a]); let message = Message::Transaction(message_transaction); - for (filters, _message) in filter.get_filters(&message, None) { - assert!(!filters.is_empty()); - } + let updates = filter.get_filters(&message, None).collect::>(); + assert_eq!(updates.len(), 2); + assert_eq!(updates[0].0, vec!["serum"]); + assert!(matches!(updates[0].1, MessageRef::Transaction(_))); + assert_eq!(updates[1].0, Vec::::new()); + assert!(matches!(updates[1].1, MessageRef::TransactionStatus(_))); } #[test] @@ -1076,6 +1135,7 @@ mod tests { accounts: HashMap::new(), slots: HashMap::new(), transactions, + transactions_status: HashMap::new(), blocks: HashMap::new(), blocks_meta: HashMap::new(), entry: HashMap::new(), @@ -1125,6 +1185,7 @@ mod tests { accounts: HashMap::new(), slots: HashMap::new(), transactions, + transactions_status: HashMap::new(), blocks: HashMap::new(), blocks_meta: HashMap::new(), entry: HashMap::new(), @@ -1140,9 +1201,12 @@ mod tests { vec![account_key_x, account_key_y, account_key_z], ); let message = Message::Transaction(message_transaction); - for (filters, _message) in filter.get_filters(&message, None) { - assert!(!filters.is_empty()); - } + let updates = filter.get_filters(&message, None).collect::>(); + assert_eq!(updates.len(), 2); + assert_eq!(updates[0].0, vec!["serum"]); + assert!(matches!(updates[0].1, MessageRef::Transaction(_))); + assert_eq!(updates[1].0, Vec::::new()); + assert!(matches!(updates[1].1, MessageRef::TransactionStatus(_))); } #[test] @@ -1176,6 +1240,7 @@ mod tests { accounts: HashMap::new(), slots: HashMap::new(), transactions, + transactions_status: HashMap::new(), blocks: HashMap::new(), blocks_meta: HashMap::new(), entry: HashMap::new(), diff --git a/yellowstone-grpc-geyser/src/grpc.rs b/yellowstone-grpc-geyser/src/grpc.rs index 8eec85fa..cdbcea14 100644 --- a/yellowstone-grpc-geyser/src/grpc.rs +++ b/yellowstone-grpc-geyser/src/grpc.rs @@ -2,9 +2,10 @@ use { crate::{ config::{ConfigBlockFailAction, ConfigGrpc}, filters::{Filter, FilterAccountsDataSlice}, - prom::{self, CONNECTIONS_TOTAL, MESSAGE_QUEUE_SIZE}, + prom::{self, DebugClientMessage, CONNECTIONS_TOTAL, MESSAGE_QUEUE_SIZE}, version::GrpcVersionInfo, }, + anyhow::Context, log::{error, info}, solana_geyser_plugin_interface::geyser_plugin_interface::{ ReplicaAccountInfoV3, ReplicaBlockInfoV3, ReplicaEntryInfoV2, ReplicaTransactionInfoV2, @@ -51,6 +52,7 @@ use { SubscribeUpdateAccount, SubscribeUpdateAccountInfo, SubscribeUpdateBlock, SubscribeUpdateBlockMeta, SubscribeUpdateEntry, SubscribeUpdatePing, SubscribeUpdateSlot, SubscribeUpdateTransaction, SubscribeUpdateTransactionInfo, + SubscribeUpdateTransactionStatus, TransactionError as SubscribeUpdateTransactionError, }, }, }; @@ -396,6 +398,7 @@ pub enum MessageRef<'a> { Slot(&'a MessageSlot), Account(&'a MessageAccount), Transaction(&'a MessageTransaction), + TransactionStatus(&'a MessageTransaction), Entry(&'a MessageEntry), Block(MessageBlockRef<'a>), BlockMeta(&'a MessageBlockMeta), @@ -418,6 +421,21 @@ impl<'a> MessageRef<'a> { transaction: Some(message.transaction.to_proto()), slot: message.slot, }), + Self::TransactionStatus(message) => { + UpdateOneof::TransactionStatus(SubscribeUpdateTransactionStatus { + slot: message.slot, + signature: message.transaction.signature.as_ref().into(), + is_vote: message.transaction.is_vote, + index: message.transaction.index as u64, + err: match &message.transaction.meta.status { + Ok(()) => None, + Err(err) => Some(SubscribeUpdateTransactionError { + err: bincode::serialize(&err) + .expect("transaction error to serialize to bytes"), + }), + }, + }) + } Self::Entry(message) => UpdateOneof::Entry(message.to_proto()), Self::Block(message) => UpdateOneof::Block(SubscribeUpdateBlock { slot: message.slot, @@ -637,7 +655,7 @@ impl BlockMetaStorage { #[derive(Debug, Default)] struct SlotMessages { - messages: Vec>, // Option is used for accounts with low write_version + messages: Vec>>, // Option is used for accounts with low write_version block_meta: Option, transactions: Vec, accounts_dedup: HashMap, // (write_version, message_index) @@ -649,7 +667,7 @@ struct SlotMessages { } impl SlotMessages { - pub fn try_seal(&mut self) -> Option { + pub fn try_seal(&mut self) -> Option> { if !self.sealed { if let Some(block_meta) = &self.block_meta { let executed_transaction_count = block_meta.executed_transaction_count as usize; @@ -668,15 +686,15 @@ impl SlotMessages { let mut accounts = Vec::with_capacity(self.messages.len()); for item in self.messages.iter().flatten() { - if let Message::Account(account) = item { + if let Message::Account(account) = item.as_ref() { accounts.push(account.account.clone()); } } - let message = Message::Block( + let message = Arc::new(Message::Block( (block_meta.clone(), transactions, accounts, entries).into(), - ); - self.messages.push(Some(message.clone())); + )); + self.messages.push(Some(Arc::clone(&message))); self.sealed = true; self.entries_count = entries_count; @@ -695,7 +713,8 @@ pub struct GrpcService { blocks_meta: Option, subscribe_id: AtomicUsize, snapshot_rx: Mutex>>>, - broadcast_tx: broadcast::Sender<(CommitmentLevel, Arc>)>, + broadcast_tx: broadcast::Sender<(CommitmentLevel, Arc>>)>, + debug_clients_tx: Option>, } impl GrpcService { @@ -703,21 +722,20 @@ impl GrpcService { pub async fn create( config: ConfigGrpc, block_fail_action: ConfigBlockFailAction, + debug_clients_tx: Option>, is_reload: bool, - ) -> Result< - ( - Option>>, - mpsc::UnboundedSender, - Arc, - ), - Box, - > { + ) -> anyhow::Result<( + Option>>, + mpsc::UnboundedSender>, + Arc, + )> { // Bind service address let incoming = TcpIncoming::new( config.address, true, // tcp_nodelay Some(Duration::from_secs(20)), // tcp_keepalive - )?; + ) + .map_err(|error| anyhow::anyhow!(error))?; // Snapshot channel let (snapshot_tx, snapshot_rx) = match config.snapshot_plugin_channel_capacity { @@ -746,9 +764,11 @@ impl GrpcService { let (cert, key) = tokio::try_join!( fs::read(&tls_config.cert_path), fs::read(&tls_config.key_path) - )?; + ) + .context("failed to load tls_config files")?; server_builder = server_builder - .tls_config(ServerTlsConfig::new().identity(Identity::from_pem(cert, key)))?; + .tls_config(ServerTlsConfig::new().identity(Identity::from_pem(cert, key))) + .context("failed to apply tls_config")?; } // Create Server @@ -759,6 +779,7 @@ impl GrpcService { subscribe_id: AtomicUsize::new(0), snapshot_rx: Mutex::new(snapshot_rx), broadcast_tx: broadcast_tx.clone(), + debug_clients_tx, }) .accept_compressed(CompressionEncoding::Gzip) .send_compressed(CompressionEncoding::Gzip) @@ -766,12 +787,12 @@ impl GrpcService { // Run geyser message loop let (messages_tx, messages_rx) = mpsc::unbounded_channel(); - tokio::spawn(Self::geyser_loop( + tokio::spawn(tokio::task::unconstrained(Self::geyser_loop( messages_rx, blocks_meta_tx, broadcast_tx, block_fail_action, - )); + ))); // Run Server let shutdown = Arc::new(Notify::new()); @@ -793,9 +814,9 @@ impl GrpcService { } async fn geyser_loop( - mut messages_rx: mpsc::UnboundedReceiver, + mut messages_rx: mpsc::UnboundedReceiver>, blocks_meta_tx: Option>, - broadcast_tx: broadcast::Sender<(CommitmentLevel, Arc>)>, + broadcast_tx: broadcast::Sender<(CommitmentLevel, Arc>>)>, block_fail_action: ConfigBlockFailAction, ) { const PROCESSED_MESSAGES_MAX: usize = 31; @@ -812,15 +833,20 @@ impl GrpcService { Some(message) = messages_rx.recv() => { MESSAGE_QUEUE_SIZE.dec(); + // Update metrics + if let Message::Slot(slot_message) = message.as_ref() { + prom::update_slot_plugin_status(slot_message.status, slot_message.slot); + } + // Update blocks info if let Some(blocks_meta_tx) = &blocks_meta_tx { - if matches!(message, Message::Slot(_) | Message::BlockMeta(_)) { - let _ = blocks_meta_tx.send(message.clone()); + if matches!(message.as_ref(), Message::Slot(_) | Message::BlockMeta(_)) { + let _ = blocks_meta_tx.send(message.as_ref().clone()); } } // Remove outdated block reconstruction info - match &message { + match message.as_ref() { // On startup we can receive few Confirmed/Finalized slots without BlockMeta message // With saved first Processed slot we can ignore errors caused by startup process Message::Slot(msg) if processed_first_slot.is_none() && msg.status == CommitmentLevel::Processed => { @@ -881,11 +907,11 @@ impl GrpcService { // Update block reconstruction info let slot_messages = messages.entry(message.get_slot()).or_default(); - if !matches!(message, Message::Slot(_)) { - slot_messages.messages.push(Some(message.clone())); + if !matches!(message.as_ref(), Message::Slot(_)) { + slot_messages.messages.push(Some(Arc::clone(&message))); // If we already build Block message, new message will be a problem - if slot_messages.sealed && !(matches!(message, Message::Entry(_)) && slot_messages.entries_count == 0) { + if slot_messages.sealed && !(matches!(message.as_ref(), Message::Entry(_)) && slot_messages.entries_count == 0) { prom::update_invalid_blocks(format!("unexpected message {}", message.kind())); match block_fail_action { ConfigBlockFailAction::Log => { @@ -898,7 +924,7 @@ impl GrpcService { } } let mut sealed_block_msg = None; - match &message { + match message.as_ref() { Message::BlockMeta(msg) => { if slot_messages.block_meta.is_some() { prom::update_invalid_blocks("unexpected message: BlockMeta (duplicate)"); @@ -946,7 +972,7 @@ impl GrpcService { } for message in messages_vec { - if let Message::Slot(slot) = message { + if let Message::Slot(slot) = message.as_ref() { let (mut confirmed_messages, mut finalized_messages) = match slot.status { CommitmentLevel::Processed => { (Vec::with_capacity(1), Vec::with_capacity(1)) @@ -980,7 +1006,7 @@ impl GrpcService { }; // processed - processed_messages.push(message.clone()); + processed_messages.push(Arc::clone(&message)); let _ = broadcast_tx.send((CommitmentLevel::Processed, processed_messages.into())); processed_messages = Vec::with_capacity(PROCESSED_MESSAGES_MAX); @@ -989,7 +1015,7 @@ impl GrpcService { .reset(Instant::now() + PROCESSED_MESSAGES_SLEEP); // confirmed - confirmed_messages.push(message.clone()); + confirmed_messages.push(Arc::clone(&message)); let _ = broadcast_tx.send((CommitmentLevel::Confirmed, confirmed_messages.into())); @@ -1000,7 +1026,7 @@ impl GrpcService { } else { let mut confirmed_messages = vec![]; let mut finalized_messages = vec![]; - if matches!(message, Message::Block(_)) { + if matches!(message.as_ref(), Message::Block(_)) { if let Some(slot_messages) = messages.get(&message.get_slot()) { if let Some(confirmed_at) = slot_messages.confirmed_at { confirmed_messages.extend( @@ -1052,16 +1078,22 @@ impl GrpcService { } } + #[allow(clippy::too_many_arguments)] async fn client_loop( id: usize, mut filter: Filter, stream_tx: mpsc::Sender>, mut client_rx: mpsc::UnboundedReceiver>, mut snapshot_rx: Option>>, - mut messages_rx: broadcast::Receiver<(CommitmentLevel, Arc>)>, + mut messages_rx: broadcast::Receiver<(CommitmentLevel, Arc>>)>, + debug_client_tx: Option>, drop_client: impl FnOnce(), ) { CONNECTIONS_TOTAL.inc(); + DebugClientMessage::maybe_send(&debug_client_tx, || DebugClientMessage::UpdateFilter { + id, + filter: Box::new(filter.clone()), + }); info!("client #{id}: new"); let mut is_alive = true; @@ -1138,6 +1170,7 @@ impl GrpcService { } filter = filter_new; + DebugClientMessage::maybe_send(&debug_client_tx, || DebugClientMessage::UpdateFilter { id, filter: Box::new(filter.clone()) }); info!("client #{id}: filter updated"); } Some(None) => { @@ -1183,13 +1216,22 @@ impl GrpcService { } } } + + if commitment == CommitmentLevel::Processed && debug_client_tx.is_some() { + for message in messages.iter() { + if let Message::Slot(slot_message) = message.as_ref() { + DebugClientMessage::maybe_send(&debug_client_tx, || DebugClientMessage::UpdateSlot { id, slot: slot_message.slot }); + } + } + } } } } } - info!("client #{id}: removed"); CONNECTIONS_TOTAL.dec(); + DebugClientMessage::maybe_send(&debug_client_tx, || DebugClientMessage::Removed { id }); + info!("client #{id}: removed"); drop_client(); } } @@ -1208,6 +1250,7 @@ impl Geyser for GrpcService { accounts: HashMap::new(), slots: HashMap::new(), transactions: HashMap::new(), + transactions_status: HashMap::new(), blocks: HashMap::new(), blocks_meta: HashMap::new(), entry: HashMap::new(), @@ -1308,6 +1351,7 @@ impl Geyser for GrpcService { client_rx, snapshot_rx, self.broadcast_tx.subscribe(), + self.debug_clients_tx.clone(), move || { notify_exit1.notify_one(); notify_exit2.notify_one(); diff --git a/yellowstone-grpc-geyser/src/plugin.rs b/yellowstone-grpc-geyser/src/plugin.rs index 0947580a..362d7ffc 100644 --- a/yellowstone-grpc-geyser/src/plugin.rs +++ b/yellowstone-grpc-geyser/src/plugin.rs @@ -27,14 +27,14 @@ use { pub struct PluginInner { runtime: Runtime, snapshot_channel: Option>>, - grpc_channel: mpsc::UnboundedSender, + grpc_channel: mpsc::UnboundedSender>, grpc_shutdown: Arc, prometheus: PrometheusService, } impl PluginInner { fn send_message(&self, message: Message) { - if self.grpc_channel.send(message).is_ok() { + if self.grpc_channel.send(Arc::new(message)).is_ok() { MESSAGE_QUEUE_SIZE.inc(); } } @@ -79,12 +79,20 @@ impl GeyserPlugin for Plugin { let (snapshot_channel, grpc_channel, grpc_shutdown, prometheus) = runtime.block_on(async move { - let (snapshot_channel, grpc_channel, grpc_shutdown) = - GrpcService::create(config.grpc, config.block_fail_action, is_reload) - .await - .map_err(GeyserPluginError::Custom)?; - let prometheus = PrometheusService::new(config.prometheus) - .map_err(|error| GeyserPluginError::Custom(Box::new(error)))?; + let (debug_client_tx, debug_client_rx) = mpsc::unbounded_channel(); + let (snapshot_channel, grpc_channel, grpc_shutdown) = GrpcService::create( + config.grpc, + config.block_fail_action, + config.debug_clients_http.then_some(debug_client_tx), + is_reload, + ) + .await + .map_err(|error| GeyserPluginError::Custom(format!("{error:?}").into()))?; + let prometheus = PrometheusService::new( + config.prometheus, + config.debug_clients_http.then_some(debug_client_rx), + ) + .map_err(|error| GeyserPluginError::Custom(Box::new(error)))?; Ok::<_, GeyserPluginError>(( snapshot_channel, grpc_channel, diff --git a/yellowstone-grpc-geyser/src/prom.rs b/yellowstone-grpc-geyser/src/prom.rs index ee55766a..aed2158b 100644 --- a/yellowstone-grpc-geyser/src/prom.rs +++ b/yellowstone-grpc-geyser/src/prom.rs @@ -1,5 +1,5 @@ use { - crate::{config::ConfigPrometheus, version::VERSION as VERSION_INFO}, + crate::{config::ConfigPrometheus, filters::Filter, version::VERSION as VERSION_INFO}, futures::future::FutureExt, hyper::{ server::conn::AddrStream, @@ -9,8 +9,16 @@ use { log::error, prometheus::{IntCounterVec, IntGauge, IntGaugeVec, Opts, Registry, TextEncoder}, solana_geyser_plugin_interface::geyser_plugin_interface::SlotStatus, - std::sync::Once, - tokio::sync::oneshot, + solana_sdk::clock::Slot, + std::{ + collections::{hash_map::Entry as HashMapEntry, HashMap}, + sync::{Arc, Once}, + }, + tokio::{ + sync::{mpsc, oneshot}, + task::JoinHandle, + }, + yellowstone_grpc_proto::prelude::CommitmentLevel, }; lazy_static::lazy_static! { @@ -22,7 +30,12 @@ lazy_static::lazy_static! { ).unwrap(); pub static ref SLOT_STATUS: IntGaugeVec = IntGaugeVec::new( - Opts::new("slot_status", "Last processed slot by plugin"), + Opts::new("slot_status", "Lastest received slot from Geyser"), + &["status"] + ).unwrap(); + + pub static ref SLOT_STATUS_PLUGIN: IntGaugeVec = IntGaugeVec::new( + Opts::new("slot_status_plugin", "Latest processed slot in the plugin to client queues"), &["status"] ).unwrap(); @@ -40,13 +53,119 @@ lazy_static::lazy_static! { ).unwrap(); } +#[derive(Debug)] +pub enum DebugClientMessage { + UpdateFilter { id: usize, filter: Box }, + UpdateSlot { id: usize, slot: Slot }, + Removed { id: usize }, +} + +impl DebugClientMessage { + pub fn maybe_send(tx: &Option>, get_msg: impl FnOnce() -> Self) { + if let Some(tx) = tx { + let _ = tx.send(get_msg()); + } + } +} + +#[derive(Debug)] +struct DebugClientStatus { + filter: Box, + processed_slot: Slot, +} + +#[derive(Debug)] +struct DebugClientStatuses { + requests_tx: mpsc::UnboundedSender>, + jh: JoinHandle<()>, +} + +impl Drop for DebugClientStatuses { + fn drop(&mut self) { + self.jh.abort(); + } +} + +impl DebugClientStatuses { + fn new(clients_rx: mpsc::UnboundedReceiver) -> Arc { + let (requests_tx, requests_rx) = mpsc::unbounded_channel(); + let jh = tokio::spawn(Self::run(clients_rx, requests_rx)); + Arc::new(Self { requests_tx, jh }) + } + + async fn run( + mut clients_rx: mpsc::UnboundedReceiver, + mut requests_rx: mpsc::UnboundedReceiver>, + ) { + let mut clients = HashMap::::new(); + loop { + tokio::select! { + Some(message) = clients_rx.recv() => match message { + DebugClientMessage::UpdateFilter { id, filter } => { + match clients.entry(id) { + HashMapEntry::Occupied(mut entry) => { + entry.get_mut().filter = filter; + } + HashMapEntry::Vacant(entry) => { + entry.insert(DebugClientStatus { + filter, + processed_slot: 0, + }); + } + } + } + DebugClientMessage::UpdateSlot { id, slot } => { + if let Some(status) = clients.get_mut(&id) { + status.processed_slot = slot; + } + } + DebugClientMessage::Removed { id } => { + clients.remove(&id); + } + }, + Some(tx) = requests_rx.recv() => { + let mut statuses: Vec<(usize, String)> = clients.iter().map(|(id, status)| { + (*id, format!("client#{id:06}, {}, {:?}", status.processed_slot, status.filter)) + }).collect(); + statuses.sort(); + + let mut status = statuses.into_iter().fold(String::new(), |mut acc: String, (_id, status)| { + if !acc.is_empty() { + acc += "\n"; + } + acc + &status + }); + if !status.is_empty() { + status += "\n"; + } + + let _ = tx.send(status); + }, + } + } + } + + async fn get_statuses(&self) -> anyhow::Result { + let (tx, rx) = oneshot::channel(); + self.requests_tx + .send(tx) + .map_err(|_error| anyhow::anyhow!("failed to send request"))?; + rx.await + .map_err(|_error| anyhow::anyhow!("failed to wait response")) + } +} + #[derive(Debug)] pub struct PrometheusService { + debug_clients_statuses: Option>, shutdown_signal: oneshot::Sender<()>, } impl PrometheusService { - pub fn new(config: Option) -> hyper::Result { + pub fn new( + config: Option, + debug_clients_rx: Option>, + ) -> hyper::Result { static REGISTER: Once = Once::new(); REGISTER.call_once(|| { macro_rules! register { @@ -58,6 +177,7 @@ impl PrometheusService { } register!(VERSION); register!(SLOT_STATUS); + register!(SLOT_STATUS_PLUGIN); register!(INVALID_FULL_BLOCKS); register!(MESSAGE_QUEUE_SIZE); register!(CONNECTIONS_TOTAL); @@ -76,15 +196,42 @@ impl PrometheusService { }); let (shutdown_signal, shutdown) = oneshot::channel(); + let mut debug_clients_statuses = None; if let Some(ConfigPrometheus { address }) = config { - let make_service = make_service_fn(move |_: &AddrStream| async move { - Ok::<_, hyper::Error>(service_fn(move |req: Request| async move { - let response = match req.uri().path() { - "/metrics" => metrics_handler(), - _ => not_found_handler(), - }; - Ok::<_, hyper::Error>(response) - })) + if let Some(debug_clients_rx) = debug_clients_rx { + debug_clients_statuses = Some(DebugClientStatuses::new(debug_clients_rx)); + } + let debug_clients_statuses2 = debug_clients_statuses.clone(); + let make_service = make_service_fn(move |_: &AddrStream| { + let debug_clients_statuses = debug_clients_statuses2.clone(); + async move { + let debug_clients_statuses = debug_clients_statuses.clone(); + Ok::<_, hyper::Error>(service_fn(move |req: Request| { + let debug_clients_statuses = debug_clients_statuses.clone(); + async move { + let response = match req.uri().path() { + "/metrics" => metrics_handler(), + "/debug_clients" => { + if let Some(debug_clients_statuses) = &debug_clients_statuses { + let (status, body) = + match debug_clients_statuses.get_statuses().await { + Ok(body) => (StatusCode::OK, body), + Err(error) => ( + StatusCode::INTERNAL_SERVER_ERROR, + error.to_string(), + ), + }; + build_http_response(status, Body::from(body)) + } else { + not_found_handler() + } + } + _ => not_found_handler(), + }; + Ok::<_, hyper::Error>(response) + } + })) + } }); let server = Server::try_bind(&address)?.serve(make_service); let shutdown = shutdown.map(|_| Ok(())); @@ -95,14 +242,22 @@ impl PrometheusService { }); } - Ok(PrometheusService { shutdown_signal }) + Ok(PrometheusService { + debug_clients_statuses, + shutdown_signal, + }) } pub fn shutdown(self) { + drop(self.debug_clients_statuses); let _ = self.shutdown_signal.send(()); } } +fn build_http_response(status: StatusCode, body: Body) -> Response { + Response::builder().status(status).body(body).unwrap() +} + fn metrics_handler() -> Response { let metrics = TextEncoder::new() .encode_to_string(®ISTRY.gather()) @@ -110,14 +265,11 @@ fn metrics_handler() -> Response { error!("could not encode custom metrics: {}", error); String::new() }); - Response::builder().body(Body::from(metrics)).unwrap() + build_http_response(StatusCode::OK, Body::from(metrics)) } fn not_found_handler() -> Response { - Response::builder() - .status(StatusCode::NOT_FOUND) - .body(Body::empty()) - .unwrap() + build_http_response(StatusCode::NOT_FOUND, Body::empty()) } pub fn update_slot_status(status: SlotStatus, slot: u64) { @@ -130,6 +282,16 @@ pub fn update_slot_status(status: SlotStatus, slot: u64) { .set(slot as i64); } +pub fn update_slot_plugin_status(status: CommitmentLevel, slot: u64) { + SLOT_STATUS_PLUGIN + .with_label_values(&[match status { + CommitmentLevel::Processed => "processed", + CommitmentLevel::Confirmed => "confirmed", + CommitmentLevel::Finalized => "finalized", + }]) + .set(slot as i64); +} + pub fn update_invalid_blocks(reason: impl AsRef) { INVALID_FULL_BLOCKS .with_label_values(&[reason.as_ref()]) diff --git a/yellowstone-grpc-proto/proto/geyser.proto b/yellowstone-grpc-proto/proto/geyser.proto index 2250a13a..dbfdb220 100644 --- a/yellowstone-grpc-proto/proto/geyser.proto +++ b/yellowstone-grpc-proto/proto/geyser.proto @@ -26,6 +26,7 @@ message SubscribeRequest { map accounts = 1; map slots = 2; map transactions = 3; + map transactions_status = 10; map blocks = 4; map blocks_meta = 5; map entry = 8; @@ -96,6 +97,7 @@ message SubscribeUpdate { SubscribeUpdateAccount account = 2; SubscribeUpdateSlot slot = 3; SubscribeUpdateTransaction transaction = 4; + SubscribeUpdateTransactionStatus transaction_status = 10; SubscribeUpdateBlock block = 5; SubscribeUpdatePing ping = 6; SubscribeUpdatePong pong = 9; @@ -140,6 +142,14 @@ message SubscribeUpdateTransactionInfo { uint64 index = 5; } +message SubscribeUpdateTransactionStatus { + uint64 slot = 1; + bytes signature = 2; + bool is_vote = 3; + uint64 index = 4; + solana.storage.ConfirmedBlock.TransactionError err = 5; +} + message SubscribeUpdateBlock { uint64 slot = 1; string blockhash = 2; diff --git a/yellowstone-grpc-tools/src/bin/grpc-google-pubsub.rs b/yellowstone-grpc-tools/src/bin/grpc-google-pubsub.rs index ce8c3fad..c29538e1 100644 --- a/yellowstone-grpc-tools/src/bin/grpc-google-pubsub.rs +++ b/yellowstone-grpc-tools/src/bin/grpc-google-pubsub.rs @@ -274,6 +274,9 @@ impl ArgsAction { Some(UpdateOneof::Transaction(msg)) => { info!("#{}, transaction", msg.slot) } + Some(UpdateOneof::TransactionStatus(msg)) => { + info!("#{}, transaction status", msg.slot) + } Some(UpdateOneof::Block(msg)) => info!("#{}, block", msg.slot), Some(UpdateOneof::Ping(_)) => {} Some(UpdateOneof::Pong(_)) => {} diff --git a/yellowstone-grpc-tools/src/bin/grpc-kafka.rs b/yellowstone-grpc-tools/src/bin/grpc-kafka.rs index 1a647855..ea9bdaa0 100644 --- a/yellowstone-grpc-tools/src/bin/grpc-kafka.rs +++ b/yellowstone-grpc-tools/src/bin/grpc-kafka.rs @@ -272,6 +272,7 @@ impl ArgsAction { UpdateOneof::Account(msg) => msg.slot, UpdateOneof::Slot(msg) => msg.slot, UpdateOneof::Transaction(msg) => msg.slot, + UpdateOneof::TransactionStatus(msg) => msg.slot, UpdateOneof::Block(msg) => msg.slot, UpdateOneof::Ping(_) => continue, UpdateOneof::Pong(_) => continue, diff --git a/yellowstone-grpc-tools/src/config.rs b/yellowstone-grpc-tools/src/config.rs index 0238dd44..7e7556e2 100644 --- a/yellowstone-grpc-tools/src/config.rs +++ b/yellowstone-grpc-tools/src/config.rs @@ -44,6 +44,7 @@ pub struct ConfigGrpcRequest { pub slots: HashMap, pub accounts: HashMap, pub transactions: HashMap, + pub transactions_status: HashMap, pub entries: HashSet, pub blocks: HashMap, pub blocks_meta: HashSet, @@ -71,6 +72,7 @@ impl GrpcRequestToProto for ConfigGrpcRequest { slots: ConfigGrpcRequest::map_to_proto(self.slots), accounts: ConfigGrpcRequest::map_to_proto(self.accounts), transactions: ConfigGrpcRequest::map_to_proto(self.transactions), + transactions_status: ConfigGrpcRequest::map_to_proto(self.transactions_status), entry: ConfigGrpcRequest::set_to_proto(self.entries), blocks: ConfigGrpcRequest::map_to_proto(self.blocks), blocks_meta: ConfigGrpcRequest::set_to_proto(self.blocks_meta), diff --git a/yellowstone-grpc-tools/src/prom.rs b/yellowstone-grpc-tools/src/prom.rs index e942a9dd..36d316cf 100644 --- a/yellowstone-grpc-tools/src/prom.rs +++ b/yellowstone-grpc-tools/src/prom.rs @@ -111,6 +111,7 @@ pub enum GprcMessageKind { Account, Slot, Transaction, + TransactionStatus, Block, Ping, Pong, @@ -125,6 +126,7 @@ impl From<&UpdateOneof> for GprcMessageKind { UpdateOneof::Account(_) => Self::Account, UpdateOneof::Slot(_) => Self::Slot, UpdateOneof::Transaction(_) => Self::Transaction, + UpdateOneof::TransactionStatus(_) => Self::TransactionStatus, UpdateOneof::Block(_) => Self::Block, UpdateOneof::Ping(_) => Self::Ping, UpdateOneof::Pong(_) => Self::Pong, @@ -140,6 +142,7 @@ impl GprcMessageKind { GprcMessageKind::Account => "account", GprcMessageKind::Slot => "slot", GprcMessageKind::Transaction => "transaction", + GprcMessageKind::TransactionStatus => "transactionstatus", GprcMessageKind::Block => "block", GprcMessageKind::Ping => "ping", GprcMessageKind::Pong => "pong",