diff --git a/pkg/code/async/geyser/api/gen/confirmed_block.pb.validate.go b/pkg/code/async/geyser/api/gen/confirmed_block.pb.validate.go deleted file mode 100644 index 26b52b5b..00000000 --- a/pkg/code/async/geyser/api/gen/confirmed_block.pb.validate.go +++ /dev/null @@ -1,2685 +0,0 @@ -// Code generated by protoc-gen-validate. DO NOT EDIT. -// source: confirmed_block.proto - -package geyser - -import ( - "bytes" - "errors" - "fmt" - "net" - "net/mail" - "net/url" - "regexp" - "sort" - "strings" - "time" - "unicode/utf8" - - "google.golang.org/protobuf/types/known/anypb" -) - -// ensure the imports are used -var ( - _ = bytes.MinRead - _ = errors.New("") - _ = fmt.Print - _ = utf8.UTFMax - _ = (*regexp.Regexp)(nil) - _ = (*strings.Reader)(nil) - _ = net.IPv4len - _ = time.Duration(0) - _ = (*url.URL)(nil) - _ = (*mail.Address)(nil) - _ = anypb.Any{} - _ = sort.Sort -) - -// Validate checks the field values on ConfirmedBlock with the rules defined in -// the proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *ConfirmedBlock) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on ConfirmedBlock with the rules defined -// in the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in ConfirmedBlockMultiError, -// or nil if none found. -func (m *ConfirmedBlock) ValidateAll() error { - return m.validate(true) -} - -func (m *ConfirmedBlock) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for PreviousBlockhash - - // no validation rules for Blockhash - - // no validation rules for ParentSlot - - for idx, item := range m.GetTransactions() { - _, _ = idx, item - - if all { - switch v := interface{}(item).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, ConfirmedBlockValidationError{ - field: fmt.Sprintf("Transactions[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, ConfirmedBlockValidationError{ - field: fmt.Sprintf("Transactions[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ConfirmedBlockValidationError{ - field: fmt.Sprintf("Transactions[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - - } - - for idx, item := range m.GetRewards() { - _, _ = idx, item - - if all { - switch v := interface{}(item).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, ConfirmedBlockValidationError{ - field: fmt.Sprintf("Rewards[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, ConfirmedBlockValidationError{ - field: fmt.Sprintf("Rewards[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ConfirmedBlockValidationError{ - field: fmt.Sprintf("Rewards[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - - } - - if all { - switch v := interface{}(m.GetBlockTime()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, ConfirmedBlockValidationError{ - field: "BlockTime", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, ConfirmedBlockValidationError{ - field: "BlockTime", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetBlockTime()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ConfirmedBlockValidationError{ - field: "BlockTime", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if all { - switch v := interface{}(m.GetBlockHeight()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, ConfirmedBlockValidationError{ - field: "BlockHeight", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, ConfirmedBlockValidationError{ - field: "BlockHeight", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetBlockHeight()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ConfirmedBlockValidationError{ - field: "BlockHeight", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if all { - switch v := interface{}(m.GetNumPartitions()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, ConfirmedBlockValidationError{ - field: "NumPartitions", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, ConfirmedBlockValidationError{ - field: "NumPartitions", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetNumPartitions()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ConfirmedBlockValidationError{ - field: "NumPartitions", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if len(errors) > 0 { - return ConfirmedBlockMultiError(errors) - } - - return nil -} - -// ConfirmedBlockMultiError is an error wrapping multiple validation errors -// returned by ConfirmedBlock.ValidateAll() if the designated constraints -// aren't met. -type ConfirmedBlockMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m ConfirmedBlockMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m ConfirmedBlockMultiError) AllErrors() []error { return m } - -// ConfirmedBlockValidationError is the validation error returned by -// ConfirmedBlock.Validate if the designated constraints aren't met. -type ConfirmedBlockValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ConfirmedBlockValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ConfirmedBlockValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ConfirmedBlockValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ConfirmedBlockValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ConfirmedBlockValidationError) ErrorName() string { return "ConfirmedBlockValidationError" } - -// Error satisfies the builtin error interface -func (e ConfirmedBlockValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sConfirmedBlock.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = ConfirmedBlockValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ConfirmedBlockValidationError{} - -// Validate checks the field values on ConfirmedTransaction with the rules -// defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *ConfirmedTransaction) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on ConfirmedTransaction with the rules -// defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// ConfirmedTransactionMultiError, or nil if none found. -func (m *ConfirmedTransaction) ValidateAll() error { - return m.validate(true) -} - -func (m *ConfirmedTransaction) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if all { - switch v := interface{}(m.GetTransaction()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, ConfirmedTransactionValidationError{ - field: "Transaction", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, ConfirmedTransactionValidationError{ - field: "Transaction", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetTransaction()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ConfirmedTransactionValidationError{ - field: "Transaction", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if all { - switch v := interface{}(m.GetMeta()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, ConfirmedTransactionValidationError{ - field: "Meta", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, ConfirmedTransactionValidationError{ - field: "Meta", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetMeta()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ConfirmedTransactionValidationError{ - field: "Meta", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if len(errors) > 0 { - return ConfirmedTransactionMultiError(errors) - } - - return nil -} - -// ConfirmedTransactionMultiError is an error wrapping multiple validation -// errors returned by ConfirmedTransaction.ValidateAll() if the designated -// constraints aren't met. -type ConfirmedTransactionMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m ConfirmedTransactionMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m ConfirmedTransactionMultiError) AllErrors() []error { return m } - -// ConfirmedTransactionValidationError is the validation error returned by -// ConfirmedTransaction.Validate if the designated constraints aren't met. -type ConfirmedTransactionValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ConfirmedTransactionValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ConfirmedTransactionValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ConfirmedTransactionValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ConfirmedTransactionValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ConfirmedTransactionValidationError) ErrorName() string { - return "ConfirmedTransactionValidationError" -} - -// Error satisfies the builtin error interface -func (e ConfirmedTransactionValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sConfirmedTransaction.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = ConfirmedTransactionValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ConfirmedTransactionValidationError{} - -// Validate checks the field values on Transaction with the rules defined in -// the proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *Transaction) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on Transaction with the rules defined in -// the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in TransactionMultiError, or -// nil if none found. -func (m *Transaction) ValidateAll() error { - return m.validate(true) -} - -func (m *Transaction) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if all { - switch v := interface{}(m.GetMessage()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, TransactionValidationError{ - field: "Message", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, TransactionValidationError{ - field: "Message", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetMessage()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TransactionValidationError{ - field: "Message", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if len(errors) > 0 { - return TransactionMultiError(errors) - } - - return nil -} - -// TransactionMultiError is an error wrapping multiple validation errors -// returned by Transaction.ValidateAll() if the designated constraints aren't met. -type TransactionMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m TransactionMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m TransactionMultiError) AllErrors() []error { return m } - -// TransactionValidationError is the validation error returned by -// Transaction.Validate if the designated constraints aren't met. -type TransactionValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e TransactionValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e TransactionValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e TransactionValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e TransactionValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e TransactionValidationError) ErrorName() string { return "TransactionValidationError" } - -// Error satisfies the builtin error interface -func (e TransactionValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sTransaction.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = TransactionValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = TransactionValidationError{} - -// Validate checks the field values on Message with the rules defined in the -// proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *Message) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on Message with the rules defined in the -// proto definition for this message. If any rules are violated, the result is -// a list of violation errors wrapped in MessageMultiError, or nil if none found. -func (m *Message) ValidateAll() error { - return m.validate(true) -} - -func (m *Message) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if all { - switch v := interface{}(m.GetHeader()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, MessageValidationError{ - field: "Header", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, MessageValidationError{ - field: "Header", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetHeader()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return MessageValidationError{ - field: "Header", - reason: "embedded message failed validation", - cause: err, - } - } - } - - // no validation rules for RecentBlockhash - - for idx, item := range m.GetInstructions() { - _, _ = idx, item - - if all { - switch v := interface{}(item).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, MessageValidationError{ - field: fmt.Sprintf("Instructions[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, MessageValidationError{ - field: fmt.Sprintf("Instructions[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return MessageValidationError{ - field: fmt.Sprintf("Instructions[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - - } - - // no validation rules for Versioned - - for idx, item := range m.GetAddressTableLookups() { - _, _ = idx, item - - if all { - switch v := interface{}(item).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, MessageValidationError{ - field: fmt.Sprintf("AddressTableLookups[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, MessageValidationError{ - field: fmt.Sprintf("AddressTableLookups[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return MessageValidationError{ - field: fmt.Sprintf("AddressTableLookups[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - - } - - if len(errors) > 0 { - return MessageMultiError(errors) - } - - return nil -} - -// MessageMultiError is an error wrapping multiple validation errors returned -// by Message.ValidateAll() if the designated constraints aren't met. -type MessageMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m MessageMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m MessageMultiError) AllErrors() []error { return m } - -// MessageValidationError is the validation error returned by Message.Validate -// if the designated constraints aren't met. -type MessageValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e MessageValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e MessageValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e MessageValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e MessageValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e MessageValidationError) ErrorName() string { return "MessageValidationError" } - -// Error satisfies the builtin error interface -func (e MessageValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sMessage.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = MessageValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = MessageValidationError{} - -// Validate checks the field values on MessageHeader with the rules defined in -// the proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *MessageHeader) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on MessageHeader with the rules defined -// in the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in MessageHeaderMultiError, or -// nil if none found. -func (m *MessageHeader) ValidateAll() error { - return m.validate(true) -} - -func (m *MessageHeader) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for NumRequiredSignatures - - // no validation rules for NumReadonlySignedAccounts - - // no validation rules for NumReadonlyUnsignedAccounts - - if len(errors) > 0 { - return MessageHeaderMultiError(errors) - } - - return nil -} - -// MessageHeaderMultiError is an error wrapping multiple validation errors -// returned by MessageHeader.ValidateAll() if the designated constraints -// aren't met. -type MessageHeaderMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m MessageHeaderMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m MessageHeaderMultiError) AllErrors() []error { return m } - -// MessageHeaderValidationError is the validation error returned by -// MessageHeader.Validate if the designated constraints aren't met. -type MessageHeaderValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e MessageHeaderValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e MessageHeaderValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e MessageHeaderValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e MessageHeaderValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e MessageHeaderValidationError) ErrorName() string { return "MessageHeaderValidationError" } - -// Error satisfies the builtin error interface -func (e MessageHeaderValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sMessageHeader.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = MessageHeaderValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = MessageHeaderValidationError{} - -// Validate checks the field values on MessageAddressTableLookup with the rules -// defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *MessageAddressTableLookup) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on MessageAddressTableLookup with the -// rules defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// MessageAddressTableLookupMultiError, or nil if none found. -func (m *MessageAddressTableLookup) ValidateAll() error { - return m.validate(true) -} - -func (m *MessageAddressTableLookup) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for AccountKey - - // no validation rules for WritableIndexes - - // no validation rules for ReadonlyIndexes - - if len(errors) > 0 { - return MessageAddressTableLookupMultiError(errors) - } - - return nil -} - -// MessageAddressTableLookupMultiError is an error wrapping multiple validation -// errors returned by MessageAddressTableLookup.ValidateAll() if the -// designated constraints aren't met. -type MessageAddressTableLookupMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m MessageAddressTableLookupMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m MessageAddressTableLookupMultiError) AllErrors() []error { return m } - -// MessageAddressTableLookupValidationError is the validation error returned by -// MessageAddressTableLookup.Validate if the designated constraints aren't met. -type MessageAddressTableLookupValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e MessageAddressTableLookupValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e MessageAddressTableLookupValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e MessageAddressTableLookupValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e MessageAddressTableLookupValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e MessageAddressTableLookupValidationError) ErrorName() string { - return "MessageAddressTableLookupValidationError" -} - -// Error satisfies the builtin error interface -func (e MessageAddressTableLookupValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sMessageAddressTableLookup.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = MessageAddressTableLookupValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = MessageAddressTableLookupValidationError{} - -// Validate checks the field values on TransactionStatusMeta with the rules -// defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *TransactionStatusMeta) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on TransactionStatusMeta with the rules -// defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// TransactionStatusMetaMultiError, or nil if none found. -func (m *TransactionStatusMeta) ValidateAll() error { - return m.validate(true) -} - -func (m *TransactionStatusMeta) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if all { - switch v := interface{}(m.GetErr()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, TransactionStatusMetaValidationError{ - field: "Err", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, TransactionStatusMetaValidationError{ - field: "Err", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetErr()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TransactionStatusMetaValidationError{ - field: "Err", - reason: "embedded message failed validation", - cause: err, - } - } - } - - // no validation rules for Fee - - for idx, item := range m.GetInnerInstructions() { - _, _ = idx, item - - if all { - switch v := interface{}(item).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, TransactionStatusMetaValidationError{ - field: fmt.Sprintf("InnerInstructions[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, TransactionStatusMetaValidationError{ - field: fmt.Sprintf("InnerInstructions[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TransactionStatusMetaValidationError{ - field: fmt.Sprintf("InnerInstructions[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - - } - - // no validation rules for InnerInstructionsNone - - // no validation rules for LogMessagesNone - - for idx, item := range m.GetPreTokenBalances() { - _, _ = idx, item - - if all { - switch v := interface{}(item).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, TransactionStatusMetaValidationError{ - field: fmt.Sprintf("PreTokenBalances[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, TransactionStatusMetaValidationError{ - field: fmt.Sprintf("PreTokenBalances[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TransactionStatusMetaValidationError{ - field: fmt.Sprintf("PreTokenBalances[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - - } - - for idx, item := range m.GetPostTokenBalances() { - _, _ = idx, item - - if all { - switch v := interface{}(item).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, TransactionStatusMetaValidationError{ - field: fmt.Sprintf("PostTokenBalances[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, TransactionStatusMetaValidationError{ - field: fmt.Sprintf("PostTokenBalances[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TransactionStatusMetaValidationError{ - field: fmt.Sprintf("PostTokenBalances[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - - } - - for idx, item := range m.GetRewards() { - _, _ = idx, item - - if all { - switch v := interface{}(item).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, TransactionStatusMetaValidationError{ - field: fmt.Sprintf("Rewards[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, TransactionStatusMetaValidationError{ - field: fmt.Sprintf("Rewards[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TransactionStatusMetaValidationError{ - field: fmt.Sprintf("Rewards[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - - } - - if all { - switch v := interface{}(m.GetReturnData()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, TransactionStatusMetaValidationError{ - field: "ReturnData", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, TransactionStatusMetaValidationError{ - field: "ReturnData", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetReturnData()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TransactionStatusMetaValidationError{ - field: "ReturnData", - reason: "embedded message failed validation", - cause: err, - } - } - } - - // no validation rules for ReturnDataNone - - if m.ComputeUnitsConsumed != nil { - // no validation rules for ComputeUnitsConsumed - } - - if len(errors) > 0 { - return TransactionStatusMetaMultiError(errors) - } - - return nil -} - -// TransactionStatusMetaMultiError is an error wrapping multiple validation -// errors returned by TransactionStatusMeta.ValidateAll() if the designated -// constraints aren't met. -type TransactionStatusMetaMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m TransactionStatusMetaMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m TransactionStatusMetaMultiError) AllErrors() []error { return m } - -// TransactionStatusMetaValidationError is the validation error returned by -// TransactionStatusMeta.Validate if the designated constraints aren't met. -type TransactionStatusMetaValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e TransactionStatusMetaValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e TransactionStatusMetaValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e TransactionStatusMetaValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e TransactionStatusMetaValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e TransactionStatusMetaValidationError) ErrorName() string { - return "TransactionStatusMetaValidationError" -} - -// Error satisfies the builtin error interface -func (e TransactionStatusMetaValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sTransactionStatusMeta.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = TransactionStatusMetaValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = TransactionStatusMetaValidationError{} - -// Validate checks the field values on TransactionError with the rules defined -// in the proto definition for this message. If any rules are violated, the -// first error encountered is returned, or nil if there are no violations. -func (m *TransactionError) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on TransactionError with the rules -// defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// TransactionErrorMultiError, or nil if none found. -func (m *TransactionError) ValidateAll() error { - return m.validate(true) -} - -func (m *TransactionError) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for Err - - if len(errors) > 0 { - return TransactionErrorMultiError(errors) - } - - return nil -} - -// TransactionErrorMultiError is an error wrapping multiple validation errors -// returned by TransactionError.ValidateAll() if the designated constraints -// aren't met. -type TransactionErrorMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m TransactionErrorMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m TransactionErrorMultiError) AllErrors() []error { return m } - -// TransactionErrorValidationError is the validation error returned by -// TransactionError.Validate if the designated constraints aren't met. -type TransactionErrorValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e TransactionErrorValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e TransactionErrorValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e TransactionErrorValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e TransactionErrorValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e TransactionErrorValidationError) ErrorName() string { return "TransactionErrorValidationError" } - -// Error satisfies the builtin error interface -func (e TransactionErrorValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sTransactionError.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = TransactionErrorValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = TransactionErrorValidationError{} - -// Validate checks the field values on InnerInstructions with the rules defined -// in the proto definition for this message. If any rules are violated, the -// first error encountered is returned, or nil if there are no violations. -func (m *InnerInstructions) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on InnerInstructions with the rules -// defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// InnerInstructionsMultiError, or nil if none found. -func (m *InnerInstructions) ValidateAll() error { - return m.validate(true) -} - -func (m *InnerInstructions) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for Index - - for idx, item := range m.GetInstructions() { - _, _ = idx, item - - if all { - switch v := interface{}(item).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, InnerInstructionsValidationError{ - field: fmt.Sprintf("Instructions[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, InnerInstructionsValidationError{ - field: fmt.Sprintf("Instructions[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return InnerInstructionsValidationError{ - field: fmt.Sprintf("Instructions[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - - } - - if len(errors) > 0 { - return InnerInstructionsMultiError(errors) - } - - return nil -} - -// InnerInstructionsMultiError is an error wrapping multiple validation errors -// returned by InnerInstructions.ValidateAll() if the designated constraints -// aren't met. -type InnerInstructionsMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m InnerInstructionsMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m InnerInstructionsMultiError) AllErrors() []error { return m } - -// InnerInstructionsValidationError is the validation error returned by -// InnerInstructions.Validate if the designated constraints aren't met. -type InnerInstructionsValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e InnerInstructionsValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e InnerInstructionsValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e InnerInstructionsValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e InnerInstructionsValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e InnerInstructionsValidationError) ErrorName() string { - return "InnerInstructionsValidationError" -} - -// Error satisfies the builtin error interface -func (e InnerInstructionsValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sInnerInstructions.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = InnerInstructionsValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = InnerInstructionsValidationError{} - -// Validate checks the field values on InnerInstruction with the rules defined -// in the proto definition for this message. If any rules are violated, the -// first error encountered is returned, or nil if there are no violations. -func (m *InnerInstruction) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on InnerInstruction with the rules -// defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// InnerInstructionMultiError, or nil if none found. -func (m *InnerInstruction) ValidateAll() error { - return m.validate(true) -} - -func (m *InnerInstruction) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for ProgramIdIndex - - // no validation rules for Accounts - - // no validation rules for Data - - if m.StackHeight != nil { - // no validation rules for StackHeight - } - - if len(errors) > 0 { - return InnerInstructionMultiError(errors) - } - - return nil -} - -// InnerInstructionMultiError is an error wrapping multiple validation errors -// returned by InnerInstruction.ValidateAll() if the designated constraints -// aren't met. -type InnerInstructionMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m InnerInstructionMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m InnerInstructionMultiError) AllErrors() []error { return m } - -// InnerInstructionValidationError is the validation error returned by -// InnerInstruction.Validate if the designated constraints aren't met. -type InnerInstructionValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e InnerInstructionValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e InnerInstructionValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e InnerInstructionValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e InnerInstructionValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e InnerInstructionValidationError) ErrorName() string { return "InnerInstructionValidationError" } - -// Error satisfies the builtin error interface -func (e InnerInstructionValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sInnerInstruction.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = InnerInstructionValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = InnerInstructionValidationError{} - -// Validate checks the field values on CompiledInstruction with the rules -// defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *CompiledInstruction) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on CompiledInstruction with the rules -// defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// CompiledInstructionMultiError, or nil if none found. -func (m *CompiledInstruction) ValidateAll() error { - return m.validate(true) -} - -func (m *CompiledInstruction) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for ProgramIdIndex - - // no validation rules for Accounts - - // no validation rules for Data - - if len(errors) > 0 { - return CompiledInstructionMultiError(errors) - } - - return nil -} - -// CompiledInstructionMultiError is an error wrapping multiple validation -// errors returned by CompiledInstruction.ValidateAll() if the designated -// constraints aren't met. -type CompiledInstructionMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m CompiledInstructionMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m CompiledInstructionMultiError) AllErrors() []error { return m } - -// CompiledInstructionValidationError is the validation error returned by -// CompiledInstruction.Validate if the designated constraints aren't met. -type CompiledInstructionValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e CompiledInstructionValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e CompiledInstructionValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e CompiledInstructionValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e CompiledInstructionValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e CompiledInstructionValidationError) ErrorName() string { - return "CompiledInstructionValidationError" -} - -// Error satisfies the builtin error interface -func (e CompiledInstructionValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sCompiledInstruction.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = CompiledInstructionValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = CompiledInstructionValidationError{} - -// Validate checks the field values on TokenBalance with the rules defined in -// the proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *TokenBalance) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on TokenBalance with the rules defined -// in the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in TokenBalanceMultiError, or -// nil if none found. -func (m *TokenBalance) ValidateAll() error { - return m.validate(true) -} - -func (m *TokenBalance) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for AccountIndex - - // no validation rules for Mint - - if all { - switch v := interface{}(m.GetUiTokenAmount()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, TokenBalanceValidationError{ - field: "UiTokenAmount", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, TokenBalanceValidationError{ - field: "UiTokenAmount", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetUiTokenAmount()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TokenBalanceValidationError{ - field: "UiTokenAmount", - reason: "embedded message failed validation", - cause: err, - } - } - } - - // no validation rules for Owner - - // no validation rules for ProgramId - - if len(errors) > 0 { - return TokenBalanceMultiError(errors) - } - - return nil -} - -// TokenBalanceMultiError is an error wrapping multiple validation errors -// returned by TokenBalance.ValidateAll() if the designated constraints aren't met. -type TokenBalanceMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m TokenBalanceMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m TokenBalanceMultiError) AllErrors() []error { return m } - -// TokenBalanceValidationError is the validation error returned by -// TokenBalance.Validate if the designated constraints aren't met. -type TokenBalanceValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e TokenBalanceValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e TokenBalanceValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e TokenBalanceValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e TokenBalanceValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e TokenBalanceValidationError) ErrorName() string { return "TokenBalanceValidationError" } - -// Error satisfies the builtin error interface -func (e TokenBalanceValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sTokenBalance.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = TokenBalanceValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = TokenBalanceValidationError{} - -// Validate checks the field values on UiTokenAmount with the rules defined in -// the proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *UiTokenAmount) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on UiTokenAmount with the rules defined -// in the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in UiTokenAmountMultiError, or -// nil if none found. -func (m *UiTokenAmount) ValidateAll() error { - return m.validate(true) -} - -func (m *UiTokenAmount) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for UiAmount - - // no validation rules for Decimals - - // no validation rules for Amount - - // no validation rules for UiAmountString - - if len(errors) > 0 { - return UiTokenAmountMultiError(errors) - } - - return nil -} - -// UiTokenAmountMultiError is an error wrapping multiple validation errors -// returned by UiTokenAmount.ValidateAll() if the designated constraints -// aren't met. -type UiTokenAmountMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m UiTokenAmountMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m UiTokenAmountMultiError) AllErrors() []error { return m } - -// UiTokenAmountValidationError is the validation error returned by -// UiTokenAmount.Validate if the designated constraints aren't met. -type UiTokenAmountValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e UiTokenAmountValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e UiTokenAmountValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e UiTokenAmountValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e UiTokenAmountValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e UiTokenAmountValidationError) ErrorName() string { return "UiTokenAmountValidationError" } - -// Error satisfies the builtin error interface -func (e UiTokenAmountValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sUiTokenAmount.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = UiTokenAmountValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = UiTokenAmountValidationError{} - -// Validate checks the field values on ReturnData with the rules defined in the -// proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *ReturnData) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on ReturnData with the rules defined in -// the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in ReturnDataMultiError, or -// nil if none found. -func (m *ReturnData) ValidateAll() error { - return m.validate(true) -} - -func (m *ReturnData) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for ProgramId - - // no validation rules for Data - - if len(errors) > 0 { - return ReturnDataMultiError(errors) - } - - return nil -} - -// ReturnDataMultiError is an error wrapping multiple validation errors -// returned by ReturnData.ValidateAll() if the designated constraints aren't met. -type ReturnDataMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m ReturnDataMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m ReturnDataMultiError) AllErrors() []error { return m } - -// ReturnDataValidationError is the validation error returned by -// ReturnData.Validate if the designated constraints aren't met. -type ReturnDataValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ReturnDataValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ReturnDataValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ReturnDataValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ReturnDataValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ReturnDataValidationError) ErrorName() string { return "ReturnDataValidationError" } - -// Error satisfies the builtin error interface -func (e ReturnDataValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sReturnData.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = ReturnDataValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ReturnDataValidationError{} - -// Validate checks the field values on Reward with the rules defined in the -// proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *Reward) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on Reward with the rules defined in the -// proto definition for this message. If any rules are violated, the result is -// a list of violation errors wrapped in RewardMultiError, or nil if none found. -func (m *Reward) ValidateAll() error { - return m.validate(true) -} - -func (m *Reward) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for Pubkey - - // no validation rules for Lamports - - // no validation rules for PostBalance - - // no validation rules for RewardType - - // no validation rules for Commission - - if len(errors) > 0 { - return RewardMultiError(errors) - } - - return nil -} - -// RewardMultiError is an error wrapping multiple validation errors returned by -// Reward.ValidateAll() if the designated constraints aren't met. -type RewardMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m RewardMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m RewardMultiError) AllErrors() []error { return m } - -// RewardValidationError is the validation error returned by Reward.Validate if -// the designated constraints aren't met. -type RewardValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RewardValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RewardValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RewardValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RewardValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RewardValidationError) ErrorName() string { return "RewardValidationError" } - -// Error satisfies the builtin error interface -func (e RewardValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sReward.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RewardValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RewardValidationError{} - -// Validate checks the field values on Rewards with the rules defined in the -// proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *Rewards) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on Rewards with the rules defined in the -// proto definition for this message. If any rules are violated, the result is -// a list of violation errors wrapped in RewardsMultiError, or nil if none found. -func (m *Rewards) ValidateAll() error { - return m.validate(true) -} - -func (m *Rewards) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - for idx, item := range m.GetRewards() { - _, _ = idx, item - - if all { - switch v := interface{}(item).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, RewardsValidationError{ - field: fmt.Sprintf("Rewards[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, RewardsValidationError{ - field: fmt.Sprintf("Rewards[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RewardsValidationError{ - field: fmt.Sprintf("Rewards[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - - } - - if all { - switch v := interface{}(m.GetNumPartitions()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, RewardsValidationError{ - field: "NumPartitions", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, RewardsValidationError{ - field: "NumPartitions", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetNumPartitions()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RewardsValidationError{ - field: "NumPartitions", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if len(errors) > 0 { - return RewardsMultiError(errors) - } - - return nil -} - -// RewardsMultiError is an error wrapping multiple validation errors returned -// by Rewards.ValidateAll() if the designated constraints aren't met. -type RewardsMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m RewardsMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m RewardsMultiError) AllErrors() []error { return m } - -// RewardsValidationError is the validation error returned by Rewards.Validate -// if the designated constraints aren't met. -type RewardsValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RewardsValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RewardsValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RewardsValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RewardsValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RewardsValidationError) ErrorName() string { return "RewardsValidationError" } - -// Error satisfies the builtin error interface -func (e RewardsValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRewards.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RewardsValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RewardsValidationError{} - -// Validate checks the field values on UnixTimestamp with the rules defined in -// the proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *UnixTimestamp) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on UnixTimestamp with the rules defined -// in the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in UnixTimestampMultiError, or -// nil if none found. -func (m *UnixTimestamp) ValidateAll() error { - return m.validate(true) -} - -func (m *UnixTimestamp) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for Timestamp - - if len(errors) > 0 { - return UnixTimestampMultiError(errors) - } - - return nil -} - -// UnixTimestampMultiError is an error wrapping multiple validation errors -// returned by UnixTimestamp.ValidateAll() if the designated constraints -// aren't met. -type UnixTimestampMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m UnixTimestampMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m UnixTimestampMultiError) AllErrors() []error { return m } - -// UnixTimestampValidationError is the validation error returned by -// UnixTimestamp.Validate if the designated constraints aren't met. -type UnixTimestampValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e UnixTimestampValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e UnixTimestampValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e UnixTimestampValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e UnixTimestampValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e UnixTimestampValidationError) ErrorName() string { return "UnixTimestampValidationError" } - -// Error satisfies the builtin error interface -func (e UnixTimestampValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sUnixTimestamp.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = UnixTimestampValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = UnixTimestampValidationError{} - -// Validate checks the field values on BlockHeight with the rules defined in -// the proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *BlockHeight) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on BlockHeight with the rules defined in -// the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in BlockHeightMultiError, or -// nil if none found. -func (m *BlockHeight) ValidateAll() error { - return m.validate(true) -} - -func (m *BlockHeight) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for BlockHeight - - if len(errors) > 0 { - return BlockHeightMultiError(errors) - } - - return nil -} - -// BlockHeightMultiError is an error wrapping multiple validation errors -// returned by BlockHeight.ValidateAll() if the designated constraints aren't met. -type BlockHeightMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m BlockHeightMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m BlockHeightMultiError) AllErrors() []error { return m } - -// BlockHeightValidationError is the validation error returned by -// BlockHeight.Validate if the designated constraints aren't met. -type BlockHeightValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e BlockHeightValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e BlockHeightValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e BlockHeightValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e BlockHeightValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e BlockHeightValidationError) ErrorName() string { return "BlockHeightValidationError" } - -// Error satisfies the builtin error interface -func (e BlockHeightValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sBlockHeight.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = BlockHeightValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = BlockHeightValidationError{} - -// Validate checks the field values on NumPartitions with the rules defined in -// the proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *NumPartitions) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on NumPartitions with the rules defined -// in the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in NumPartitionsMultiError, or -// nil if none found. -func (m *NumPartitions) ValidateAll() error { - return m.validate(true) -} - -func (m *NumPartitions) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for NumPartitions - - if len(errors) > 0 { - return NumPartitionsMultiError(errors) - } - - return nil -} - -// NumPartitionsMultiError is an error wrapping multiple validation errors -// returned by NumPartitions.ValidateAll() if the designated constraints -// aren't met. -type NumPartitionsMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m NumPartitionsMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m NumPartitionsMultiError) AllErrors() []error { return m } - -// NumPartitionsValidationError is the validation error returned by -// NumPartitions.Validate if the designated constraints aren't met. -type NumPartitionsValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e NumPartitionsValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e NumPartitionsValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e NumPartitionsValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e NumPartitionsValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e NumPartitionsValidationError) ErrorName() string { return "NumPartitionsValidationError" } - -// Error satisfies the builtin error interface -func (e NumPartitionsValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sNumPartitions.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = NumPartitionsValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = NumPartitionsValidationError{} diff --git a/pkg/code/async/geyser/api/gen/geyser.pb.go b/pkg/code/async/geyser/api/gen/geyser.pb.go index 3c87c08b..d66217b7 100644 --- a/pkg/code/async/geyser/api/gen/geyser.pb.go +++ b/pkg/code/async/geyser/api/gen/geyser.pb.go @@ -1,4 +1,4 @@ -// Source: https://github.com/jito-foundation/geyser-grpc-plugin/blob/v2.2/proto/proto/geyser.proto +// Source: https://github.com/rpcpool/yellowstone-grpc/blob/v6.0.0%2Bsolana.2.2.12/yellowstone-grpc-proto/proto/geyser.proto // Code generated by protoc-gen-go. DO NOT EDIT. // versions: @@ -23,92 +23,136 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -type SlotUpdateStatus int32 +type CommitmentLevel int32 const ( - SlotUpdateStatus_CONFIRMED SlotUpdateStatus = 0 - SlotUpdateStatus_PROCESSED SlotUpdateStatus = 1 - SlotUpdateStatus_ROOTED SlotUpdateStatus = 2 - SlotUpdateStatus_FIRST_SHRED_RECEIVED SlotUpdateStatus = 3 - SlotUpdateStatus_COMPLETED SlotUpdateStatus = 4 - SlotUpdateStatus_CREATED_BANK SlotUpdateStatus = 5 - SlotUpdateStatus_DEAD SlotUpdateStatus = 6 + CommitmentLevel_PROCESSED CommitmentLevel = 0 + CommitmentLevel_CONFIRMED CommitmentLevel = 1 + CommitmentLevel_FINALIZED CommitmentLevel = 2 ) -// Enum value maps for SlotUpdateStatus. +// Enum value maps for CommitmentLevel. var ( - SlotUpdateStatus_name = map[int32]string{ - 0: "CONFIRMED", - 1: "PROCESSED", - 2: "ROOTED", - 3: "FIRST_SHRED_RECEIVED", - 4: "COMPLETED", - 5: "CREATED_BANK", - 6: "DEAD", - } - SlotUpdateStatus_value = map[string]int32{ - "CONFIRMED": 0, - "PROCESSED": 1, - "ROOTED": 2, - "FIRST_SHRED_RECEIVED": 3, - "COMPLETED": 4, - "CREATED_BANK": 5, - "DEAD": 6, + CommitmentLevel_name = map[int32]string{ + 0: "PROCESSED", + 1: "CONFIRMED", + 2: "FINALIZED", + } + CommitmentLevel_value = map[string]int32{ + "PROCESSED": 0, + "CONFIRMED": 1, + "FINALIZED": 2, } ) -func (x SlotUpdateStatus) Enum() *SlotUpdateStatus { - p := new(SlotUpdateStatus) +func (x CommitmentLevel) Enum() *CommitmentLevel { + p := new(CommitmentLevel) *p = x return p } -func (x SlotUpdateStatus) String() string { +func (x CommitmentLevel) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (SlotUpdateStatus) Descriptor() protoreflect.EnumDescriptor { +func (CommitmentLevel) Descriptor() protoreflect.EnumDescriptor { return file_geyser_proto_enumTypes[0].Descriptor() } -func (SlotUpdateStatus) Type() protoreflect.EnumType { +func (CommitmentLevel) Type() protoreflect.EnumType { return &file_geyser_proto_enumTypes[0] } -func (x SlotUpdateStatus) Number() protoreflect.EnumNumber { +func (x CommitmentLevel) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } -// Deprecated: Use SlotUpdateStatus.Descriptor instead. -func (SlotUpdateStatus) EnumDescriptor() ([]byte, []int) { +// Deprecated: Use CommitmentLevel.Descriptor instead. +func (CommitmentLevel) EnumDescriptor() ([]byte, []int) { return file_geyser_proto_rawDescGZIP(), []int{0} } -type PartialAccountUpdate struct { +type SlotStatus int32 + +const ( + SlotStatus_SLOT_PROCESSED SlotStatus = 0 + SlotStatus_SLOT_CONFIRMED SlotStatus = 1 + SlotStatus_SLOT_FINALIZED SlotStatus = 2 + SlotStatus_SLOT_FIRST_SHRED_RECEIVED SlotStatus = 3 + SlotStatus_SLOT_COMPLETED SlotStatus = 4 + SlotStatus_SLOT_CREATED_BANK SlotStatus = 5 + SlotStatus_SLOT_DEAD SlotStatus = 6 +) + +// Enum value maps for SlotStatus. +var ( + SlotStatus_name = map[int32]string{ + 0: "SLOT_PROCESSED", + 1: "SLOT_CONFIRMED", + 2: "SLOT_FINALIZED", + 3: "SLOT_FIRST_SHRED_RECEIVED", + 4: "SLOT_COMPLETED", + 5: "SLOT_CREATED_BANK", + 6: "SLOT_DEAD", + } + SlotStatus_value = map[string]int32{ + "SLOT_PROCESSED": 0, + "SLOT_CONFIRMED": 1, + "SLOT_FINALIZED": 2, + "SLOT_FIRST_SHRED_RECEIVED": 3, + "SLOT_COMPLETED": 4, + "SLOT_CREATED_BANK": 5, + "SLOT_DEAD": 6, + } +) + +func (x SlotStatus) Enum() *SlotStatus { + p := new(SlotStatus) + *p = x + return p +} + +func (x SlotStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SlotStatus) Descriptor() protoreflect.EnumDescriptor { + return file_geyser_proto_enumTypes[1].Descriptor() +} + +func (SlotStatus) Type() protoreflect.EnumType { + return &file_geyser_proto_enumTypes[1] +} + +func (x SlotStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SlotStatus.Descriptor instead. +func (SlotStatus) EnumDescriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{1} +} + +type SubscribeRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Slot this update occurred. - Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"` - // Account's pubkey. - Pubkey []byte `protobuf:"bytes,2,opt,name=pubkey,proto3" json:"pubkey,omitempty"` - // Account's owner. - Owner []byte `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` - // Flags whether this update was streamed as part of startup, hence not a realtime update. - IsStartup bool `protobuf:"varint,4,opt,name=is_startup,json=isStartup,proto3" json:"is_startup,omitempty"` - // A monotonically increasing number specifying the order of this update. - // Can be used to determine what the latest update for an account was at - // a given slot, assuming there were multiple updates. - Seq uint64 `protobuf:"varint,5,opt,name=seq,proto3" json:"seq,omitempty"` - // Transaction signature that caused this update. - TxSignature *string `protobuf:"bytes,6,opt,name=tx_signature,json=txSignature,proto3,oneof" json:"tx_signature,omitempty"` - // AccountReplica version. - ReplicaVersion uint32 `protobuf:"varint,7,opt,name=replica_version,json=replicaVersion,proto3" json:"replica_version,omitempty"` -} - -func (x *PartialAccountUpdate) Reset() { - *x = PartialAccountUpdate{} + 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"` + FromSlot *uint64 `protobuf:"varint,11,opt,name=from_slot,json=fromSlot,proto3,oneof" json:"from_slot,omitempty"` +} + +func (x *SubscribeRequest) Reset() { + *x = SubscribeRequest{} if protoimpl.UnsafeEnabled { mi := &file_geyser_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -116,13 +160,13 @@ func (x *PartialAccountUpdate) Reset() { } } -func (x *PartialAccountUpdate) String() string { +func (x *SubscribeRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PartialAccountUpdate) ProtoMessage() {} +func (*SubscribeRequest) ProtoMessage() {} -func (x *PartialAccountUpdate) ProtoReflect() protoreflect.Message { +func (x *SubscribeRequest) ProtoReflect() protoreflect.Message { mi := &file_geyser_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -134,93 +178,101 @@ func (x *PartialAccountUpdate) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PartialAccountUpdate.ProtoReflect.Descriptor instead. -func (*PartialAccountUpdate) Descriptor() ([]byte, []int) { +// Deprecated: Use SubscribeRequest.ProtoReflect.Descriptor instead. +func (*SubscribeRequest) Descriptor() ([]byte, []int) { return file_geyser_proto_rawDescGZIP(), []int{0} } -func (x *PartialAccountUpdate) GetSlot() uint64 { +func (x *SubscribeRequest) GetAccounts() map[string]*SubscribeRequestFilterAccounts { if x != nil { - return x.Slot + return x.Accounts } - return 0 + return nil } -func (x *PartialAccountUpdate) GetPubkey() []byte { +func (x *SubscribeRequest) GetSlots() map[string]*SubscribeRequestFilterSlots { if x != nil { - return x.Pubkey + return x.Slots } return nil } -func (x *PartialAccountUpdate) GetOwner() []byte { +func (x *SubscribeRequest) GetTransactions() map[string]*SubscribeRequestFilterTransactions { if x != nil { - return x.Owner + return x.Transactions } return nil } -func (x *PartialAccountUpdate) GetIsStartup() bool { +func (x *SubscribeRequest) GetTransactionsStatus() map[string]*SubscribeRequestFilterTransactions { if x != nil { - return x.IsStartup + return x.TransactionsStatus } - return false + return nil } -func (x *PartialAccountUpdate) GetSeq() uint64 { +func (x *SubscribeRequest) GetBlocks() map[string]*SubscribeRequestFilterBlocks { if x != nil { - return x.Seq + return x.Blocks } - return 0 + return nil } -func (x *PartialAccountUpdate) GetTxSignature() string { - if x != nil && x.TxSignature != nil { - return *x.TxSignature +func (x *SubscribeRequest) GetBlocksMeta() map[string]*SubscribeRequestFilterBlocksMeta { + if x != nil { + return x.BlocksMeta } - return "" + return nil +} + +func (x *SubscribeRequest) GetEntry() map[string]*SubscribeRequestFilterEntry { + if x != nil { + return x.Entry + } + return nil +} + +func (x *SubscribeRequest) GetCommitment() CommitmentLevel { + if x != nil && x.Commitment != nil { + return *x.Commitment + } + return CommitmentLevel_PROCESSED +} + +func (x *SubscribeRequest) GetAccountsDataSlice() []*SubscribeRequestAccountsDataSlice { + if x != nil { + return x.AccountsDataSlice + } + return nil } -func (x *PartialAccountUpdate) GetReplicaVersion() uint32 { +func (x *SubscribeRequest) GetPing() *SubscribeRequestPing { if x != nil { - return x.ReplicaVersion + return x.Ping + } + return nil +} + +func (x *SubscribeRequest) GetFromSlot() uint64 { + if x != nil && x.FromSlot != nil { + return *x.FromSlot } return 0 } -type AccountUpdate struct { +type SubscribeRequestFilterAccounts struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Slot this update occurred. - Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"` - // Account's pubkey. - Pubkey []byte `protobuf:"bytes,2,opt,name=pubkey,proto3" json:"pubkey,omitempty"` - // Account's lamports post update. - Lamports uint64 `protobuf:"varint,3,opt,name=lamports,proto3" json:"lamports,omitempty"` - // Account's owner. - Owner []byte `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` - // Flags whether an account is executable. - IsExecutable bool `protobuf:"varint,5,opt,name=is_executable,json=isExecutable,proto3" json:"is_executable,omitempty"` - // The epoch at which this account will next owe rent. - RentEpoch uint64 `protobuf:"varint,6,opt,name=rent_epoch,json=rentEpoch,proto3" json:"rent_epoch,omitempty"` - // Account's data post update. - Data []byte `protobuf:"bytes,7,opt,name=data,proto3" json:"data,omitempty"` - // A monotonically increasing number specifying the order of this update. - // Can be used to determine what the latest update for an account was at - // a given slot, assuming there were multiple updates. - Seq uint64 `protobuf:"varint,8,opt,name=seq,proto3" json:"seq,omitempty"` - // Flags whether this update was streamed as part of startup i.e. not a real-time update. - IsStartup bool `protobuf:"varint,9,opt,name=is_startup,json=isStartup,proto3" json:"is_startup,omitempty"` - // Transaction signature that caused this update. - TxSignature *string `protobuf:"bytes,10,opt,name=tx_signature,json=txSignature,proto3,oneof" json:"tx_signature,omitempty"` - // AccountReplica version. - ReplicaVersion uint32 `protobuf:"varint,11,opt,name=replica_version,json=replicaVersion,proto3" json:"replica_version,omitempty"` -} - -func (x *AccountUpdate) Reset() { - *x = AccountUpdate{} + Account []string `protobuf:"bytes,2,rep,name=account,proto3" json:"account,omitempty"` + Owner []string `protobuf:"bytes,3,rep,name=owner,proto3" json:"owner,omitempty"` + Filters []*SubscribeRequestFilterAccountsFilter `protobuf:"bytes,4,rep,name=filters,proto3" json:"filters,omitempty"` + NonemptyTxnSignature *bool `protobuf:"varint,5,opt,name=nonempty_txn_signature,json=nonemptyTxnSignature,proto3,oneof" json:"nonempty_txn_signature,omitempty"` +} + +func (x *SubscribeRequestFilterAccounts) Reset() { + *x = SubscribeRequestFilterAccounts{} if protoimpl.UnsafeEnabled { mi := &file_geyser_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -228,13 +280,13 @@ func (x *AccountUpdate) Reset() { } } -func (x *AccountUpdate) String() string { +func (x *SubscribeRequestFilterAccounts) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AccountUpdate) ProtoMessage() {} +func (*SubscribeRequestFilterAccounts) ProtoMessage() {} -func (x *AccountUpdate) ProtoReflect() protoreflect.Message { +func (x *SubscribeRequestFilterAccounts) ProtoReflect() protoreflect.Message { mi := &file_geyser_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -246,100 +298,55 @@ func (x *AccountUpdate) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AccountUpdate.ProtoReflect.Descriptor instead. -func (*AccountUpdate) Descriptor() ([]byte, []int) { +// Deprecated: Use SubscribeRequestFilterAccounts.ProtoReflect.Descriptor instead. +func (*SubscribeRequestFilterAccounts) Descriptor() ([]byte, []int) { return file_geyser_proto_rawDescGZIP(), []int{1} } -func (x *AccountUpdate) GetSlot() uint64 { - if x != nil { - return x.Slot - } - return 0 -} - -func (x *AccountUpdate) GetPubkey() []byte { +func (x *SubscribeRequestFilterAccounts) GetAccount() []string { if x != nil { - return x.Pubkey + return x.Account } return nil } -func (x *AccountUpdate) GetLamports() uint64 { - if x != nil { - return x.Lamports - } - return 0 -} - -func (x *AccountUpdate) GetOwner() []byte { +func (x *SubscribeRequestFilterAccounts) GetOwner() []string { if x != nil { return x.Owner } return nil } -func (x *AccountUpdate) GetIsExecutable() bool { - if x != nil { - return x.IsExecutable - } - return false -} - -func (x *AccountUpdate) GetRentEpoch() uint64 { - if x != nil { - return x.RentEpoch - } - return 0 -} - -func (x *AccountUpdate) GetData() []byte { +func (x *SubscribeRequestFilterAccounts) GetFilters() []*SubscribeRequestFilterAccountsFilter { if x != nil { - return x.Data + return x.Filters } return nil } -func (x *AccountUpdate) GetSeq() uint64 { - if x != nil { - return x.Seq - } - return 0 -} - -func (x *AccountUpdate) GetIsStartup() bool { - if x != nil { - return x.IsStartup +func (x *SubscribeRequestFilterAccounts) GetNonemptyTxnSignature() bool { + if x != nil && x.NonemptyTxnSignature != nil { + return *x.NonemptyTxnSignature } return false } -func (x *AccountUpdate) GetTxSignature() string { - if x != nil && x.TxSignature != nil { - return *x.TxSignature - } - return "" -} - -func (x *AccountUpdate) GetReplicaVersion() uint32 { - if x != nil { - return x.ReplicaVersion - } - return 0 -} - -type SlotUpdate struct { +type SubscribeRequestFilterAccountsFilter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"` - ParentSlot *uint64 `protobuf:"varint,2,opt,name=parent_slot,json=parentSlot,proto3,oneof" json:"parent_slot,omitempty"` - Status SlotUpdateStatus `protobuf:"varint,3,opt,name=status,proto3,enum=solana.geyser.SlotUpdateStatus" json:"status,omitempty"` + // Types that are assignable to Filter: + // + // *SubscribeRequestFilterAccountsFilter_Memcmp + // *SubscribeRequestFilterAccountsFilter_Datasize + // *SubscribeRequestFilterAccountsFilter_TokenAccountState + // *SubscribeRequestFilterAccountsFilter_Lamports + Filter isSubscribeRequestFilterAccountsFilter_Filter `protobuf_oneof:"filter"` } -func (x *SlotUpdate) Reset() { - *x = SlotUpdate{} +func (x *SubscribeRequestFilterAccountsFilter) Reset() { + *x = SubscribeRequestFilterAccountsFilter{} if protoimpl.UnsafeEnabled { mi := &file_geyser_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -347,13 +354,13 @@ func (x *SlotUpdate) Reset() { } } -func (x *SlotUpdate) String() string { +func (x *SubscribeRequestFilterAccountsFilter) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SlotUpdate) ProtoMessage() {} +func (*SubscribeRequestFilterAccountsFilter) ProtoMessage() {} -func (x *SlotUpdate) ProtoReflect() protoreflect.Message { +func (x *SubscribeRequestFilterAccountsFilter) ProtoReflect() protoreflect.Message { mi := &file_geyser_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -365,45 +372,93 @@ func (x *SlotUpdate) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SlotUpdate.ProtoReflect.Descriptor instead. -func (*SlotUpdate) Descriptor() ([]byte, []int) { +// Deprecated: Use SubscribeRequestFilterAccountsFilter.ProtoReflect.Descriptor instead. +func (*SubscribeRequestFilterAccountsFilter) Descriptor() ([]byte, []int) { return file_geyser_proto_rawDescGZIP(), []int{2} } -func (x *SlotUpdate) GetSlot() uint64 { - if x != nil { - return x.Slot +func (m *SubscribeRequestFilterAccountsFilter) GetFilter() isSubscribeRequestFilterAccountsFilter_Filter { + if m != nil { + return m.Filter } - return 0 + return nil +} + +func (x *SubscribeRequestFilterAccountsFilter) GetMemcmp() *SubscribeRequestFilterAccountsFilterMemcmp { + if x, ok := x.GetFilter().(*SubscribeRequestFilterAccountsFilter_Memcmp); ok { + return x.Memcmp + } + return nil } -func (x *SlotUpdate) GetParentSlot() uint64 { - if x != nil && x.ParentSlot != nil { - return *x.ParentSlot +func (x *SubscribeRequestFilterAccountsFilter) GetDatasize() uint64 { + if x, ok := x.GetFilter().(*SubscribeRequestFilterAccountsFilter_Datasize); ok { + return x.Datasize } return 0 } -func (x *SlotUpdate) GetStatus() SlotUpdateStatus { - if x != nil { - return x.Status +func (x *SubscribeRequestFilterAccountsFilter) GetTokenAccountState() bool { + if x, ok := x.GetFilter().(*SubscribeRequestFilterAccountsFilter_TokenAccountState); ok { + return x.TokenAccountState + } + return false +} + +func (x *SubscribeRequestFilterAccountsFilter) GetLamports() *SubscribeRequestFilterAccountsFilterLamports { + if x, ok := x.GetFilter().(*SubscribeRequestFilterAccountsFilter_Lamports); ok { + return x.Lamports } - return SlotUpdateStatus_CONFIRMED + return nil +} + +type isSubscribeRequestFilterAccountsFilter_Filter interface { + isSubscribeRequestFilterAccountsFilter_Filter() +} + +type SubscribeRequestFilterAccountsFilter_Memcmp struct { + Memcmp *SubscribeRequestFilterAccountsFilterMemcmp `protobuf:"bytes,1,opt,name=memcmp,proto3,oneof"` +} + +type SubscribeRequestFilterAccountsFilter_Datasize struct { + Datasize uint64 `protobuf:"varint,2,opt,name=datasize,proto3,oneof"` +} + +type SubscribeRequestFilterAccountsFilter_TokenAccountState struct { + TokenAccountState bool `protobuf:"varint,3,opt,name=token_account_state,json=tokenAccountState,proto3,oneof"` } -type TimestampedSlotUpdate struct { +type SubscribeRequestFilterAccountsFilter_Lamports struct { + Lamports *SubscribeRequestFilterAccountsFilterLamports `protobuf:"bytes,4,opt,name=lamports,proto3,oneof"` +} + +func (*SubscribeRequestFilterAccountsFilter_Memcmp) isSubscribeRequestFilterAccountsFilter_Filter() {} + +func (*SubscribeRequestFilterAccountsFilter_Datasize) isSubscribeRequestFilterAccountsFilter_Filter() { +} + +func (*SubscribeRequestFilterAccountsFilter_TokenAccountState) isSubscribeRequestFilterAccountsFilter_Filter() { +} + +func (*SubscribeRequestFilterAccountsFilter_Lamports) isSubscribeRequestFilterAccountsFilter_Filter() { +} + +type SubscribeRequestFilterAccountsFilterMemcmp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Time at which the message was generated - Ts *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=ts,proto3" json:"ts,omitempty"` - // Slot update - SlotUpdate *SlotUpdate `protobuf:"bytes,2,opt,name=slot_update,json=slotUpdate,proto3" json:"slot_update,omitempty"` + Offset uint64 `protobuf:"varint,1,opt,name=offset,proto3" json:"offset,omitempty"` + // Types that are assignable to Data: + // + // *SubscribeRequestFilterAccountsFilterMemcmp_Bytes + // *SubscribeRequestFilterAccountsFilterMemcmp_Base58 + // *SubscribeRequestFilterAccountsFilterMemcmp_Base64 + Data isSubscribeRequestFilterAccountsFilterMemcmp_Data `protobuf_oneof:"data"` } -func (x *TimestampedSlotUpdate) Reset() { - *x = TimestampedSlotUpdate{} +func (x *SubscribeRequestFilterAccountsFilterMemcmp) Reset() { + *x = SubscribeRequestFilterAccountsFilterMemcmp{} if protoimpl.UnsafeEnabled { mi := &file_geyser_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -411,13 +466,13 @@ func (x *TimestampedSlotUpdate) Reset() { } } -func (x *TimestampedSlotUpdate) String() string { +func (x *SubscribeRequestFilterAccountsFilterMemcmp) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TimestampedSlotUpdate) ProtoMessage() {} +func (*SubscribeRequestFilterAccountsFilterMemcmp) ProtoMessage() {} -func (x *TimestampedSlotUpdate) ProtoReflect() protoreflect.Message { +func (x *SubscribeRequestFilterAccountsFilterMemcmp) ProtoReflect() protoreflect.Message { mi := &file_geyser_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -429,38 +484,87 @@ func (x *TimestampedSlotUpdate) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TimestampedSlotUpdate.ProtoReflect.Descriptor instead. -func (*TimestampedSlotUpdate) Descriptor() ([]byte, []int) { +// Deprecated: Use SubscribeRequestFilterAccountsFilterMemcmp.ProtoReflect.Descriptor instead. +func (*SubscribeRequestFilterAccountsFilterMemcmp) Descriptor() ([]byte, []int) { return file_geyser_proto_rawDescGZIP(), []int{3} } -func (x *TimestampedSlotUpdate) GetTs() *timestamppb.Timestamp { +func (x *SubscribeRequestFilterAccountsFilterMemcmp) GetOffset() uint64 { if x != nil { - return x.Ts + return x.Offset + } + return 0 +} + +func (m *SubscribeRequestFilterAccountsFilterMemcmp) GetData() isSubscribeRequestFilterAccountsFilterMemcmp_Data { + if m != nil { + return m.Data } return nil } -func (x *TimestampedSlotUpdate) GetSlotUpdate() *SlotUpdate { - if x != nil { - return x.SlotUpdate +func (x *SubscribeRequestFilterAccountsFilterMemcmp) GetBytes() []byte { + if x, ok := x.GetData().(*SubscribeRequestFilterAccountsFilterMemcmp_Bytes); ok { + return x.Bytes } return nil } -type TimestampedAccountUpdate struct { +func (x *SubscribeRequestFilterAccountsFilterMemcmp) GetBase58() string { + if x, ok := x.GetData().(*SubscribeRequestFilterAccountsFilterMemcmp_Base58); ok { + return x.Base58 + } + return "" +} + +func (x *SubscribeRequestFilterAccountsFilterMemcmp) GetBase64() string { + if x, ok := x.GetData().(*SubscribeRequestFilterAccountsFilterMemcmp_Base64); ok { + return x.Base64 + } + return "" +} + +type isSubscribeRequestFilterAccountsFilterMemcmp_Data interface { + isSubscribeRequestFilterAccountsFilterMemcmp_Data() +} + +type SubscribeRequestFilterAccountsFilterMemcmp_Bytes struct { + Bytes []byte `protobuf:"bytes,2,opt,name=bytes,proto3,oneof"` +} + +type SubscribeRequestFilterAccountsFilterMemcmp_Base58 struct { + Base58 string `protobuf:"bytes,3,opt,name=base58,proto3,oneof"` +} + +type SubscribeRequestFilterAccountsFilterMemcmp_Base64 struct { + Base64 string `protobuf:"bytes,4,opt,name=base64,proto3,oneof"` +} + +func (*SubscribeRequestFilterAccountsFilterMemcmp_Bytes) isSubscribeRequestFilterAccountsFilterMemcmp_Data() { +} + +func (*SubscribeRequestFilterAccountsFilterMemcmp_Base58) isSubscribeRequestFilterAccountsFilterMemcmp_Data() { +} + +func (*SubscribeRequestFilterAccountsFilterMemcmp_Base64) isSubscribeRequestFilterAccountsFilterMemcmp_Data() { +} + +type SubscribeRequestFilterAccountsFilterLamports struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Time at which the message was generated - Ts *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=ts,proto3" json:"ts,omitempty"` - // Account update - AccountUpdate *AccountUpdate `protobuf:"bytes,2,opt,name=account_update,json=accountUpdate,proto3" json:"account_update,omitempty"` + // Types that are assignable to Cmp: + // + // *SubscribeRequestFilterAccountsFilterLamports_Eq + // *SubscribeRequestFilterAccountsFilterLamports_Ne + // *SubscribeRequestFilterAccountsFilterLamports_Lt + // *SubscribeRequestFilterAccountsFilterLamports_Gt + Cmp isSubscribeRequestFilterAccountsFilterLamports_Cmp `protobuf_oneof:"cmp"` } -func (x *TimestampedAccountUpdate) Reset() { - *x = TimestampedAccountUpdate{} +func (x *SubscribeRequestFilterAccountsFilterLamports) Reset() { + *x = SubscribeRequestFilterAccountsFilterLamports{} if protoimpl.UnsafeEnabled { mi := &file_geyser_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -468,13 +572,13 @@ func (x *TimestampedAccountUpdate) Reset() { } } -func (x *TimestampedAccountUpdate) String() string { +func (x *SubscribeRequestFilterAccountsFilterLamports) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TimestampedAccountUpdate) ProtoMessage() {} +func (*SubscribeRequestFilterAccountsFilterLamports) ProtoMessage() {} -func (x *TimestampedAccountUpdate) ProtoReflect() protoreflect.Message { +func (x *SubscribeRequestFilterAccountsFilterLamports) ProtoReflect() protoreflect.Message { mi := &file_geyser_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -486,33 +590,89 @@ func (x *TimestampedAccountUpdate) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TimestampedAccountUpdate.ProtoReflect.Descriptor instead. -func (*TimestampedAccountUpdate) Descriptor() ([]byte, []int) { +// Deprecated: Use SubscribeRequestFilterAccountsFilterLamports.ProtoReflect.Descriptor instead. +func (*SubscribeRequestFilterAccountsFilterLamports) Descriptor() ([]byte, []int) { return file_geyser_proto_rawDescGZIP(), []int{4} } -func (x *TimestampedAccountUpdate) GetTs() *timestamppb.Timestamp { - if x != nil { - return x.Ts +func (m *SubscribeRequestFilterAccountsFilterLamports) GetCmp() isSubscribeRequestFilterAccountsFilterLamports_Cmp { + if m != nil { + return m.Cmp } return nil } -func (x *TimestampedAccountUpdate) GetAccountUpdate() *AccountUpdate { - if x != nil { - return x.AccountUpdate +func (x *SubscribeRequestFilterAccountsFilterLamports) GetEq() uint64 { + if x, ok := x.GetCmp().(*SubscribeRequestFilterAccountsFilterLamports_Eq); ok { + return x.Eq } - return nil + return 0 +} + +func (x *SubscribeRequestFilterAccountsFilterLamports) GetNe() uint64 { + if x, ok := x.GetCmp().(*SubscribeRequestFilterAccountsFilterLamports_Ne); ok { + return x.Ne + } + return 0 +} + +func (x *SubscribeRequestFilterAccountsFilterLamports) GetLt() uint64 { + if x, ok := x.GetCmp().(*SubscribeRequestFilterAccountsFilterLamports_Lt); ok { + return x.Lt + } + return 0 +} + +func (x *SubscribeRequestFilterAccountsFilterLamports) GetGt() uint64 { + if x, ok := x.GetCmp().(*SubscribeRequestFilterAccountsFilterLamports_Gt); ok { + return x.Gt + } + return 0 +} + +type isSubscribeRequestFilterAccountsFilterLamports_Cmp interface { + isSubscribeRequestFilterAccountsFilterLamports_Cmp() +} + +type SubscribeRequestFilterAccountsFilterLamports_Eq struct { + Eq uint64 `protobuf:"varint,1,opt,name=eq,proto3,oneof"` +} + +type SubscribeRequestFilterAccountsFilterLamports_Ne struct { + Ne uint64 `protobuf:"varint,2,opt,name=ne,proto3,oneof"` +} + +type SubscribeRequestFilterAccountsFilterLamports_Lt struct { + Lt uint64 `protobuf:"varint,3,opt,name=lt,proto3,oneof"` } -type SubscribeTransactionUpdatesRequest struct { +type SubscribeRequestFilterAccountsFilterLamports_Gt struct { + Gt uint64 `protobuf:"varint,4,opt,name=gt,proto3,oneof"` +} + +func (*SubscribeRequestFilterAccountsFilterLamports_Eq) isSubscribeRequestFilterAccountsFilterLamports_Cmp() { +} + +func (*SubscribeRequestFilterAccountsFilterLamports_Ne) isSubscribeRequestFilterAccountsFilterLamports_Cmp() { +} + +func (*SubscribeRequestFilterAccountsFilterLamports_Lt) isSubscribeRequestFilterAccountsFilterLamports_Cmp() { +} + +func (*SubscribeRequestFilterAccountsFilterLamports_Gt) isSubscribeRequestFilterAccountsFilterLamports_Cmp() { +} + +type SubscribeRequestFilterSlots struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + FilterByCommitment *bool `protobuf:"varint,1,opt,name=filter_by_commitment,json=filterByCommitment,proto3,oneof" json:"filter_by_commitment,omitempty"` + InterslotUpdates *bool `protobuf:"varint,2,opt,name=interslot_updates,json=interslotUpdates,proto3,oneof" json:"interslot_updates,omitempty"` } -func (x *SubscribeTransactionUpdatesRequest) Reset() { - *x = SubscribeTransactionUpdatesRequest{} +func (x *SubscribeRequestFilterSlots) Reset() { + *x = SubscribeRequestFilterSlots{} if protoimpl.UnsafeEnabled { mi := &file_geyser_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -520,13 +680,13 @@ func (x *SubscribeTransactionUpdatesRequest) Reset() { } } -func (x *SubscribeTransactionUpdatesRequest) String() string { +func (x *SubscribeRequestFilterSlots) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SubscribeTransactionUpdatesRequest) ProtoMessage() {} +func (*SubscribeRequestFilterSlots) ProtoMessage() {} -func (x *SubscribeTransactionUpdatesRequest) ProtoReflect() protoreflect.Message { +func (x *SubscribeRequestFilterSlots) ProtoReflect() protoreflect.Message { mi := &file_geyser_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -538,19 +698,40 @@ func (x *SubscribeTransactionUpdatesRequest) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use SubscribeTransactionUpdatesRequest.ProtoReflect.Descriptor instead. -func (*SubscribeTransactionUpdatesRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use SubscribeRequestFilterSlots.ProtoReflect.Descriptor instead. +func (*SubscribeRequestFilterSlots) Descriptor() ([]byte, []int) { return file_geyser_proto_rawDescGZIP(), []int{5} } -type SubscribeBlockUpdatesRequest struct { +func (x *SubscribeRequestFilterSlots) GetFilterByCommitment() bool { + if x != nil && x.FilterByCommitment != nil { + return *x.FilterByCommitment + } + return false +} + +func (x *SubscribeRequestFilterSlots) GetInterslotUpdates() bool { + if x != nil && x.InterslotUpdates != nil { + return *x.InterslotUpdates + } + return false +} + +type SubscribeRequestFilterTransactions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Vote *bool `protobuf:"varint,1,opt,name=vote,proto3,oneof" json:"vote,omitempty"` + Failed *bool `protobuf:"varint,2,opt,name=failed,proto3,oneof" json:"failed,omitempty"` + Signature *string `protobuf:"bytes,5,opt,name=signature,proto3,oneof" json:"signature,omitempty"` + AccountInclude []string `protobuf:"bytes,3,rep,name=account_include,json=accountInclude,proto3" json:"account_include,omitempty"` + AccountExclude []string `protobuf:"bytes,4,rep,name=account_exclude,json=accountExclude,proto3" json:"account_exclude,omitempty"` + AccountRequired []string `protobuf:"bytes,6,rep,name=account_required,json=accountRequired,proto3" json:"account_required,omitempty"` } -func (x *SubscribeBlockUpdatesRequest) Reset() { - *x = SubscribeBlockUpdatesRequest{} +func (x *SubscribeRequestFilterTransactions) Reset() { + *x = SubscribeRequestFilterTransactions{} if protoimpl.UnsafeEnabled { mi := &file_geyser_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -558,13 +739,13 @@ func (x *SubscribeBlockUpdatesRequest) Reset() { } } -func (x *SubscribeBlockUpdatesRequest) String() string { +func (x *SubscribeRequestFilterTransactions) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SubscribeBlockUpdatesRequest) ProtoMessage() {} +func (*SubscribeRequestFilterTransactions) ProtoMessage() {} -func (x *SubscribeBlockUpdatesRequest) ProtoReflect() protoreflect.Message { +func (x *SubscribeRequestFilterTransactions) ProtoReflect() protoreflect.Message { mi := &file_geyser_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -576,25 +757,66 @@ func (x *SubscribeBlockUpdatesRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SubscribeBlockUpdatesRequest.ProtoReflect.Descriptor instead. -func (*SubscribeBlockUpdatesRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use SubscribeRequestFilterTransactions.ProtoReflect.Descriptor instead. +func (*SubscribeRequestFilterTransactions) Descriptor() ([]byte, []int) { return file_geyser_proto_rawDescGZIP(), []int{6} } -type MaybePartialAccountUpdate struct { +func (x *SubscribeRequestFilterTransactions) GetVote() bool { + if x != nil && x.Vote != nil { + return *x.Vote + } + return false +} + +func (x *SubscribeRequestFilterTransactions) GetFailed() bool { + if x != nil && x.Failed != nil { + return *x.Failed + } + return false +} + +func (x *SubscribeRequestFilterTransactions) GetSignature() string { + if x != nil && x.Signature != nil { + return *x.Signature + } + return "" +} + +func (x *SubscribeRequestFilterTransactions) GetAccountInclude() []string { + if x != nil { + return x.AccountInclude + } + return nil +} + +func (x *SubscribeRequestFilterTransactions) GetAccountExclude() []string { + if x != nil { + return x.AccountExclude + } + return nil +} + +func (x *SubscribeRequestFilterTransactions) GetAccountRequired() []string { + if x != nil { + return x.AccountRequired + } + return nil +} + +type SubscribeRequestFilterBlocks struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Types that are assignable to Msg: - // - // *MaybePartialAccountUpdate_PartialAccountUpdate - // *MaybePartialAccountUpdate_Hb - Msg isMaybePartialAccountUpdate_Msg `protobuf_oneof:"msg"` + AccountInclude []string `protobuf:"bytes,1,rep,name=account_include,json=accountInclude,proto3" json:"account_include,omitempty"` + IncludeTransactions *bool `protobuf:"varint,2,opt,name=include_transactions,json=includeTransactions,proto3,oneof" json:"include_transactions,omitempty"` + IncludeAccounts *bool `protobuf:"varint,3,opt,name=include_accounts,json=includeAccounts,proto3,oneof" json:"include_accounts,omitempty"` + IncludeEntries *bool `protobuf:"varint,4,opt,name=include_entries,json=includeEntries,proto3,oneof" json:"include_entries,omitempty"` } -func (x *MaybePartialAccountUpdate) Reset() { - *x = MaybePartialAccountUpdate{} +func (x *SubscribeRequestFilterBlocks) Reset() { + *x = SubscribeRequestFilterBlocks{} if protoimpl.UnsafeEnabled { mi := &file_geyser_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -602,13 +824,13 @@ func (x *MaybePartialAccountUpdate) Reset() { } } -func (x *MaybePartialAccountUpdate) String() string { +func (x *SubscribeRequestFilterBlocks) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MaybePartialAccountUpdate) ProtoMessage() {} +func (*SubscribeRequestFilterBlocks) ProtoMessage() {} -func (x *MaybePartialAccountUpdate) ProtoReflect() protoreflect.Message { +func (x *SubscribeRequestFilterBlocks) ProtoReflect() protoreflect.Message { mi := &file_geyser_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -620,56 +842,47 @@ func (x *MaybePartialAccountUpdate) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MaybePartialAccountUpdate.ProtoReflect.Descriptor instead. -func (*MaybePartialAccountUpdate) Descriptor() ([]byte, []int) { +// Deprecated: Use SubscribeRequestFilterBlocks.ProtoReflect.Descriptor instead. +func (*SubscribeRequestFilterBlocks) Descriptor() ([]byte, []int) { return file_geyser_proto_rawDescGZIP(), []int{7} } -func (m *MaybePartialAccountUpdate) GetMsg() isMaybePartialAccountUpdate_Msg { - if m != nil { - return m.Msg +func (x *SubscribeRequestFilterBlocks) GetAccountInclude() []string { + if x != nil { + return x.AccountInclude } return nil } -func (x *MaybePartialAccountUpdate) GetPartialAccountUpdate() *PartialAccountUpdate { - if x, ok := x.GetMsg().(*MaybePartialAccountUpdate_PartialAccountUpdate); ok { - return x.PartialAccountUpdate +func (x *SubscribeRequestFilterBlocks) GetIncludeTransactions() bool { + if x != nil && x.IncludeTransactions != nil { + return *x.IncludeTransactions } - return nil + return false } -func (x *MaybePartialAccountUpdate) GetHb() *Heartbeat { - if x, ok := x.GetMsg().(*MaybePartialAccountUpdate_Hb); ok { - return x.Hb +func (x *SubscribeRequestFilterBlocks) GetIncludeAccounts() bool { + if x != nil && x.IncludeAccounts != nil { + return *x.IncludeAccounts } - return nil -} - -type isMaybePartialAccountUpdate_Msg interface { - isMaybePartialAccountUpdate_Msg() -} - -type MaybePartialAccountUpdate_PartialAccountUpdate struct { - PartialAccountUpdate *PartialAccountUpdate `protobuf:"bytes,1,opt,name=partial_account_update,json=partialAccountUpdate,proto3,oneof"` + return false } -type MaybePartialAccountUpdate_Hb struct { - Hb *Heartbeat `protobuf:"bytes,2,opt,name=hb,proto3,oneof"` +func (x *SubscribeRequestFilterBlocks) GetIncludeEntries() bool { + if x != nil && x.IncludeEntries != nil { + return *x.IncludeEntries + } + return false } -func (*MaybePartialAccountUpdate_PartialAccountUpdate) isMaybePartialAccountUpdate_Msg() {} - -func (*MaybePartialAccountUpdate_Hb) isMaybePartialAccountUpdate_Msg() {} - -type Heartbeat struct { +type SubscribeRequestFilterBlocksMeta struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *Heartbeat) Reset() { - *x = Heartbeat{} +func (x *SubscribeRequestFilterBlocksMeta) Reset() { + *x = SubscribeRequestFilterBlocksMeta{} if protoimpl.UnsafeEnabled { mi := &file_geyser_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -677,13 +890,13 @@ func (x *Heartbeat) Reset() { } } -func (x *Heartbeat) String() string { +func (x *SubscribeRequestFilterBlocksMeta) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Heartbeat) ProtoMessage() {} +func (*SubscribeRequestFilterBlocksMeta) ProtoMessage() {} -func (x *Heartbeat) ProtoReflect() protoreflect.Message { +func (x *SubscribeRequestFilterBlocksMeta) ProtoReflect() protoreflect.Message { mi := &file_geyser_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -695,19 +908,19 @@ func (x *Heartbeat) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Heartbeat.ProtoReflect.Descriptor instead. -func (*Heartbeat) Descriptor() ([]byte, []int) { +// Deprecated: Use SubscribeRequestFilterBlocksMeta.ProtoReflect.Descriptor instead. +func (*SubscribeRequestFilterBlocksMeta) Descriptor() ([]byte, []int) { return file_geyser_proto_rawDescGZIP(), []int{8} } -type EmptyRequest struct { +type SubscribeRequestFilterEntry struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *EmptyRequest) Reset() { - *x = EmptyRequest{} +func (x *SubscribeRequestFilterEntry) Reset() { + *x = SubscribeRequestFilterEntry{} if protoimpl.UnsafeEnabled { mi := &file_geyser_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -715,13 +928,13 @@ func (x *EmptyRequest) Reset() { } } -func (x *EmptyRequest) String() string { +func (x *SubscribeRequestFilterEntry) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EmptyRequest) ProtoMessage() {} +func (*SubscribeRequestFilterEntry) ProtoMessage() {} -func (x *EmptyRequest) ProtoReflect() protoreflect.Message { +func (x *SubscribeRequestFilterEntry) ProtoReflect() protoreflect.Message { mi := &file_geyser_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -733,27 +946,22 @@ func (x *EmptyRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EmptyRequest.ProtoReflect.Descriptor instead. -func (*EmptyRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use SubscribeRequestFilterEntry.ProtoReflect.Descriptor instead. +func (*SubscribeRequestFilterEntry) Descriptor() ([]byte, []int) { return file_geyser_proto_rawDescGZIP(), []int{9} } -type BlockUpdate struct { +type SubscribeRequestAccountsDataSlice struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"` - Blockhash string `protobuf:"bytes,2,opt,name=blockhash,proto3" json:"blockhash,omitempty"` - Rewards []*Reward `protobuf:"bytes,3,rep,name=rewards,proto3" json:"rewards,omitempty"` - BlockTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=block_time,json=blockTime,proto3" json:"block_time,omitempty"` - BlockHeight *uint64 `protobuf:"varint,5,opt,name=block_height,json=blockHeight,proto3,oneof" json:"block_height,omitempty"` - ExecutedTransactionCount *uint64 `protobuf:"varint,6,opt,name=executed_transaction_count,json=executedTransactionCount,proto3,oneof" json:"executed_transaction_count,omitempty"` - EntryCount *uint64 `protobuf:"varint,7,opt,name=entry_count,json=entryCount,proto3,oneof" json:"entry_count,omitempty"` + Offset uint64 `protobuf:"varint,1,opt,name=offset,proto3" json:"offset,omitempty"` + Length uint64 `protobuf:"varint,2,opt,name=length,proto3" json:"length,omitempty"` } -func (x *BlockUpdate) Reset() { - *x = BlockUpdate{} +func (x *SubscribeRequestAccountsDataSlice) Reset() { + *x = SubscribeRequestAccountsDataSlice{} if protoimpl.UnsafeEnabled { mi := &file_geyser_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -761,13 +969,13 @@ func (x *BlockUpdate) Reset() { } } -func (x *BlockUpdate) String() string { +func (x *SubscribeRequestAccountsDataSlice) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BlockUpdate) ProtoMessage() {} +func (*SubscribeRequestAccountsDataSlice) ProtoMessage() {} -func (x *BlockUpdate) ProtoReflect() protoreflect.Message { +func (x *SubscribeRequestAccountsDataSlice) ProtoReflect() protoreflect.Message { mi := &file_geyser_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -779,88 +987,893 @@ func (x *BlockUpdate) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BlockUpdate.ProtoReflect.Descriptor instead. -func (*BlockUpdate) Descriptor() ([]byte, []int) { +// Deprecated: Use SubscribeRequestAccountsDataSlice.ProtoReflect.Descriptor instead. +func (*SubscribeRequestAccountsDataSlice) Descriptor() ([]byte, []int) { return file_geyser_proto_rawDescGZIP(), []int{10} } -func (x *BlockUpdate) GetSlot() uint64 { +func (x *SubscribeRequestAccountsDataSlice) GetOffset() uint64 { if x != nil { - return x.Slot + return x.Offset } return 0 } -func (x *BlockUpdate) GetBlockhash() string { +func (x *SubscribeRequestAccountsDataSlice) GetLength() uint64 { if x != nil { - return x.Blockhash + return x.Length + } + return 0 +} + +type SubscribeRequestPing struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *SubscribeRequestPing) Reset() { + *x = SubscribeRequestPing{} + if protoimpl.UnsafeEnabled { + mi := &file_geyser_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribeRequestPing) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeRequestPing) ProtoMessage() {} + +func (x *SubscribeRequestPing) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribeRequestPing.ProtoReflect.Descriptor instead. +func (*SubscribeRequestPing) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{11} +} + +func (x *SubscribeRequestPing) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +type SubscribeUpdate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Filters []string `protobuf:"bytes,1,rep,name=filters,proto3" json:"filters,omitempty"` + // Types that are assignable to UpdateOneof: + // + // *SubscribeUpdate_Account + // *SubscribeUpdate_Slot + // *SubscribeUpdate_Transaction + // *SubscribeUpdate_TransactionStatus + // *SubscribeUpdate_Block + // *SubscribeUpdate_Ping + // *SubscribeUpdate_Pong + // *SubscribeUpdate_BlockMeta + // *SubscribeUpdate_Entry + UpdateOneof isSubscribeUpdate_UpdateOneof `protobuf_oneof:"update_oneof"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` +} + +func (x *SubscribeUpdate) Reset() { + *x = SubscribeUpdate{} + if protoimpl.UnsafeEnabled { + mi := &file_geyser_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribeUpdate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeUpdate) ProtoMessage() {} + +func (x *SubscribeUpdate) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribeUpdate.ProtoReflect.Descriptor instead. +func (*SubscribeUpdate) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{12} +} + +func (x *SubscribeUpdate) GetFilters() []string { + if x != nil { + return x.Filters + } + return nil +} + +func (m *SubscribeUpdate) GetUpdateOneof() isSubscribeUpdate_UpdateOneof { + if m != nil { + return m.UpdateOneof + } + return nil +} + +func (x *SubscribeUpdate) GetAccount() *SubscribeUpdateAccount { + if x, ok := x.GetUpdateOneof().(*SubscribeUpdate_Account); ok { + return x.Account + } + return nil +} + +func (x *SubscribeUpdate) GetSlot() *SubscribeUpdateSlot { + if x, ok := x.GetUpdateOneof().(*SubscribeUpdate_Slot); ok { + return x.Slot + } + return nil +} + +func (x *SubscribeUpdate) GetTransaction() *SubscribeUpdateTransaction { + if x, ok := x.GetUpdateOneof().(*SubscribeUpdate_Transaction); ok { + return x.Transaction + } + 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 + } + return nil +} + +func (x *SubscribeUpdate) GetPing() *SubscribeUpdatePing { + if x, ok := x.GetUpdateOneof().(*SubscribeUpdate_Ping); ok { + return x.Ping + } + return nil +} + +func (x *SubscribeUpdate) GetPong() *SubscribeUpdatePong { + if x, ok := x.GetUpdateOneof().(*SubscribeUpdate_Pong); ok { + return x.Pong + } + return nil +} + +func (x *SubscribeUpdate) GetBlockMeta() *SubscribeUpdateBlockMeta { + if x, ok := x.GetUpdateOneof().(*SubscribeUpdate_BlockMeta); ok { + return x.BlockMeta + } + return nil +} + +func (x *SubscribeUpdate) GetEntry() *SubscribeUpdateEntry { + if x, ok := x.GetUpdateOneof().(*SubscribeUpdate_Entry); ok { + return x.Entry + } + return nil +} + +func (x *SubscribeUpdate) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +type isSubscribeUpdate_UpdateOneof interface { + isSubscribeUpdate_UpdateOneof() +} + +type SubscribeUpdate_Account struct { + Account *SubscribeUpdateAccount `protobuf:"bytes,2,opt,name=account,proto3,oneof"` +} + +type SubscribeUpdate_Slot struct { + Slot *SubscribeUpdateSlot `protobuf:"bytes,3,opt,name=slot,proto3,oneof"` +} + +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"` +} + +type SubscribeUpdate_Ping struct { + Ping *SubscribeUpdatePing `protobuf:"bytes,6,opt,name=ping,proto3,oneof"` +} + +type SubscribeUpdate_Pong struct { + Pong *SubscribeUpdatePong `protobuf:"bytes,9,opt,name=pong,proto3,oneof"` +} + +type SubscribeUpdate_BlockMeta struct { + BlockMeta *SubscribeUpdateBlockMeta `protobuf:"bytes,7,opt,name=block_meta,json=blockMeta,proto3,oneof"` +} + +type SubscribeUpdate_Entry struct { + Entry *SubscribeUpdateEntry `protobuf:"bytes,8,opt,name=entry,proto3,oneof"` +} + +func (*SubscribeUpdate_Account) isSubscribeUpdate_UpdateOneof() {} + +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() {} + +func (*SubscribeUpdate_Pong) isSubscribeUpdate_UpdateOneof() {} + +func (*SubscribeUpdate_BlockMeta) isSubscribeUpdate_UpdateOneof() {} + +func (*SubscribeUpdate_Entry) isSubscribeUpdate_UpdateOneof() {} + +type SubscribeUpdateAccount struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Account *SubscribeUpdateAccountInfo `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` + Slot uint64 `protobuf:"varint,2,opt,name=slot,proto3" json:"slot,omitempty"` + IsStartup bool `protobuf:"varint,3,opt,name=is_startup,json=isStartup,proto3" json:"is_startup,omitempty"` +} + +func (x *SubscribeUpdateAccount) Reset() { + *x = SubscribeUpdateAccount{} + if protoimpl.UnsafeEnabled { + mi := &file_geyser_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribeUpdateAccount) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeUpdateAccount) ProtoMessage() {} + +func (x *SubscribeUpdateAccount) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribeUpdateAccount.ProtoReflect.Descriptor instead. +func (*SubscribeUpdateAccount) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{13} +} + +func (x *SubscribeUpdateAccount) GetAccount() *SubscribeUpdateAccountInfo { + if x != nil { + return x.Account + } + return nil +} + +func (x *SubscribeUpdateAccount) GetSlot() uint64 { + if x != nil { + return x.Slot + } + return 0 +} + +func (x *SubscribeUpdateAccount) GetIsStartup() bool { + if x != nil { + return x.IsStartup + } + return false +} + +type SubscribeUpdateAccountInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pubkey []byte `protobuf:"bytes,1,opt,name=pubkey,proto3" json:"pubkey,omitempty"` + Lamports uint64 `protobuf:"varint,2,opt,name=lamports,proto3" json:"lamports,omitempty"` + Owner []byte `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` + Executable bool `protobuf:"varint,4,opt,name=executable,proto3" json:"executable,omitempty"` + RentEpoch uint64 `protobuf:"varint,5,opt,name=rent_epoch,json=rentEpoch,proto3" json:"rent_epoch,omitempty"` + Data []byte `protobuf:"bytes,6,opt,name=data,proto3" json:"data,omitempty"` + WriteVersion uint64 `protobuf:"varint,7,opt,name=write_version,json=writeVersion,proto3" json:"write_version,omitempty"` + TxnSignature []byte `protobuf:"bytes,8,opt,name=txn_signature,json=txnSignature,proto3,oneof" json:"txn_signature,omitempty"` +} + +func (x *SubscribeUpdateAccountInfo) Reset() { + *x = SubscribeUpdateAccountInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_geyser_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribeUpdateAccountInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeUpdateAccountInfo) ProtoMessage() {} + +func (x *SubscribeUpdateAccountInfo) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribeUpdateAccountInfo.ProtoReflect.Descriptor instead. +func (*SubscribeUpdateAccountInfo) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{14} +} + +func (x *SubscribeUpdateAccountInfo) GetPubkey() []byte { + if x != nil { + return x.Pubkey + } + return nil +} + +func (x *SubscribeUpdateAccountInfo) GetLamports() uint64 { + if x != nil { + return x.Lamports + } + return 0 +} + +func (x *SubscribeUpdateAccountInfo) GetOwner() []byte { + if x != nil { + return x.Owner + } + return nil +} + +func (x *SubscribeUpdateAccountInfo) GetExecutable() bool { + if x != nil { + return x.Executable + } + return false +} + +func (x *SubscribeUpdateAccountInfo) GetRentEpoch() uint64 { + if x != nil { + return x.RentEpoch + } + return 0 +} + +func (x *SubscribeUpdateAccountInfo) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +func (x *SubscribeUpdateAccountInfo) GetWriteVersion() uint64 { + if x != nil { + return x.WriteVersion + } + return 0 +} + +func (x *SubscribeUpdateAccountInfo) GetTxnSignature() []byte { + if x != nil { + return x.TxnSignature + } + return nil +} + +type SubscribeUpdateSlot struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"` + Parent *uint64 `protobuf:"varint,2,opt,name=parent,proto3,oneof" json:"parent,omitempty"` + Status SlotStatus `protobuf:"varint,3,opt,name=status,proto3,enum=geyser.SlotStatus" json:"status,omitempty"` + DeadError *string `protobuf:"bytes,4,opt,name=dead_error,json=deadError,proto3,oneof" json:"dead_error,omitempty"` +} + +func (x *SubscribeUpdateSlot) Reset() { + *x = SubscribeUpdateSlot{} + if protoimpl.UnsafeEnabled { + mi := &file_geyser_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribeUpdateSlot) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeUpdateSlot) ProtoMessage() {} + +func (x *SubscribeUpdateSlot) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribeUpdateSlot.ProtoReflect.Descriptor instead. +func (*SubscribeUpdateSlot) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{15} +} + +func (x *SubscribeUpdateSlot) GetSlot() uint64 { + if x != nil { + return x.Slot + } + return 0 +} + +func (x *SubscribeUpdateSlot) GetParent() uint64 { + if x != nil && x.Parent != nil { + return *x.Parent + } + return 0 +} + +func (x *SubscribeUpdateSlot) GetStatus() SlotStatus { + if x != nil { + return x.Status + } + return SlotStatus_SLOT_PROCESSED +} + +func (x *SubscribeUpdateSlot) GetDeadError() string { + if x != nil && x.DeadError != nil { + return *x.DeadError + } + return "" +} + +type SubscribeUpdateTransaction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Transaction *SubscribeUpdateTransactionInfo `protobuf:"bytes,1,opt,name=transaction,proto3" json:"transaction,omitempty"` + Slot uint64 `protobuf:"varint,2,opt,name=slot,proto3" json:"slot,omitempty"` +} + +func (x *SubscribeUpdateTransaction) Reset() { + *x = SubscribeUpdateTransaction{} + if protoimpl.UnsafeEnabled { + mi := &file_geyser_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribeUpdateTransaction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeUpdateTransaction) ProtoMessage() {} + +func (x *SubscribeUpdateTransaction) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribeUpdateTransaction.ProtoReflect.Descriptor instead. +func (*SubscribeUpdateTransaction) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{16} +} + +func (x *SubscribeUpdateTransaction) GetTransaction() *SubscribeUpdateTransactionInfo { + if x != nil { + return x.Transaction + } + return nil +} + +func (x *SubscribeUpdateTransaction) GetSlot() uint64 { + if x != nil { + return x.Slot + } + return 0 +} + +type SubscribeUpdateTransactionInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Signature []byte `protobuf:"bytes,1,opt,name=signature,proto3" json:"signature,omitempty"` + IsVote bool `protobuf:"varint,2,opt,name=is_vote,json=isVote,proto3" json:"is_vote,omitempty"` + Transaction *Transaction `protobuf:"bytes,3,opt,name=transaction,proto3" json:"transaction,omitempty"` + Meta *TransactionStatusMeta `protobuf:"bytes,4,opt,name=meta,proto3" json:"meta,omitempty"` + Index uint64 `protobuf:"varint,5,opt,name=index,proto3" json:"index,omitempty"` +} + +func (x *SubscribeUpdateTransactionInfo) Reset() { + *x = SubscribeUpdateTransactionInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_geyser_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribeUpdateTransactionInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeUpdateTransactionInfo) ProtoMessage() {} + +func (x *SubscribeUpdateTransactionInfo) 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 SubscribeUpdateTransactionInfo.ProtoReflect.Descriptor instead. +func (*SubscribeUpdateTransactionInfo) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{17} +} + +func (x *SubscribeUpdateTransactionInfo) GetSignature() []byte { + if x != nil { + return x.Signature + } + return nil +} + +func (x *SubscribeUpdateTransactionInfo) GetIsVote() bool { + if x != nil { + return x.IsVote + } + return false +} + +func (x *SubscribeUpdateTransactionInfo) GetTransaction() *Transaction { + if x != nil { + return x.Transaction + } + return nil +} + +func (x *SubscribeUpdateTransactionInfo) GetMeta() *TransactionStatusMeta { + if x != nil { + return x.Meta + } + return nil +} + +func (x *SubscribeUpdateTransactionInfo) GetIndex() uint64 { + if x != nil { + return x.Index + } + 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[18] + 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[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribeUpdateTransactionStatus.ProtoReflect.Descriptor instead. +func (*SubscribeUpdateTransactionStatus) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{18} +} + +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 + unknownFields protoimpl.UnknownFields + + Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"` + Blockhash string `protobuf:"bytes,2,opt,name=blockhash,proto3" json:"blockhash,omitempty"` + Rewards *Rewards `protobuf:"bytes,3,opt,name=rewards,proto3" json:"rewards,omitempty"` + BlockTime *UnixTimestamp `protobuf:"bytes,4,opt,name=block_time,json=blockTime,proto3" json:"block_time,omitempty"` + BlockHeight *BlockHeight `protobuf:"bytes,5,opt,name=block_height,json=blockHeight,proto3" json:"block_height,omitempty"` + ParentSlot uint64 `protobuf:"varint,7,opt,name=parent_slot,json=parentSlot,proto3" json:"parent_slot,omitempty"` + ParentBlockhash string `protobuf:"bytes,8,opt,name=parent_blockhash,json=parentBlockhash,proto3" json:"parent_blockhash,omitempty"` + ExecutedTransactionCount uint64 `protobuf:"varint,9,opt,name=executed_transaction_count,json=executedTransactionCount,proto3" json:"executed_transaction_count,omitempty"` + Transactions []*SubscribeUpdateTransactionInfo `protobuf:"bytes,6,rep,name=transactions,proto3" json:"transactions,omitempty"` + UpdatedAccountCount uint64 `protobuf:"varint,10,opt,name=updated_account_count,json=updatedAccountCount,proto3" json:"updated_account_count,omitempty"` + Accounts []*SubscribeUpdateAccountInfo `protobuf:"bytes,11,rep,name=accounts,proto3" json:"accounts,omitempty"` + EntriesCount uint64 `protobuf:"varint,12,opt,name=entries_count,json=entriesCount,proto3" json:"entries_count,omitempty"` + Entries []*SubscribeUpdateEntry `protobuf:"bytes,13,rep,name=entries,proto3" json:"entries,omitempty"` +} + +func (x *SubscribeUpdateBlock) Reset() { + *x = SubscribeUpdateBlock{} + if protoimpl.UnsafeEnabled { + mi := &file_geyser_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribeUpdateBlock) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeUpdateBlock) ProtoMessage() {} + +func (x *SubscribeUpdateBlock) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribeUpdateBlock.ProtoReflect.Descriptor instead. +func (*SubscribeUpdateBlock) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{19} +} + +func (x *SubscribeUpdateBlock) GetSlot() uint64 { + if x != nil { + return x.Slot + } + return 0 +} + +func (x *SubscribeUpdateBlock) GetBlockhash() string { + if x != nil { + return x.Blockhash } return "" } -func (x *BlockUpdate) GetRewards() []*Reward { +func (x *SubscribeUpdateBlock) GetRewards() *Rewards { if x != nil { return x.Rewards } return nil } -func (x *BlockUpdate) GetBlockTime() *timestamppb.Timestamp { +func (x *SubscribeUpdateBlock) GetBlockTime() *UnixTimestamp { if x != nil { return x.BlockTime } return nil } -func (x *BlockUpdate) GetBlockHeight() uint64 { - if x != nil && x.BlockHeight != nil { - return *x.BlockHeight +func (x *SubscribeUpdateBlock) GetBlockHeight() *BlockHeight { + if x != nil { + return x.BlockHeight + } + return nil +} + +func (x *SubscribeUpdateBlock) GetParentSlot() uint64 { + if x != nil { + return x.ParentSlot + } + return 0 +} + +func (x *SubscribeUpdateBlock) GetParentBlockhash() string { + if x != nil { + return x.ParentBlockhash + } + return "" +} + +func (x *SubscribeUpdateBlock) GetExecutedTransactionCount() uint64 { + if x != nil { + return x.ExecutedTransactionCount } return 0 } -func (x *BlockUpdate) GetExecutedTransactionCount() uint64 { - if x != nil && x.ExecutedTransactionCount != nil { - return *x.ExecutedTransactionCount +func (x *SubscribeUpdateBlock) GetTransactions() []*SubscribeUpdateTransactionInfo { + if x != nil { + return x.Transactions + } + return nil +} + +func (x *SubscribeUpdateBlock) GetUpdatedAccountCount() uint64 { + if x != nil { + return x.UpdatedAccountCount } return 0 } -func (x *BlockUpdate) GetEntryCount() uint64 { - if x != nil && x.EntryCount != nil { - return *x.EntryCount +func (x *SubscribeUpdateBlock) GetAccounts() []*SubscribeUpdateAccountInfo { + if x != nil { + return x.Accounts + } + return nil +} + +func (x *SubscribeUpdateBlock) GetEntriesCount() uint64 { + if x != nil { + return x.EntriesCount } return 0 } -type TimestampedBlockUpdate struct { +func (x *SubscribeUpdateBlock) GetEntries() []*SubscribeUpdateEntry { + if x != nil { + return x.Entries + } + return nil +} + +type SubscribeUpdateBlockMeta struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Time at which the message was generated - Ts *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=ts,proto3" json:"ts,omitempty"` - // Block contents - BlockUpdate *BlockUpdate `protobuf:"bytes,2,opt,name=block_update,json=blockUpdate,proto3" json:"block_update,omitempty"` + Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"` + Blockhash string `protobuf:"bytes,2,opt,name=blockhash,proto3" json:"blockhash,omitempty"` + Rewards *Rewards `protobuf:"bytes,3,opt,name=rewards,proto3" json:"rewards,omitempty"` + BlockTime *UnixTimestamp `protobuf:"bytes,4,opt,name=block_time,json=blockTime,proto3" json:"block_time,omitempty"` + BlockHeight *BlockHeight `protobuf:"bytes,5,opt,name=block_height,json=blockHeight,proto3" json:"block_height,omitempty"` + ParentSlot uint64 `protobuf:"varint,6,opt,name=parent_slot,json=parentSlot,proto3" json:"parent_slot,omitempty"` + ParentBlockhash string `protobuf:"bytes,7,opt,name=parent_blockhash,json=parentBlockhash,proto3" json:"parent_blockhash,omitempty"` + ExecutedTransactionCount uint64 `protobuf:"varint,8,opt,name=executed_transaction_count,json=executedTransactionCount,proto3" json:"executed_transaction_count,omitempty"` + EntriesCount uint64 `protobuf:"varint,9,opt,name=entries_count,json=entriesCount,proto3" json:"entries_count,omitempty"` } -func (x *TimestampedBlockUpdate) Reset() { - *x = TimestampedBlockUpdate{} +func (x *SubscribeUpdateBlockMeta) Reset() { + *x = SubscribeUpdateBlockMeta{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[11] + mi := &file_geyser_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TimestampedBlockUpdate) String() string { +func (x *SubscribeUpdateBlockMeta) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TimestampedBlockUpdate) ProtoMessage() {} +func (*SubscribeUpdateBlockMeta) ProtoMessage() {} -func (x *TimestampedBlockUpdate) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[11] +func (x *SubscribeUpdateBlockMeta) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -871,54 +1884,104 @@ func (x *TimestampedBlockUpdate) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TimestampedBlockUpdate.ProtoReflect.Descriptor instead. -func (*TimestampedBlockUpdate) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{11} +// Deprecated: Use SubscribeUpdateBlockMeta.ProtoReflect.Descriptor instead. +func (*SubscribeUpdateBlockMeta) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{20} +} + +func (x *SubscribeUpdateBlockMeta) GetSlot() uint64 { + if x != nil { + return x.Slot + } + return 0 +} + +func (x *SubscribeUpdateBlockMeta) GetBlockhash() string { + if x != nil { + return x.Blockhash + } + return "" +} + +func (x *SubscribeUpdateBlockMeta) GetRewards() *Rewards { + if x != nil { + return x.Rewards + } + return nil } -func (x *TimestampedBlockUpdate) GetTs() *timestamppb.Timestamp { +func (x *SubscribeUpdateBlockMeta) GetBlockTime() *UnixTimestamp { if x != nil { - return x.Ts + return x.BlockTime } return nil } -func (x *TimestampedBlockUpdate) GetBlockUpdate() *BlockUpdate { +func (x *SubscribeUpdateBlockMeta) GetBlockHeight() *BlockHeight { if x != nil { - return x.BlockUpdate + return x.BlockHeight } return nil } -type TransactionUpdate struct { +func (x *SubscribeUpdateBlockMeta) GetParentSlot() uint64 { + if x != nil { + return x.ParentSlot + } + return 0 +} + +func (x *SubscribeUpdateBlockMeta) GetParentBlockhash() string { + if x != nil { + return x.ParentBlockhash + } + return "" +} + +func (x *SubscribeUpdateBlockMeta) GetExecutedTransactionCount() uint64 { + if x != nil { + return x.ExecutedTransactionCount + } + return 0 +} + +func (x *SubscribeUpdateBlockMeta) GetEntriesCount() uint64 { + if x != nil { + return x.EntriesCount + } + return 0 +} + +type SubscribeUpdateEntry struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"` - Signature string `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"` - TxIdx uint64 `protobuf:"varint,4,opt,name=tx_idx,json=txIdx,proto3" json:"tx_idx,omitempty"` - Tx *ConfirmedTransaction `protobuf:"bytes,5,opt,name=tx,proto3" json:"tx,omitempty"` + Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"` + Index uint64 `protobuf:"varint,2,opt,name=index,proto3" json:"index,omitempty"` + NumHashes uint64 `protobuf:"varint,3,opt,name=num_hashes,json=numHashes,proto3" json:"num_hashes,omitempty"` + Hash []byte `protobuf:"bytes,4,opt,name=hash,proto3" json:"hash,omitempty"` + ExecutedTransactionCount uint64 `protobuf:"varint,5,opt,name=executed_transaction_count,json=executedTransactionCount,proto3" json:"executed_transaction_count,omitempty"` + StartingTransactionIndex uint64 `protobuf:"varint,6,opt,name=starting_transaction_index,json=startingTransactionIndex,proto3" json:"starting_transaction_index,omitempty"` // added in v1.18, for solana 1.17 value is always 0 } -func (x *TransactionUpdate) Reset() { - *x = TransactionUpdate{} +func (x *SubscribeUpdateEntry) Reset() { + *x = SubscribeUpdateEntry{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[12] + mi := &file_geyser_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TransactionUpdate) String() string { +func (x *SubscribeUpdateEntry) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TransactionUpdate) ProtoMessage() {} +func (*SubscribeUpdateEntry) ProtoMessage() {} -func (x *TransactionUpdate) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[12] +func (x *SubscribeUpdateEntry) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -929,72 +1992,306 @@ func (x *TransactionUpdate) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TransactionUpdate.ProtoReflect.Descriptor instead. -func (*TransactionUpdate) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{12} +// Deprecated: Use SubscribeUpdateEntry.ProtoReflect.Descriptor instead. +func (*SubscribeUpdateEntry) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{21} } -func (x *TransactionUpdate) GetSlot() uint64 { +func (x *SubscribeUpdateEntry) GetSlot() uint64 { if x != nil { return x.Slot } return 0 } -func (x *TransactionUpdate) GetSignature() string { +func (x *SubscribeUpdateEntry) GetIndex() uint64 { if x != nil { - return x.Signature + return x.Index } - return "" + return 0 } -func (x *TransactionUpdate) GetIsVote() bool { +func (x *SubscribeUpdateEntry) GetNumHashes() uint64 { if x != nil { - return x.IsVote + return x.NumHashes } - return false + return 0 +} + +func (x *SubscribeUpdateEntry) GetHash() []byte { + if x != nil { + return x.Hash + } + return nil +} + +func (x *SubscribeUpdateEntry) GetExecutedTransactionCount() uint64 { + if x != nil { + return x.ExecutedTransactionCount + } + return 0 +} + +func (x *SubscribeUpdateEntry) GetStartingTransactionIndex() uint64 { + if x != nil { + return x.StartingTransactionIndex + } + return 0 +} + +type SubscribeUpdatePing struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SubscribeUpdatePing) Reset() { + *x = SubscribeUpdatePing{} + if protoimpl.UnsafeEnabled { + mi := &file_geyser_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribeUpdatePing) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeUpdatePing) ProtoMessage() {} + +func (x *SubscribeUpdatePing) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribeUpdatePing.ProtoReflect.Descriptor instead. +func (*SubscribeUpdatePing) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{22} +} + +type SubscribeUpdatePong struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *SubscribeUpdatePong) Reset() { + *x = SubscribeUpdatePong{} + if protoimpl.UnsafeEnabled { + mi := &file_geyser_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribeUpdatePong) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeUpdatePong) ProtoMessage() {} + +func (x *SubscribeUpdatePong) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribeUpdatePong.ProtoReflect.Descriptor instead. +func (*SubscribeUpdatePong) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{23} +} + +func (x *SubscribeUpdatePong) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +type PingRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Count int32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` +} + +func (x *PingRequest) Reset() { + *x = PingRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_geyser_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PingRequest) ProtoMessage() {} + +func (x *PingRequest) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PingRequest.ProtoReflect.Descriptor instead. +func (*PingRequest) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{24} +} + +func (x *PingRequest) GetCount() int32 { + if x != nil { + return x.Count + } + return 0 +} + +type PongResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Count int32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` +} + +func (x *PongResponse) Reset() { + *x = PongResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_geyser_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PongResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PongResponse) ProtoMessage() {} + +func (x *PongResponse) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PongResponse.ProtoReflect.Descriptor instead. +func (*PongResponse) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{25} +} + +func (x *PongResponse) GetCount() int32 { + if x != nil { + return x.Count + } + return 0 +} + +type GetLatestBlockhashRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Commitment *CommitmentLevel `protobuf:"varint,1,opt,name=commitment,proto3,enum=geyser.CommitmentLevel,oneof" json:"commitment,omitempty"` +} + +func (x *GetLatestBlockhashRequest) Reset() { + *x = GetLatestBlockhashRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_geyser_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetLatestBlockhashRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *TransactionUpdate) GetTxIdx() uint64 { - if x != nil { - return x.TxIdx +func (*GetLatestBlockhashRequest) ProtoMessage() {} + +func (x *GetLatestBlockhashRequest) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -func (x *TransactionUpdate) GetTx() *ConfirmedTransaction { - if x != nil { - return x.Tx +// Deprecated: Use GetLatestBlockhashRequest.ProtoReflect.Descriptor instead. +func (*GetLatestBlockhashRequest) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{26} +} + +func (x *GetLatestBlockhashRequest) GetCommitment() CommitmentLevel { + if x != nil && x.Commitment != nil { + return *x.Commitment } - return nil + return CommitmentLevel_PROCESSED } -type TimestampedTransactionUpdate struct { +type GetLatestBlockhashResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Ts *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=ts,proto3" json:"ts,omitempty"` - Transaction *TransactionUpdate `protobuf:"bytes,2,opt,name=transaction,proto3" json:"transaction,omitempty"` + Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"` + Blockhash string `protobuf:"bytes,2,opt,name=blockhash,proto3" json:"blockhash,omitempty"` + LastValidBlockHeight uint64 `protobuf:"varint,3,opt,name=last_valid_block_height,json=lastValidBlockHeight,proto3" json:"last_valid_block_height,omitempty"` } -func (x *TimestampedTransactionUpdate) Reset() { - *x = TimestampedTransactionUpdate{} +func (x *GetLatestBlockhashResponse) Reset() { + *x = GetLatestBlockhashResponse{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[13] + mi := &file_geyser_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TimestampedTransactionUpdate) String() string { +func (x *GetLatestBlockhashResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TimestampedTransactionUpdate) ProtoMessage() {} +func (*GetLatestBlockhashResponse) ProtoMessage() {} -func (x *TimestampedTransactionUpdate) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[13] +func (x *GetLatestBlockhashResponse) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1005,48 +2302,57 @@ func (x *TimestampedTransactionUpdate) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TimestampedTransactionUpdate.ProtoReflect.Descriptor instead. -func (*TimestampedTransactionUpdate) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{13} +// Deprecated: Use GetLatestBlockhashResponse.ProtoReflect.Descriptor instead. +func (*GetLatestBlockhashResponse) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{27} } -func (x *TimestampedTransactionUpdate) GetTs() *timestamppb.Timestamp { +func (x *GetLatestBlockhashResponse) GetSlot() uint64 { if x != nil { - return x.Ts + return x.Slot } - return nil + return 0 } -func (x *TimestampedTransactionUpdate) GetTransaction() *TransactionUpdate { +func (x *GetLatestBlockhashResponse) GetBlockhash() string { if x != nil { - return x.Transaction + return x.Blockhash } - return nil + return "" } -type SubscribeSlotUpdateRequest struct { +func (x *GetLatestBlockhashResponse) GetLastValidBlockHeight() uint64 { + if x != nil { + return x.LastValidBlockHeight + } + return 0 +} + +type GetBlockHeightRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Commitment *CommitmentLevel `protobuf:"varint,1,opt,name=commitment,proto3,enum=geyser.CommitmentLevel,oneof" json:"commitment,omitempty"` } -func (x *SubscribeSlotUpdateRequest) Reset() { - *x = SubscribeSlotUpdateRequest{} +func (x *GetBlockHeightRequest) Reset() { + *x = GetBlockHeightRequest{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[14] + mi := &file_geyser_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SubscribeSlotUpdateRequest) String() string { +func (x *GetBlockHeightRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SubscribeSlotUpdateRequest) ProtoMessage() {} +func (*GetBlockHeightRequest) ProtoMessage() {} -func (x *SubscribeSlotUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[14] +func (x *GetBlockHeightRequest) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1057,36 +2363,43 @@ func (x *SubscribeSlotUpdateRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SubscribeSlotUpdateRequest.ProtoReflect.Descriptor instead. -func (*SubscribeSlotUpdateRequest) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{14} +// Deprecated: Use GetBlockHeightRequest.ProtoReflect.Descriptor instead. +func (*GetBlockHeightRequest) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{28} +} + +func (x *GetBlockHeightRequest) GetCommitment() CommitmentLevel { + if x != nil && x.Commitment != nil { + return *x.Commitment + } + return CommitmentLevel_PROCESSED } -type SubscribeAccountUpdatesRequest struct { +type GetBlockHeightResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Accounts [][]byte `protobuf:"bytes,1,rep,name=accounts,proto3" json:"accounts,omitempty"` + BlockHeight uint64 `protobuf:"varint,1,opt,name=block_height,json=blockHeight,proto3" json:"block_height,omitempty"` } -func (x *SubscribeAccountUpdatesRequest) Reset() { - *x = SubscribeAccountUpdatesRequest{} +func (x *GetBlockHeightResponse) Reset() { + *x = GetBlockHeightResponse{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[15] + mi := &file_geyser_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SubscribeAccountUpdatesRequest) String() string { +func (x *GetBlockHeightResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SubscribeAccountUpdatesRequest) ProtoMessage() {} +func (*GetBlockHeightResponse) ProtoMessage() {} -func (x *SubscribeAccountUpdatesRequest) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[15] +func (x *GetBlockHeightResponse) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1097,43 +2410,43 @@ func (x *SubscribeAccountUpdatesRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SubscribeAccountUpdatesRequest.ProtoReflect.Descriptor instead. -func (*SubscribeAccountUpdatesRequest) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{15} +// Deprecated: Use GetBlockHeightResponse.ProtoReflect.Descriptor instead. +func (*GetBlockHeightResponse) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{29} } -func (x *SubscribeAccountUpdatesRequest) GetAccounts() [][]byte { +func (x *GetBlockHeightResponse) GetBlockHeight() uint64 { if x != nil { - return x.Accounts + return x.BlockHeight } - return nil + return 0 } -type SubscribeProgramsUpdatesRequest struct { +type GetSlotRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Programs [][]byte `protobuf:"bytes,1,rep,name=programs,proto3" json:"programs,omitempty"` + Commitment *CommitmentLevel `protobuf:"varint,1,opt,name=commitment,proto3,enum=geyser.CommitmentLevel,oneof" json:"commitment,omitempty"` } -func (x *SubscribeProgramsUpdatesRequest) Reset() { - *x = SubscribeProgramsUpdatesRequest{} +func (x *GetSlotRequest) Reset() { + *x = GetSlotRequest{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[16] + mi := &file_geyser_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SubscribeProgramsUpdatesRequest) String() string { +func (x *GetSlotRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SubscribeProgramsUpdatesRequest) ProtoMessage() {} +func (*GetSlotRequest) ProtoMessage() {} -func (x *SubscribeProgramsUpdatesRequest) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[16] +func (x *GetSlotRequest) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1144,44 +2457,43 @@ func (x *SubscribeProgramsUpdatesRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SubscribeProgramsUpdatesRequest.ProtoReflect.Descriptor instead. -func (*SubscribeProgramsUpdatesRequest) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{16} +// Deprecated: Use GetSlotRequest.ProtoReflect.Descriptor instead. +func (*GetSlotRequest) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{30} } -func (x *SubscribeProgramsUpdatesRequest) GetPrograms() [][]byte { - if x != nil { - return x.Programs +func (x *GetSlotRequest) GetCommitment() CommitmentLevel { + if x != nil && x.Commitment != nil { + return *x.Commitment } - return nil + return CommitmentLevel_PROCESSED } -type SubscribePartialAccountUpdatesRequest struct { +type GetSlotResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // If true, will not stream vote account updates. - SkipVoteAccounts bool `protobuf:"varint,1,opt,name=skip_vote_accounts,json=skipVoteAccounts,proto3" json:"skip_vote_accounts,omitempty"` + Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"` } -func (x *SubscribePartialAccountUpdatesRequest) Reset() { - *x = SubscribePartialAccountUpdatesRequest{} +func (x *GetSlotResponse) Reset() { + *x = GetSlotResponse{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[17] + mi := &file_geyser_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SubscribePartialAccountUpdatesRequest) String() string { +func (x *GetSlotResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SubscribePartialAccountUpdatesRequest) ProtoMessage() {} +func (*GetSlotResponse) ProtoMessage() {} -func (x *SubscribePartialAccountUpdatesRequest) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[17] +func (x *GetSlotResponse) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1192,43 +2504,41 @@ func (x *SubscribePartialAccountUpdatesRequest) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use SubscribePartialAccountUpdatesRequest.ProtoReflect.Descriptor instead. -func (*SubscribePartialAccountUpdatesRequest) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{17} +// Deprecated: Use GetSlotResponse.ProtoReflect.Descriptor instead. +func (*GetSlotResponse) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{31} } -func (x *SubscribePartialAccountUpdatesRequest) GetSkipVoteAccounts() bool { +func (x *GetSlotResponse) GetSlot() uint64 { if x != nil { - return x.SkipVoteAccounts + return x.Slot } - return false + return 0 } -type GetHeartbeatIntervalResponse struct { +type GetVersionRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - HeartbeatIntervalMs uint64 `protobuf:"varint,1,opt,name=heartbeat_interval_ms,json=heartbeatIntervalMs,proto3" json:"heartbeat_interval_ms,omitempty"` } -func (x *GetHeartbeatIntervalResponse) Reset() { - *x = GetHeartbeatIntervalResponse{} +func (x *GetVersionRequest) Reset() { + *x = GetVersionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[18] + mi := &file_geyser_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetHeartbeatIntervalResponse) String() string { +func (x *GetVersionRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetHeartbeatIntervalResponse) ProtoMessage() {} +func (*GetVersionRequest) ProtoMessage() {} -func (x *GetHeartbeatIntervalResponse) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[18] +func (x *GetVersionRequest) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1239,51 +2549,36 @@ func (x *GetHeartbeatIntervalResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetHeartbeatIntervalResponse.ProtoReflect.Descriptor instead. -func (*GetHeartbeatIntervalResponse) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{18} -} - -func (x *GetHeartbeatIntervalResponse) GetHeartbeatIntervalMs() uint64 { - if x != nil { - return x.HeartbeatIntervalMs - } - return 0 +// Deprecated: Use GetVersionRequest.ProtoReflect.Descriptor instead. +func (*GetVersionRequest) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{32} } -// / Modelled based off of https://github.com/solana-labs/solana/blob/v2.0/geyser-plugin-interface/src/geyser_plugin_interface.rs#L210 -// / If more details are needed can extend this structure. -type SlotEntryUpdate struct { +type GetVersionResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The slot number of the block containing this Entry - Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"` - // The Entry's index in the block - Index uint64 `protobuf:"varint,2,opt,name=index,proto3" json:"index,omitempty"` - // The number of executed transactions in the Entry - // If this number is zero, we can assume its a tick entry - ExecutedTransactionCount uint64 `protobuf:"varint,3,opt,name=executed_transaction_count,json=executedTransactionCount,proto3" json:"executed_transaction_count,omitempty"` + Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` } -func (x *SlotEntryUpdate) Reset() { - *x = SlotEntryUpdate{} +func (x *GetVersionResponse) Reset() { + *x = GetVersionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[19] + mi := &file_geyser_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SlotEntryUpdate) String() string { +func (x *GetVersionResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SlotEntryUpdate) ProtoMessage() {} +func (*GetVersionResponse) ProtoMessage() {} -func (x *SlotEntryUpdate) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[19] +func (x *GetVersionResponse) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1294,62 +2589,44 @@ func (x *SlotEntryUpdate) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SlotEntryUpdate.ProtoReflect.Descriptor instead. -func (*SlotEntryUpdate) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{19} -} - -func (x *SlotEntryUpdate) GetSlot() uint64 { - if x != nil { - return x.Slot - } - return 0 -} - -func (x *SlotEntryUpdate) GetIndex() uint64 { - if x != nil { - return x.Index - } - return 0 +// Deprecated: Use GetVersionResponse.ProtoReflect.Descriptor instead. +func (*GetVersionResponse) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{33} } -func (x *SlotEntryUpdate) GetExecutedTransactionCount() uint64 { +func (x *GetVersionResponse) GetVersion() string { if x != nil { - return x.ExecutedTransactionCount + return x.Version } - return 0 + return "" } -type TimestampedSlotEntryUpdate struct { +type IsBlockhashValidRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Time at which the message was generated - // Send relative timestamp in micros using u32 to reduce overhead. Provides ~71 mins of accuracy between sender and receiver - // See [compact_timestamp::to_system_time] - Ts uint32 `protobuf:"varint,1,opt,name=ts,proto3" json:"ts,omitempty"` - // SlotEntryUpdate update - EntryUpdate *SlotEntryUpdate `protobuf:"bytes,2,opt,name=entry_update,json=entryUpdate,proto3" json:"entry_update,omitempty"` + Blockhash string `protobuf:"bytes,1,opt,name=blockhash,proto3" json:"blockhash,omitempty"` + Commitment *CommitmentLevel `protobuf:"varint,2,opt,name=commitment,proto3,enum=geyser.CommitmentLevel,oneof" json:"commitment,omitempty"` } -func (x *TimestampedSlotEntryUpdate) Reset() { - *x = TimestampedSlotEntryUpdate{} +func (x *IsBlockhashValidRequest) Reset() { + *x = IsBlockhashValidRequest{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[20] + mi := &file_geyser_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TimestampedSlotEntryUpdate) String() string { +func (x *IsBlockhashValidRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TimestampedSlotEntryUpdate) ProtoMessage() {} +func (*IsBlockhashValidRequest) ProtoMessage() {} -func (x *TimestampedSlotEntryUpdate) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[20] +func (x *IsBlockhashValidRequest) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1360,48 +2637,51 @@ func (x *TimestampedSlotEntryUpdate) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TimestampedSlotEntryUpdate.ProtoReflect.Descriptor instead. -func (*TimestampedSlotEntryUpdate) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{20} +// Deprecated: Use IsBlockhashValidRequest.ProtoReflect.Descriptor instead. +func (*IsBlockhashValidRequest) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{34} } -func (x *TimestampedSlotEntryUpdate) GetTs() uint32 { +func (x *IsBlockhashValidRequest) GetBlockhash() string { if x != nil { - return x.Ts + return x.Blockhash } - return 0 + return "" } -func (x *TimestampedSlotEntryUpdate) GetEntryUpdate() *SlotEntryUpdate { - if x != nil { - return x.EntryUpdate +func (x *IsBlockhashValidRequest) GetCommitment() CommitmentLevel { + if x != nil && x.Commitment != nil { + return *x.Commitment } - return nil + return CommitmentLevel_PROCESSED } -type SubscribeSlotEntryUpdateRequest struct { +type IsBlockhashValidResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Slot uint64 `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty"` + Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` } -func (x *SubscribeSlotEntryUpdateRequest) Reset() { - *x = SubscribeSlotEntryUpdateRequest{} +func (x *IsBlockhashValidResponse) Reset() { + *x = IsBlockhashValidResponse{} if protoimpl.UnsafeEnabled { - mi := &file_geyser_proto_msgTypes[21] + mi := &file_geyser_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SubscribeSlotEntryUpdateRequest) String() string { +func (x *IsBlockhashValidResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SubscribeSlotEntryUpdateRequest) ProtoMessage() {} +func (*IsBlockhashValidResponse) ProtoMessage() {} -func (x *SubscribeSlotEntryUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_geyser_proto_msgTypes[21] +func (x *IsBlockhashValidResponse) ProtoReflect() protoreflect.Message { + mi := &file_geyser_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1412,260 +2692,553 @@ func (x *SubscribeSlotEntryUpdateRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SubscribeSlotEntryUpdateRequest.ProtoReflect.Descriptor instead. -func (*SubscribeSlotEntryUpdateRequest) Descriptor() ([]byte, []int) { - return file_geyser_proto_rawDescGZIP(), []int{21} +// Deprecated: Use IsBlockhashValidResponse.ProtoReflect.Descriptor instead. +func (*IsBlockhashValidResponse) Descriptor() ([]byte, []int) { + return file_geyser_proto_rawDescGZIP(), []int{35} +} + +func (x *IsBlockhashValidResponse) GetSlot() uint64 { + if x != nil { + return x.Slot + } + return 0 +} + +func (x *IsBlockhashValidResponse) GetValid() bool { + if x != nil { + return x.Valid + } + return false } 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, 0x0d, - 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x1a, 0x1f, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xeb, 0x01, 0x0a, 0x14, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, - 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, - 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x12, - 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x73, 0x65, - 0x71, 0x12, 0x26, 0x0a, 0x0c, 0x74, 0x78, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x74, 0x78, 0x53, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x74, 0x78, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x22, 0xd8, 0x02, 0x0a, 0x0d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, - 0x6b, 0x65, 0x79, 0x18, 0x02, 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, 0x03, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x14, 0x0a, - 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6e, 0x74, - 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x65, - 0x6e, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x73, - 0x65, 0x71, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x73, 0x65, 0x71, 0x12, 0x1d, 0x0a, - 0x0a, 0x69, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x12, 0x26, 0x0a, 0x0c, - 0x74, 0x78, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x74, 0x78, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x72, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x0f, 0x0a, - 0x0d, 0x5f, 0x74, 0x78, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x8f, - 0x01, 0x0a, 0x0a, 0x53, 0x6c, 0x6f, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, 0x6f, - 0x74, 0x12, 0x24, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x53, 0x6c, 0x6f, 0x74, 0x88, 0x01, 0x01, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, - 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, - 0x22, 0x7f, 0x0a, 0x15, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x65, 0x64, 0x53, - 0x6c, 0x6f, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x02, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x02, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x0b, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x6f, 0x6c, - 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x73, 0x6c, 0x6f, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x18, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x65, - 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2a, - 0x0a, 0x02, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x02, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x0e, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, 0x79, 0x73, - 0x65, 0x72, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, - 0x24, 0x0a, 0x22, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x1e, 0x0a, 0x1c, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xab, 0x01, 0x0a, 0x19, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x50, - 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x12, 0x5b, 0x0a, 0x16, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, 0x79, - 0x73, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x14, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x12, 0x2a, 0x0a, 0x02, 0x68, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, - 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, - 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x48, 0x00, 0x52, 0x02, 0x68, 0x62, 0x42, 0x05, 0x0a, 0x03, - 0x6d, 0x73, 0x67, 0x22, 0x0b, 0x0a, 0x09, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, - 0x22, 0x0e, 0x0a, 0x0c, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x8c, 0x03, 0x0a, 0x0b, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 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, 0x3f, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x25, 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, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, - 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x88, 0x01, 0x01, 0x12, 0x41, 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, 0x06, 0x20, 0x01, 0x28, 0x04, 0x48, 0x01, 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, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x65, 0x6e, 0x74, - 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x48, 0x02, - 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, - 0x0f, 0x0a, 0x0d, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x42, 0x1d, 0x0a, 0x1b, 0x5f, 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, 0x42, - 0x0e, 0x0a, 0x0c, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, - 0x83, 0x01, 0x0a, 0x16, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x65, 0x64, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x02, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x02, 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, - 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0xba, 0x01, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, + 0x0a, 0x0c, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, + 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2d, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xed, 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, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x05, 0x73, 0x6c, 0x6f, 0x74, 0x73, 0x18, + 0x02, 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, + 0x53, 0x6c, 0x6f, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x73, 0x6c, 0x6f, 0x74, + 0x73, 0x12, 0x4e, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x03, 0x20, 0x03, 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, 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, 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, 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, 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, 0x12, 0x20, 0x0a, 0x09, 0x66, 0x72, 0x6f, 0x6d, + 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x48, 0x02, 0x52, 0x08, 0x66, + 0x72, 0x6f, 0x6d, 0x53, 0x6c, 0x6f, 0x74, 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, 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, 0x42, + 0x0c, 0x0a, 0x0a, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x22, 0xee, 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, 0x12, 0x39, 0x0a, 0x16, 0x6e, 0x6f, 0x6e, 0x65, + 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x74, 0x78, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x14, 0x6e, 0x6f, 0x6e, 0x65, + 0x6d, 0x70, 0x74, 0x79, 0x54, 0x78, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x88, 0x01, 0x01, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x6e, 0x6f, 0x6e, 0x65, 0x6d, 0x70, 0x74, 0x79, + 0x5f, 0x74, 0x78, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa2, + 0x02, 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, 0x12, 0x52, 0x0a, 0x08, 0x6c, 0x61, 0x6d, 0x70, 0x6f, 0x72, 0x74, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 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, 0x4c, 0x61, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x48, 0x00, 0x52, + 0x08, 0x6c, 0x61, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 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, 0x7d, + 0x0a, 0x2c, 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, 0x4c, 0x61, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x10, + 0x0a, 0x02, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x02, 0x65, 0x71, + 0x12, 0x10, 0x0a, 0x02, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x02, + 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, + 0x52, 0x02, 0x6c, 0x74, 0x12, 0x10, 0x0a, 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, + 0x48, 0x00, 0x52, 0x02, 0x67, 0x74, 0x42, 0x05, 0x0a, 0x03, 0x63, 0x6d, 0x70, 0x22, 0xb5, 0x01, + 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, 0x12, 0x30, 0x0a, 0x11, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x6c, 0x6f, + 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, + 0x01, 0x52, 0x10, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x6c, 0x6f, 0x74, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x73, 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, 0x42, + 0x14, 0x0a, 0x12, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x73, 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, 0x9d, 0x05, 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, 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, 0x12, 0x39, 0x0a, 0x0a, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 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, 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, + 0xb0, 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, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, + 0x72, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0a, 0x64, 0x65, 0x61, 0x64, 0x5f, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, 0x64, 0x65, 0x61, 0x64, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x64, 0x65, 0x61, 0x64, 0x5f, 0x65, 0x72, 0x72, + 0x6f, 0x72, 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, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x17, 0x0a, + 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, 0x15, 0x0a, 0x06, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x78, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x74, 0x78, 0x49, 0x64, 0x78, 0x12, 0x43, 0x0a, - 0x02, 0x74, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x73, 0x6f, 0x6c, 0x61, + 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, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, - 0x74, 0x78, 0x22, 0x8e, 0x01, 0x0a, 0x1c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x02, 0x74, 0x73, 0x12, - 0x42, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, - 0x79, 0x73, 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x1c, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x53, 0x6c, 0x6f, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x3c, 0x0a, 0x1e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, - 0x3d, 0x0a, 0x1f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x55, - 0x0a, 0x25, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, - 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x6b, 0x69, 0x70, 0x5f, - 0x76, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x10, 0x73, 0x6b, 0x69, 0x70, 0x56, 0x6f, 0x74, 0x65, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0x52, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x72, - 0x74, 0x62, 0x65, 0x61, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, - 0x61, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d, 0x73, 0x22, 0x79, 0x0a, 0x0f, 0x53, 0x6c, 0x6f, - 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, + 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, + 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, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 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, 0x03, 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, 0x22, 0x6f, 0x0a, 0x1a, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x65, 0x64, 0x53, 0x6c, 0x6f, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, - 0x74, 0x73, 0x12, 0x41, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, - 0x61, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x21, 0x0a, 0x1f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2a, 0x81, 0x01, 0x0a, 0x10, 0x53, 0x6c, 0x6f, - 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0d, 0x0a, - 0x09, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, - 0x50, 0x52, 0x4f, 0x43, 0x45, 0x53, 0x53, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, - 0x4f, 0x4f, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x49, 0x52, 0x53, 0x54, - 0x5f, 0x53, 0x48, 0x52, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, - 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x04, - 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x42, 0x41, 0x4e, 0x4b, - 0x10, 0x05, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x41, 0x44, 0x10, 0x06, 0x32, 0xc0, 0x07, 0x0a, - 0x06, 0x47, 0x65, 0x79, 0x73, 0x65, 0x72, 0x12, 0x62, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x48, 0x65, - 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, - 0x1b, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x73, - 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, - 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, - 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x17, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, - 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, - 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x65, - 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x00, - 0x30, 0x01, 0x12, 0x76, 0x0a, 0x17, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, - 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x2e, - 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, - 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x65, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x84, 0x01, 0x0a, 0x1e, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x34, 0x2e, - 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, 0x79, - 0x73, 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x79, 0x62, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x00, 0x30, - 0x01, 0x12, 0x6b, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x6c, - 0x6f, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x73, 0x6f, 0x6c, 0x61, - 0x6e, 0x61, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x62, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, - 0x79, 0x73, 0x65, 0x72, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x65, 0x64, - 0x53, 0x6c, 0x6f, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x81, - 0x01, 0x0a, 0x1b, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x31, - 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, - 0x72, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x65, 0x64, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x00, - 0x30, 0x01, 0x12, 0x6f, 0x0a, 0x15, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2b, 0x2e, 0x73, 0x6f, - 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, - 0x61, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, - 0x00, 0x30, 0x01, 0x12, 0x7a, 0x0a, 0x19, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x53, 0x6c, 0x6f, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, - 0x12, 0x2e, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, - 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x29, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x65, 0x64, 0x53, 0x6c, 0x6f, 0x74, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x00, 0x30, 0x01, 0x42, - 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, + 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, 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, 0x2a, 0xa1, 0x01, 0x0a, 0x0a, 0x53, 0x6c, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x4c, 0x4f, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x43, 0x45, + 0x53, 0x53, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x4c, 0x4f, 0x54, 0x5f, 0x43, + 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x4c, + 0x4f, 0x54, 0x5f, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1d, + 0x0a, 0x19, 0x53, 0x4c, 0x4f, 0x54, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x53, 0x48, 0x52, + 0x45, 0x44, 0x5f, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x03, 0x12, 0x12, 0x0a, + 0x0e, 0x53, 0x4c, 0x4f, 0x54, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, + 0x04, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x4c, 0x4f, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, + 0x44, 0x5f, 0x42, 0x41, 0x4e, 0x4b, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x4c, 0x4f, 0x54, + 0x5f, 0x44, 0x45, 0x41, 0x44, 0x10, 0x06, 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, 0x0a, 0x5a, + 0x08, 0x2e, 0x3b, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x50, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } @@ -1681,73 +3254,131 @@ func file_geyser_proto_rawDescGZIP() []byte { return file_geyser_proto_rawDescData } -var file_geyser_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_geyser_proto_msgTypes = make([]protoimpl.MessageInfo, 22) +var file_geyser_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_geyser_proto_msgTypes = make([]protoimpl.MessageInfo, 43) var file_geyser_proto_goTypes = []interface{}{ - (SlotUpdateStatus)(0), // 0: solana.geyser.SlotUpdateStatus - (*PartialAccountUpdate)(nil), // 1: solana.geyser.PartialAccountUpdate - (*AccountUpdate)(nil), // 2: solana.geyser.AccountUpdate - (*SlotUpdate)(nil), // 3: solana.geyser.SlotUpdate - (*TimestampedSlotUpdate)(nil), // 4: solana.geyser.TimestampedSlotUpdate - (*TimestampedAccountUpdate)(nil), // 5: solana.geyser.TimestampedAccountUpdate - (*SubscribeTransactionUpdatesRequest)(nil), // 6: solana.geyser.SubscribeTransactionUpdatesRequest - (*SubscribeBlockUpdatesRequest)(nil), // 7: solana.geyser.SubscribeBlockUpdatesRequest - (*MaybePartialAccountUpdate)(nil), // 8: solana.geyser.MaybePartialAccountUpdate - (*Heartbeat)(nil), // 9: solana.geyser.Heartbeat - (*EmptyRequest)(nil), // 10: solana.geyser.EmptyRequest - (*BlockUpdate)(nil), // 11: solana.geyser.BlockUpdate - (*TimestampedBlockUpdate)(nil), // 12: solana.geyser.TimestampedBlockUpdate - (*TransactionUpdate)(nil), // 13: solana.geyser.TransactionUpdate - (*TimestampedTransactionUpdate)(nil), // 14: solana.geyser.TimestampedTransactionUpdate - (*SubscribeSlotUpdateRequest)(nil), // 15: solana.geyser.SubscribeSlotUpdateRequest - (*SubscribeAccountUpdatesRequest)(nil), // 16: solana.geyser.SubscribeAccountUpdatesRequest - (*SubscribeProgramsUpdatesRequest)(nil), // 17: solana.geyser.SubscribeProgramsUpdatesRequest - (*SubscribePartialAccountUpdatesRequest)(nil), // 18: solana.geyser.SubscribePartialAccountUpdatesRequest - (*GetHeartbeatIntervalResponse)(nil), // 19: solana.geyser.GetHeartbeatIntervalResponse - (*SlotEntryUpdate)(nil), // 20: solana.geyser.SlotEntryUpdate - (*TimestampedSlotEntryUpdate)(nil), // 21: solana.geyser.TimestampedSlotEntryUpdate - (*SubscribeSlotEntryUpdateRequest)(nil), // 22: solana.geyser.SubscribeSlotEntryUpdateRequest - (*timestamppb.Timestamp)(nil), // 23: google.protobuf.Timestamp - (*Reward)(nil), // 24: solana.storage.ConfirmedBlock.Reward - (*ConfirmedTransaction)(nil), // 25: solana.storage.ConfirmedBlock.ConfirmedTransaction + (CommitmentLevel)(0), // 0: geyser.CommitmentLevel + (SlotStatus)(0), // 1: geyser.SlotStatus + (*SubscribeRequest)(nil), // 2: geyser.SubscribeRequest + (*SubscribeRequestFilterAccounts)(nil), // 3: geyser.SubscribeRequestFilterAccounts + (*SubscribeRequestFilterAccountsFilter)(nil), // 4: geyser.SubscribeRequestFilterAccountsFilter + (*SubscribeRequestFilterAccountsFilterMemcmp)(nil), // 5: geyser.SubscribeRequestFilterAccountsFilterMemcmp + (*SubscribeRequestFilterAccountsFilterLamports)(nil), // 6: geyser.SubscribeRequestFilterAccountsFilterLamports + (*SubscribeRequestFilterSlots)(nil), // 7: geyser.SubscribeRequestFilterSlots + (*SubscribeRequestFilterTransactions)(nil), // 8: geyser.SubscribeRequestFilterTransactions + (*SubscribeRequestFilterBlocks)(nil), // 9: geyser.SubscribeRequestFilterBlocks + (*SubscribeRequestFilterBlocksMeta)(nil), // 10: geyser.SubscribeRequestFilterBlocksMeta + (*SubscribeRequestFilterEntry)(nil), // 11: geyser.SubscribeRequestFilterEntry + (*SubscribeRequestAccountsDataSlice)(nil), // 12: geyser.SubscribeRequestAccountsDataSlice + (*SubscribeRequestPing)(nil), // 13: geyser.SubscribeRequestPing + (*SubscribeUpdate)(nil), // 14: geyser.SubscribeUpdate + (*SubscribeUpdateAccount)(nil), // 15: geyser.SubscribeUpdateAccount + (*SubscribeUpdateAccountInfo)(nil), // 16: geyser.SubscribeUpdateAccountInfo + (*SubscribeUpdateSlot)(nil), // 17: geyser.SubscribeUpdateSlot + (*SubscribeUpdateTransaction)(nil), // 18: geyser.SubscribeUpdateTransaction + (*SubscribeUpdateTransactionInfo)(nil), // 19: geyser.SubscribeUpdateTransactionInfo + (*SubscribeUpdateTransactionStatus)(nil), // 20: geyser.SubscribeUpdateTransactionStatus + (*SubscribeUpdateBlock)(nil), // 21: geyser.SubscribeUpdateBlock + (*SubscribeUpdateBlockMeta)(nil), // 22: geyser.SubscribeUpdateBlockMeta + (*SubscribeUpdateEntry)(nil), // 23: geyser.SubscribeUpdateEntry + (*SubscribeUpdatePing)(nil), // 24: geyser.SubscribeUpdatePing + (*SubscribeUpdatePong)(nil), // 25: geyser.SubscribeUpdatePong + (*PingRequest)(nil), // 26: geyser.PingRequest + (*PongResponse)(nil), // 27: geyser.PongResponse + (*GetLatestBlockhashRequest)(nil), // 28: geyser.GetLatestBlockhashRequest + (*GetLatestBlockhashResponse)(nil), // 29: geyser.GetLatestBlockhashResponse + (*GetBlockHeightRequest)(nil), // 30: geyser.GetBlockHeightRequest + (*GetBlockHeightResponse)(nil), // 31: geyser.GetBlockHeightResponse + (*GetSlotRequest)(nil), // 32: geyser.GetSlotRequest + (*GetSlotResponse)(nil), // 33: geyser.GetSlotResponse + (*GetVersionRequest)(nil), // 34: geyser.GetVersionRequest + (*GetVersionResponse)(nil), // 35: geyser.GetVersionResponse + (*IsBlockhashValidRequest)(nil), // 36: geyser.IsBlockhashValidRequest + (*IsBlockhashValidResponse)(nil), // 37: geyser.IsBlockhashValidResponse + nil, // 38: geyser.SubscribeRequest.AccountsEntry + nil, // 39: geyser.SubscribeRequest.SlotsEntry + nil, // 40: geyser.SubscribeRequest.TransactionsEntry + nil, // 41: geyser.SubscribeRequest.TransactionsStatusEntry + nil, // 42: geyser.SubscribeRequest.BlocksEntry + nil, // 43: geyser.SubscribeRequest.BlocksMetaEntry + nil, // 44: geyser.SubscribeRequest.EntryEntry + (*timestamppb.Timestamp)(nil), // 45: google.protobuf.Timestamp + (*Transaction)(nil), // 46: solana.storage.ConfirmedBlock.Transaction + (*TransactionStatusMeta)(nil), // 47: solana.storage.ConfirmedBlock.TransactionStatusMeta + (*TransactionError)(nil), // 48: solana.storage.ConfirmedBlock.TransactionError + (*Rewards)(nil), // 49: solana.storage.ConfirmedBlock.Rewards + (*UnixTimestamp)(nil), // 50: solana.storage.ConfirmedBlock.UnixTimestamp + (*BlockHeight)(nil), // 51: solana.storage.ConfirmedBlock.BlockHeight } var file_geyser_proto_depIdxs = []int32{ - 0, // 0: solana.geyser.SlotUpdate.status:type_name -> solana.geyser.SlotUpdateStatus - 23, // 1: solana.geyser.TimestampedSlotUpdate.ts:type_name -> google.protobuf.Timestamp - 3, // 2: solana.geyser.TimestampedSlotUpdate.slot_update:type_name -> solana.geyser.SlotUpdate - 23, // 3: solana.geyser.TimestampedAccountUpdate.ts:type_name -> google.protobuf.Timestamp - 2, // 4: solana.geyser.TimestampedAccountUpdate.account_update:type_name -> solana.geyser.AccountUpdate - 1, // 5: solana.geyser.MaybePartialAccountUpdate.partial_account_update:type_name -> solana.geyser.PartialAccountUpdate - 9, // 6: solana.geyser.MaybePartialAccountUpdate.hb:type_name -> solana.geyser.Heartbeat - 24, // 7: solana.geyser.BlockUpdate.rewards:type_name -> solana.storage.ConfirmedBlock.Reward - 23, // 8: solana.geyser.BlockUpdate.block_time:type_name -> google.protobuf.Timestamp - 23, // 9: solana.geyser.TimestampedBlockUpdate.ts:type_name -> google.protobuf.Timestamp - 11, // 10: solana.geyser.TimestampedBlockUpdate.block_update:type_name -> solana.geyser.BlockUpdate - 25, // 11: solana.geyser.TransactionUpdate.tx:type_name -> solana.storage.ConfirmedBlock.ConfirmedTransaction - 23, // 12: solana.geyser.TimestampedTransactionUpdate.ts:type_name -> google.protobuf.Timestamp - 13, // 13: solana.geyser.TimestampedTransactionUpdate.transaction:type_name -> solana.geyser.TransactionUpdate - 20, // 14: solana.geyser.TimestampedSlotEntryUpdate.entry_update:type_name -> solana.geyser.SlotEntryUpdate - 10, // 15: solana.geyser.Geyser.GetHeartbeatInterval:input_type -> solana.geyser.EmptyRequest - 16, // 16: solana.geyser.Geyser.SubscribeAccountUpdates:input_type -> solana.geyser.SubscribeAccountUpdatesRequest - 17, // 17: solana.geyser.Geyser.SubscribeProgramUpdates:input_type -> solana.geyser.SubscribeProgramsUpdatesRequest - 18, // 18: solana.geyser.Geyser.SubscribePartialAccountUpdates:input_type -> solana.geyser.SubscribePartialAccountUpdatesRequest - 15, // 19: solana.geyser.Geyser.SubscribeSlotUpdates:input_type -> solana.geyser.SubscribeSlotUpdateRequest - 6, // 20: solana.geyser.Geyser.SubscribeTransactionUpdates:input_type -> solana.geyser.SubscribeTransactionUpdatesRequest - 7, // 21: solana.geyser.Geyser.SubscribeBlockUpdates:input_type -> solana.geyser.SubscribeBlockUpdatesRequest - 22, // 22: solana.geyser.Geyser.SubscribeSlotEntryUpdates:input_type -> solana.geyser.SubscribeSlotEntryUpdateRequest - 19, // 23: solana.geyser.Geyser.GetHeartbeatInterval:output_type -> solana.geyser.GetHeartbeatIntervalResponse - 5, // 24: solana.geyser.Geyser.SubscribeAccountUpdates:output_type -> solana.geyser.TimestampedAccountUpdate - 5, // 25: solana.geyser.Geyser.SubscribeProgramUpdates:output_type -> solana.geyser.TimestampedAccountUpdate - 8, // 26: solana.geyser.Geyser.SubscribePartialAccountUpdates:output_type -> solana.geyser.MaybePartialAccountUpdate - 4, // 27: solana.geyser.Geyser.SubscribeSlotUpdates:output_type -> solana.geyser.TimestampedSlotUpdate - 14, // 28: solana.geyser.Geyser.SubscribeTransactionUpdates:output_type -> solana.geyser.TimestampedTransactionUpdate - 12, // 29: solana.geyser.Geyser.SubscribeBlockUpdates:output_type -> solana.geyser.TimestampedBlockUpdate - 21, // 30: solana.geyser.Geyser.SubscribeSlotEntryUpdates:output_type -> solana.geyser.TimestampedSlotEntryUpdate - 23, // [23:31] is the sub-list for method output_type - 15, // [15:23] is the sub-list for method input_type - 15, // [15:15] is the sub-list for extension type_name - 15, // [15:15] is the sub-list for extension extendee - 0, // [0:15] is the sub-list for field type_name + 38, // 0: geyser.SubscribeRequest.accounts:type_name -> geyser.SubscribeRequest.AccountsEntry + 39, // 1: geyser.SubscribeRequest.slots:type_name -> geyser.SubscribeRequest.SlotsEntry + 40, // 2: geyser.SubscribeRequest.transactions:type_name -> geyser.SubscribeRequest.TransactionsEntry + 41, // 3: geyser.SubscribeRequest.transactions_status:type_name -> geyser.SubscribeRequest.TransactionsStatusEntry + 42, // 4: geyser.SubscribeRequest.blocks:type_name -> geyser.SubscribeRequest.BlocksEntry + 43, // 5: geyser.SubscribeRequest.blocks_meta:type_name -> geyser.SubscribeRequest.BlocksMetaEntry + 44, // 6: geyser.SubscribeRequest.entry:type_name -> geyser.SubscribeRequest.EntryEntry + 0, // 7: geyser.SubscribeRequest.commitment:type_name -> geyser.CommitmentLevel + 12, // 8: geyser.SubscribeRequest.accounts_data_slice:type_name -> geyser.SubscribeRequestAccountsDataSlice + 13, // 9: geyser.SubscribeRequest.ping:type_name -> geyser.SubscribeRequestPing + 4, // 10: geyser.SubscribeRequestFilterAccounts.filters:type_name -> geyser.SubscribeRequestFilterAccountsFilter + 5, // 11: geyser.SubscribeRequestFilterAccountsFilter.memcmp:type_name -> geyser.SubscribeRequestFilterAccountsFilterMemcmp + 6, // 12: geyser.SubscribeRequestFilterAccountsFilter.lamports:type_name -> geyser.SubscribeRequestFilterAccountsFilterLamports + 15, // 13: geyser.SubscribeUpdate.account:type_name -> geyser.SubscribeUpdateAccount + 17, // 14: geyser.SubscribeUpdate.slot:type_name -> geyser.SubscribeUpdateSlot + 18, // 15: geyser.SubscribeUpdate.transaction:type_name -> geyser.SubscribeUpdateTransaction + 20, // 16: geyser.SubscribeUpdate.transaction_status:type_name -> geyser.SubscribeUpdateTransactionStatus + 21, // 17: geyser.SubscribeUpdate.block:type_name -> geyser.SubscribeUpdateBlock + 24, // 18: geyser.SubscribeUpdate.ping:type_name -> geyser.SubscribeUpdatePing + 25, // 19: geyser.SubscribeUpdate.pong:type_name -> geyser.SubscribeUpdatePong + 22, // 20: geyser.SubscribeUpdate.block_meta:type_name -> geyser.SubscribeUpdateBlockMeta + 23, // 21: geyser.SubscribeUpdate.entry:type_name -> geyser.SubscribeUpdateEntry + 45, // 22: geyser.SubscribeUpdate.created_at:type_name -> google.protobuf.Timestamp + 16, // 23: geyser.SubscribeUpdateAccount.account:type_name -> geyser.SubscribeUpdateAccountInfo + 1, // 24: geyser.SubscribeUpdateSlot.status:type_name -> geyser.SlotStatus + 19, // 25: geyser.SubscribeUpdateTransaction.transaction:type_name -> geyser.SubscribeUpdateTransactionInfo + 46, // 26: geyser.SubscribeUpdateTransactionInfo.transaction:type_name -> solana.storage.ConfirmedBlock.Transaction + 47, // 27: geyser.SubscribeUpdateTransactionInfo.meta:type_name -> solana.storage.ConfirmedBlock.TransactionStatusMeta + 48, // 28: geyser.SubscribeUpdateTransactionStatus.err:type_name -> solana.storage.ConfirmedBlock.TransactionError + 49, // 29: geyser.SubscribeUpdateBlock.rewards:type_name -> solana.storage.ConfirmedBlock.Rewards + 50, // 30: geyser.SubscribeUpdateBlock.block_time:type_name -> solana.storage.ConfirmedBlock.UnixTimestamp + 51, // 31: geyser.SubscribeUpdateBlock.block_height:type_name -> solana.storage.ConfirmedBlock.BlockHeight + 19, // 32: geyser.SubscribeUpdateBlock.transactions:type_name -> geyser.SubscribeUpdateTransactionInfo + 16, // 33: geyser.SubscribeUpdateBlock.accounts:type_name -> geyser.SubscribeUpdateAccountInfo + 23, // 34: geyser.SubscribeUpdateBlock.entries:type_name -> geyser.SubscribeUpdateEntry + 49, // 35: geyser.SubscribeUpdateBlockMeta.rewards:type_name -> solana.storage.ConfirmedBlock.Rewards + 50, // 36: geyser.SubscribeUpdateBlockMeta.block_time:type_name -> solana.storage.ConfirmedBlock.UnixTimestamp + 51, // 37: geyser.SubscribeUpdateBlockMeta.block_height:type_name -> solana.storage.ConfirmedBlock.BlockHeight + 0, // 38: geyser.GetLatestBlockhashRequest.commitment:type_name -> geyser.CommitmentLevel + 0, // 39: geyser.GetBlockHeightRequest.commitment:type_name -> geyser.CommitmentLevel + 0, // 40: geyser.GetSlotRequest.commitment:type_name -> geyser.CommitmentLevel + 0, // 41: geyser.IsBlockhashValidRequest.commitment:type_name -> geyser.CommitmentLevel + 3, // 42: geyser.SubscribeRequest.AccountsEntry.value:type_name -> geyser.SubscribeRequestFilterAccounts + 7, // 43: geyser.SubscribeRequest.SlotsEntry.value:type_name -> geyser.SubscribeRequestFilterSlots + 8, // 44: geyser.SubscribeRequest.TransactionsEntry.value:type_name -> geyser.SubscribeRequestFilterTransactions + 8, // 45: geyser.SubscribeRequest.TransactionsStatusEntry.value:type_name -> geyser.SubscribeRequestFilterTransactions + 9, // 46: geyser.SubscribeRequest.BlocksEntry.value:type_name -> geyser.SubscribeRequestFilterBlocks + 10, // 47: geyser.SubscribeRequest.BlocksMetaEntry.value:type_name -> geyser.SubscribeRequestFilterBlocksMeta + 11, // 48: geyser.SubscribeRequest.EntryEntry.value:type_name -> geyser.SubscribeRequestFilterEntry + 2, // 49: geyser.Geyser.Subscribe:input_type -> geyser.SubscribeRequest + 26, // 50: geyser.Geyser.Ping:input_type -> geyser.PingRequest + 28, // 51: geyser.Geyser.GetLatestBlockhash:input_type -> geyser.GetLatestBlockhashRequest + 30, // 52: geyser.Geyser.GetBlockHeight:input_type -> geyser.GetBlockHeightRequest + 32, // 53: geyser.Geyser.GetSlot:input_type -> geyser.GetSlotRequest + 36, // 54: geyser.Geyser.IsBlockhashValid:input_type -> geyser.IsBlockhashValidRequest + 34, // 55: geyser.Geyser.GetVersion:input_type -> geyser.GetVersionRequest + 14, // 56: geyser.Geyser.Subscribe:output_type -> geyser.SubscribeUpdate + 27, // 57: geyser.Geyser.Ping:output_type -> geyser.PongResponse + 29, // 58: geyser.Geyser.GetLatestBlockhash:output_type -> geyser.GetLatestBlockhashResponse + 31, // 59: geyser.Geyser.GetBlockHeight:output_type -> geyser.GetBlockHeightResponse + 33, // 60: geyser.Geyser.GetSlot:output_type -> geyser.GetSlotResponse + 37, // 61: geyser.Geyser.IsBlockhashValid:output_type -> geyser.IsBlockhashValidResponse + 35, // 62: geyser.Geyser.GetVersion:output_type -> geyser.GetVersionResponse + 56, // [56:63] is the sub-list for method output_type + 49, // [49:56] is the sub-list for method input_type + 49, // [49:49] is the sub-list for extension type_name + 49, // [49:49] is the sub-list for extension extendee + 0, // [0:49] is the sub-list for field type_name } func init() { file_geyser_proto_init() } @@ -1755,10 +3386,10 @@ func file_geyser_proto_init() { if File_geyser_proto != nil { return } - file_confirmed_block_proto_init() + file_solana_storage_proto_init() if !protoimpl.UnsafeEnabled { file_geyser_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PartialAccountUpdate); i { + switch v := v.(*SubscribeRequest); i { case 0: return &v.state case 1: @@ -1770,7 +3401,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AccountUpdate); i { + switch v := v.(*SubscribeRequestFilterAccounts); i { case 0: return &v.state case 1: @@ -1782,7 +3413,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SlotUpdate); i { + switch v := v.(*SubscribeRequestFilterAccountsFilter); i { case 0: return &v.state case 1: @@ -1794,7 +3425,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TimestampedSlotUpdate); i { + switch v := v.(*SubscribeRequestFilterAccountsFilterMemcmp); i { case 0: return &v.state case 1: @@ -1806,7 +3437,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TimestampedAccountUpdate); i { + switch v := v.(*SubscribeRequestFilterAccountsFilterLamports); i { case 0: return &v.state case 1: @@ -1818,7 +3449,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeTransactionUpdatesRequest); i { + switch v := v.(*SubscribeRequestFilterSlots); i { case 0: return &v.state case 1: @@ -1830,7 +3461,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeBlockUpdatesRequest); i { + switch v := v.(*SubscribeRequestFilterTransactions); i { case 0: return &v.state case 1: @@ -1842,7 +3473,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MaybePartialAccountUpdate); i { + switch v := v.(*SubscribeRequestFilterBlocks); i { case 0: return &v.state case 1: @@ -1854,7 +3485,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Heartbeat); i { + switch v := v.(*SubscribeRequestFilterBlocksMeta); i { case 0: return &v.state case 1: @@ -1866,7 +3497,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EmptyRequest); i { + switch v := v.(*SubscribeRequestFilterEntry); i { case 0: return &v.state case 1: @@ -1878,7 +3509,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockUpdate); i { + switch v := v.(*SubscribeRequestAccountsDataSlice); i { case 0: return &v.state case 1: @@ -1890,7 +3521,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TimestampedBlockUpdate); i { + switch v := v.(*SubscribeRequestPing); i { case 0: return &v.state case 1: @@ -1902,7 +3533,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionUpdate); i { + switch v := v.(*SubscribeUpdate); i { case 0: return &v.state case 1: @@ -1914,7 +3545,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TimestampedTransactionUpdate); i { + switch v := v.(*SubscribeUpdateAccount); i { case 0: return &v.state case 1: @@ -1926,7 +3557,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeSlotUpdateRequest); i { + switch v := v.(*SubscribeUpdateAccountInfo); i { case 0: return &v.state case 1: @@ -1938,7 +3569,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeAccountUpdatesRequest); i { + switch v := v.(*SubscribeUpdateSlot); i { case 0: return &v.state case 1: @@ -1950,7 +3581,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeProgramsUpdatesRequest); i { + switch v := v.(*SubscribeUpdateTransaction); i { case 0: return &v.state case 1: @@ -1962,7 +3593,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribePartialAccountUpdatesRequest); i { + switch v := v.(*SubscribeUpdateTransactionInfo); i { case 0: return &v.state case 1: @@ -1974,7 +3605,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetHeartbeatIntervalResponse); i { + switch v := v.(*SubscribeUpdateTransactionStatus); i { case 0: return &v.state case 1: @@ -1986,7 +3617,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SlotEntryUpdate); i { + switch v := v.(*SubscribeUpdateBlock); i { case 0: return &v.state case 1: @@ -1998,7 +3629,7 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TimestampedSlotEntryUpdate); i { + switch v := v.(*SubscribeUpdateBlockMeta); i { case 0: return &v.state case 1: @@ -2010,7 +3641,175 @@ func file_geyser_proto_init() { } } file_geyser_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeSlotEntryUpdateRequest); i { + switch v := v.(*SubscribeUpdateEntry); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_geyser_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubscribeUpdatePing); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_geyser_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubscribeUpdatePong); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_geyser_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PingRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_geyser_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PongResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_geyser_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetLatestBlockhashRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_geyser_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetLatestBlockhashResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_geyser_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBlockHeightRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_geyser_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBlockHeightResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_geyser_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetSlotRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_geyser_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetSlotResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_geyser_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetVersionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_geyser_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetVersionResponse); 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.(*IsBlockhashValidRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_geyser_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IsBlockhashValidResponse); i { case 0: return &v.state case 1: @@ -2024,19 +3823,50 @@ func file_geyser_proto_init() { } file_geyser_proto_msgTypes[0].OneofWrappers = []interface{}{} file_geyser_proto_msgTypes[1].OneofWrappers = []interface{}{} - file_geyser_proto_msgTypes[2].OneofWrappers = []interface{}{} - file_geyser_proto_msgTypes[7].OneofWrappers = []interface{}{ - (*MaybePartialAccountUpdate_PartialAccountUpdate)(nil), - (*MaybePartialAccountUpdate_Hb)(nil), - } - file_geyser_proto_msgTypes[10].OneofWrappers = []interface{}{} + file_geyser_proto_msgTypes[2].OneofWrappers = []interface{}{ + (*SubscribeRequestFilterAccountsFilter_Memcmp)(nil), + (*SubscribeRequestFilterAccountsFilter_Datasize)(nil), + (*SubscribeRequestFilterAccountsFilter_TokenAccountState)(nil), + (*SubscribeRequestFilterAccountsFilter_Lamports)(nil), + } + file_geyser_proto_msgTypes[3].OneofWrappers = []interface{}{ + (*SubscribeRequestFilterAccountsFilterMemcmp_Bytes)(nil), + (*SubscribeRequestFilterAccountsFilterMemcmp_Base58)(nil), + (*SubscribeRequestFilterAccountsFilterMemcmp_Base64)(nil), + } + file_geyser_proto_msgTypes[4].OneofWrappers = []interface{}{ + (*SubscribeRequestFilterAccountsFilterLamports_Eq)(nil), + (*SubscribeRequestFilterAccountsFilterLamports_Ne)(nil), + (*SubscribeRequestFilterAccountsFilterLamports_Lt)(nil), + (*SubscribeRequestFilterAccountsFilterLamports_Gt)(nil), + } + file_geyser_proto_msgTypes[5].OneofWrappers = []interface{}{} + file_geyser_proto_msgTypes[6].OneofWrappers = []interface{}{} + file_geyser_proto_msgTypes[7].OneofWrappers = []interface{}{} + file_geyser_proto_msgTypes[12].OneofWrappers = []interface{}{ + (*SubscribeUpdate_Account)(nil), + (*SubscribeUpdate_Slot)(nil), + (*SubscribeUpdate_Transaction)(nil), + (*SubscribeUpdate_TransactionStatus)(nil), + (*SubscribeUpdate_Block)(nil), + (*SubscribeUpdate_Ping)(nil), + (*SubscribeUpdate_Pong)(nil), + (*SubscribeUpdate_BlockMeta)(nil), + (*SubscribeUpdate_Entry)(nil), + } + file_geyser_proto_msgTypes[14].OneofWrappers = []interface{}{} + file_geyser_proto_msgTypes[15].OneofWrappers = []interface{}{} + file_geyser_proto_msgTypes[26].OneofWrappers = []interface{}{} + file_geyser_proto_msgTypes[28].OneofWrappers = []interface{}{} + file_geyser_proto_msgTypes[30].OneofWrappers = []interface{}{} + file_geyser_proto_msgTypes[34].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_geyser_proto_rawDesc, - NumEnums: 1, - NumMessages: 22, + NumEnums: 2, + NumMessages: 43, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/code/async/geyser/api/gen/geyser.pb.validate.go b/pkg/code/async/geyser/api/gen/geyser.pb.validate.go deleted file mode 100644 index 82b5187c..00000000 --- a/pkg/code/async/geyser/api/gen/geyser.pb.validate.go +++ /dev/null @@ -1,2779 +0,0 @@ -// Code generated by protoc-gen-validate. DO NOT EDIT. -// source: geyser.proto - -package geyser - -import ( - "bytes" - "errors" - "fmt" - "net" - "net/mail" - "net/url" - "regexp" - "sort" - "strings" - "time" - "unicode/utf8" - - "google.golang.org/protobuf/types/known/anypb" -) - -// ensure the imports are used -var ( - _ = bytes.MinRead - _ = errors.New("") - _ = fmt.Print - _ = utf8.UTFMax - _ = (*regexp.Regexp)(nil) - _ = (*strings.Reader)(nil) - _ = net.IPv4len - _ = time.Duration(0) - _ = (*url.URL)(nil) - _ = (*mail.Address)(nil) - _ = anypb.Any{} - _ = sort.Sort -) - -// Validate checks the field values on PartialAccountUpdate with the rules -// defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *PartialAccountUpdate) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on PartialAccountUpdate with the rules -// defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// PartialAccountUpdateMultiError, or nil if none found. -func (m *PartialAccountUpdate) ValidateAll() error { - return m.validate(true) -} - -func (m *PartialAccountUpdate) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for Slot - - // no validation rules for Pubkey - - // no validation rules for Owner - - // no validation rules for IsStartup - - // no validation rules for Seq - - // no validation rules for ReplicaVersion - - if m.TxSignature != nil { - // no validation rules for TxSignature - } - - if len(errors) > 0 { - return PartialAccountUpdateMultiError(errors) - } - - return nil -} - -// PartialAccountUpdateMultiError is an error wrapping multiple validation -// errors returned by PartialAccountUpdate.ValidateAll() if the designated -// constraints aren't met. -type PartialAccountUpdateMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m PartialAccountUpdateMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m PartialAccountUpdateMultiError) AllErrors() []error { return m } - -// PartialAccountUpdateValidationError is the validation error returned by -// PartialAccountUpdate.Validate if the designated constraints aren't met. -type PartialAccountUpdateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e PartialAccountUpdateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e PartialAccountUpdateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e PartialAccountUpdateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e PartialAccountUpdateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e PartialAccountUpdateValidationError) ErrorName() string { - return "PartialAccountUpdateValidationError" -} - -// Error satisfies the builtin error interface -func (e PartialAccountUpdateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sPartialAccountUpdate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = PartialAccountUpdateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = PartialAccountUpdateValidationError{} - -// Validate checks the field values on AccountUpdate with the rules defined in -// the proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *AccountUpdate) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on AccountUpdate with the rules defined -// in the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in AccountUpdateMultiError, or -// nil if none found. -func (m *AccountUpdate) ValidateAll() error { - return m.validate(true) -} - -func (m *AccountUpdate) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for Slot - - // no validation rules for Pubkey - - // no validation rules for Lamports - - // no validation rules for Owner - - // no validation rules for IsExecutable - - // no validation rules for RentEpoch - - // no validation rules for Data - - // no validation rules for Seq - - // no validation rules for IsStartup - - // no validation rules for ReplicaVersion - - if m.TxSignature != nil { - // no validation rules for TxSignature - } - - if len(errors) > 0 { - return AccountUpdateMultiError(errors) - } - - return nil -} - -// AccountUpdateMultiError is an error wrapping multiple validation errors -// returned by AccountUpdate.ValidateAll() if the designated constraints -// aren't met. -type AccountUpdateMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m AccountUpdateMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m AccountUpdateMultiError) AllErrors() []error { return m } - -// AccountUpdateValidationError is the validation error returned by -// AccountUpdate.Validate if the designated constraints aren't met. -type AccountUpdateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e AccountUpdateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e AccountUpdateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e AccountUpdateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e AccountUpdateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e AccountUpdateValidationError) ErrorName() string { return "AccountUpdateValidationError" } - -// Error satisfies the builtin error interface -func (e AccountUpdateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sAccountUpdate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = AccountUpdateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = AccountUpdateValidationError{} - -// Validate checks the field values on SlotUpdate with the rules defined in the -// proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *SlotUpdate) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on SlotUpdate with the rules defined in -// the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in SlotUpdateMultiError, or -// nil if none found. -func (m *SlotUpdate) ValidateAll() error { - return m.validate(true) -} - -func (m *SlotUpdate) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for Slot - - // no validation rules for Status - - if m.ParentSlot != nil { - // no validation rules for ParentSlot - } - - if len(errors) > 0 { - return SlotUpdateMultiError(errors) - } - - return nil -} - -// SlotUpdateMultiError is an error wrapping multiple validation errors -// returned by SlotUpdate.ValidateAll() if the designated constraints aren't met. -type SlotUpdateMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m SlotUpdateMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m SlotUpdateMultiError) AllErrors() []error { return m } - -// SlotUpdateValidationError is the validation error returned by -// SlotUpdate.Validate if the designated constraints aren't met. -type SlotUpdateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e SlotUpdateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e SlotUpdateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e SlotUpdateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e SlotUpdateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e SlotUpdateValidationError) ErrorName() string { return "SlotUpdateValidationError" } - -// Error satisfies the builtin error interface -func (e SlotUpdateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sSlotUpdate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = SlotUpdateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = SlotUpdateValidationError{} - -// Validate checks the field values on TimestampedSlotUpdate with the rules -// defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *TimestampedSlotUpdate) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on TimestampedSlotUpdate with the rules -// defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// TimestampedSlotUpdateMultiError, or nil if none found. -func (m *TimestampedSlotUpdate) ValidateAll() error { - return m.validate(true) -} - -func (m *TimestampedSlotUpdate) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if all { - switch v := interface{}(m.GetTs()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, TimestampedSlotUpdateValidationError{ - field: "Ts", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, TimestampedSlotUpdateValidationError{ - field: "Ts", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetTs()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TimestampedSlotUpdateValidationError{ - field: "Ts", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if all { - switch v := interface{}(m.GetSlotUpdate()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, TimestampedSlotUpdateValidationError{ - field: "SlotUpdate", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, TimestampedSlotUpdateValidationError{ - field: "SlotUpdate", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetSlotUpdate()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TimestampedSlotUpdateValidationError{ - field: "SlotUpdate", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if len(errors) > 0 { - return TimestampedSlotUpdateMultiError(errors) - } - - return nil -} - -// TimestampedSlotUpdateMultiError is an error wrapping multiple validation -// errors returned by TimestampedSlotUpdate.ValidateAll() if the designated -// constraints aren't met. -type TimestampedSlotUpdateMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m TimestampedSlotUpdateMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m TimestampedSlotUpdateMultiError) AllErrors() []error { return m } - -// TimestampedSlotUpdateValidationError is the validation error returned by -// TimestampedSlotUpdate.Validate if the designated constraints aren't met. -type TimestampedSlotUpdateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e TimestampedSlotUpdateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e TimestampedSlotUpdateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e TimestampedSlotUpdateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e TimestampedSlotUpdateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e TimestampedSlotUpdateValidationError) ErrorName() string { - return "TimestampedSlotUpdateValidationError" -} - -// Error satisfies the builtin error interface -func (e TimestampedSlotUpdateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sTimestampedSlotUpdate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = TimestampedSlotUpdateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = TimestampedSlotUpdateValidationError{} - -// Validate checks the field values on TimestampedAccountUpdate with the rules -// defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *TimestampedAccountUpdate) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on TimestampedAccountUpdate with the -// rules defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// TimestampedAccountUpdateMultiError, or nil if none found. -func (m *TimestampedAccountUpdate) ValidateAll() error { - return m.validate(true) -} - -func (m *TimestampedAccountUpdate) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if all { - switch v := interface{}(m.GetTs()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, TimestampedAccountUpdateValidationError{ - field: "Ts", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, TimestampedAccountUpdateValidationError{ - field: "Ts", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetTs()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TimestampedAccountUpdateValidationError{ - field: "Ts", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if all { - switch v := interface{}(m.GetAccountUpdate()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, TimestampedAccountUpdateValidationError{ - field: "AccountUpdate", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, TimestampedAccountUpdateValidationError{ - field: "AccountUpdate", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetAccountUpdate()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TimestampedAccountUpdateValidationError{ - field: "AccountUpdate", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if len(errors) > 0 { - return TimestampedAccountUpdateMultiError(errors) - } - - return nil -} - -// TimestampedAccountUpdateMultiError is an error wrapping multiple validation -// errors returned by TimestampedAccountUpdate.ValidateAll() if the designated -// constraints aren't met. -type TimestampedAccountUpdateMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m TimestampedAccountUpdateMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m TimestampedAccountUpdateMultiError) AllErrors() []error { return m } - -// TimestampedAccountUpdateValidationError is the validation error returned by -// TimestampedAccountUpdate.Validate if the designated constraints aren't met. -type TimestampedAccountUpdateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e TimestampedAccountUpdateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e TimestampedAccountUpdateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e TimestampedAccountUpdateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e TimestampedAccountUpdateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e TimestampedAccountUpdateValidationError) ErrorName() string { - return "TimestampedAccountUpdateValidationError" -} - -// Error satisfies the builtin error interface -func (e TimestampedAccountUpdateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sTimestampedAccountUpdate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = TimestampedAccountUpdateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = TimestampedAccountUpdateValidationError{} - -// Validate checks the field values on SubscribeTransactionUpdatesRequest with -// the rules defined in the proto definition for this message. If any rules -// are violated, the first error encountered is returned, or nil if there are -// no violations. -func (m *SubscribeTransactionUpdatesRequest) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on SubscribeTransactionUpdatesRequest -// with the rules defined in the proto definition for this message. If any -// rules are violated, the result is a list of violation errors wrapped in -// SubscribeTransactionUpdatesRequestMultiError, or nil if none found. -func (m *SubscribeTransactionUpdatesRequest) ValidateAll() error { - return m.validate(true) -} - -func (m *SubscribeTransactionUpdatesRequest) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if len(errors) > 0 { - return SubscribeTransactionUpdatesRequestMultiError(errors) - } - - return nil -} - -// SubscribeTransactionUpdatesRequestMultiError is an error wrapping multiple -// validation errors returned by -// SubscribeTransactionUpdatesRequest.ValidateAll() if the designated -// constraints aren't met. -type SubscribeTransactionUpdatesRequestMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m SubscribeTransactionUpdatesRequestMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m SubscribeTransactionUpdatesRequestMultiError) AllErrors() []error { return m } - -// SubscribeTransactionUpdatesRequestValidationError is the validation error -// returned by SubscribeTransactionUpdatesRequest.Validate if the designated -// constraints aren't met. -type SubscribeTransactionUpdatesRequestValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e SubscribeTransactionUpdatesRequestValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e SubscribeTransactionUpdatesRequestValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e SubscribeTransactionUpdatesRequestValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e SubscribeTransactionUpdatesRequestValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e SubscribeTransactionUpdatesRequestValidationError) ErrorName() string { - return "SubscribeTransactionUpdatesRequestValidationError" -} - -// Error satisfies the builtin error interface -func (e SubscribeTransactionUpdatesRequestValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sSubscribeTransactionUpdatesRequest.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = SubscribeTransactionUpdatesRequestValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = SubscribeTransactionUpdatesRequestValidationError{} - -// Validate checks the field values on SubscribeBlockUpdatesRequest with the -// rules defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *SubscribeBlockUpdatesRequest) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on SubscribeBlockUpdatesRequest with the -// rules defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// SubscribeBlockUpdatesRequestMultiError, or nil if none found. -func (m *SubscribeBlockUpdatesRequest) ValidateAll() error { - return m.validate(true) -} - -func (m *SubscribeBlockUpdatesRequest) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if len(errors) > 0 { - return SubscribeBlockUpdatesRequestMultiError(errors) - } - - return nil -} - -// SubscribeBlockUpdatesRequestMultiError is an error wrapping multiple -// validation errors returned by SubscribeBlockUpdatesRequest.ValidateAll() if -// the designated constraints aren't met. -type SubscribeBlockUpdatesRequestMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m SubscribeBlockUpdatesRequestMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m SubscribeBlockUpdatesRequestMultiError) AllErrors() []error { return m } - -// SubscribeBlockUpdatesRequestValidationError is the validation error returned -// by SubscribeBlockUpdatesRequest.Validate if the designated constraints -// aren't met. -type SubscribeBlockUpdatesRequestValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e SubscribeBlockUpdatesRequestValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e SubscribeBlockUpdatesRequestValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e SubscribeBlockUpdatesRequestValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e SubscribeBlockUpdatesRequestValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e SubscribeBlockUpdatesRequestValidationError) ErrorName() string { - return "SubscribeBlockUpdatesRequestValidationError" -} - -// Error satisfies the builtin error interface -func (e SubscribeBlockUpdatesRequestValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sSubscribeBlockUpdatesRequest.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = SubscribeBlockUpdatesRequestValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = SubscribeBlockUpdatesRequestValidationError{} - -// Validate checks the field values on MaybePartialAccountUpdate with the rules -// defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *MaybePartialAccountUpdate) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on MaybePartialAccountUpdate with the -// rules defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// MaybePartialAccountUpdateMultiError, or nil if none found. -func (m *MaybePartialAccountUpdate) ValidateAll() error { - return m.validate(true) -} - -func (m *MaybePartialAccountUpdate) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - switch m.Msg.(type) { - - case *MaybePartialAccountUpdate_PartialAccountUpdate: - - if all { - switch v := interface{}(m.GetPartialAccountUpdate()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, MaybePartialAccountUpdateValidationError{ - field: "PartialAccountUpdate", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, MaybePartialAccountUpdateValidationError{ - field: "PartialAccountUpdate", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetPartialAccountUpdate()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return MaybePartialAccountUpdateValidationError{ - field: "PartialAccountUpdate", - reason: "embedded message failed validation", - cause: err, - } - } - } - - case *MaybePartialAccountUpdate_Hb: - - if all { - switch v := interface{}(m.GetHb()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, MaybePartialAccountUpdateValidationError{ - field: "Hb", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, MaybePartialAccountUpdateValidationError{ - field: "Hb", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetHb()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return MaybePartialAccountUpdateValidationError{ - field: "Hb", - reason: "embedded message failed validation", - cause: err, - } - } - } - - } - - if len(errors) > 0 { - return MaybePartialAccountUpdateMultiError(errors) - } - - return nil -} - -// MaybePartialAccountUpdateMultiError is an error wrapping multiple validation -// errors returned by MaybePartialAccountUpdate.ValidateAll() if the -// designated constraints aren't met. -type MaybePartialAccountUpdateMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m MaybePartialAccountUpdateMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m MaybePartialAccountUpdateMultiError) AllErrors() []error { return m } - -// MaybePartialAccountUpdateValidationError is the validation error returned by -// MaybePartialAccountUpdate.Validate if the designated constraints aren't met. -type MaybePartialAccountUpdateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e MaybePartialAccountUpdateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e MaybePartialAccountUpdateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e MaybePartialAccountUpdateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e MaybePartialAccountUpdateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e MaybePartialAccountUpdateValidationError) ErrorName() string { - return "MaybePartialAccountUpdateValidationError" -} - -// Error satisfies the builtin error interface -func (e MaybePartialAccountUpdateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sMaybePartialAccountUpdate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = MaybePartialAccountUpdateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = MaybePartialAccountUpdateValidationError{} - -// Validate checks the field values on Heartbeat with the rules defined in the -// proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *Heartbeat) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on Heartbeat with the rules defined in -// the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in HeartbeatMultiError, or nil -// if none found. -func (m *Heartbeat) ValidateAll() error { - return m.validate(true) -} - -func (m *Heartbeat) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if len(errors) > 0 { - return HeartbeatMultiError(errors) - } - - return nil -} - -// HeartbeatMultiError is an error wrapping multiple validation errors returned -// by Heartbeat.ValidateAll() if the designated constraints aren't met. -type HeartbeatMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m HeartbeatMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m HeartbeatMultiError) AllErrors() []error { return m } - -// HeartbeatValidationError is the validation error returned by -// Heartbeat.Validate if the designated constraints aren't met. -type HeartbeatValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e HeartbeatValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e HeartbeatValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e HeartbeatValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e HeartbeatValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e HeartbeatValidationError) ErrorName() string { return "HeartbeatValidationError" } - -// Error satisfies the builtin error interface -func (e HeartbeatValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sHeartbeat.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = HeartbeatValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = HeartbeatValidationError{} - -// Validate checks the field values on EmptyRequest with the rules defined in -// the proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *EmptyRequest) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on EmptyRequest with the rules defined -// in the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in EmptyRequestMultiError, or -// nil if none found. -func (m *EmptyRequest) ValidateAll() error { - return m.validate(true) -} - -func (m *EmptyRequest) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if len(errors) > 0 { - return EmptyRequestMultiError(errors) - } - - return nil -} - -// EmptyRequestMultiError is an error wrapping multiple validation errors -// returned by EmptyRequest.ValidateAll() if the designated constraints aren't met. -type EmptyRequestMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m EmptyRequestMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m EmptyRequestMultiError) AllErrors() []error { return m } - -// EmptyRequestValidationError is the validation error returned by -// EmptyRequest.Validate if the designated constraints aren't met. -type EmptyRequestValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e EmptyRequestValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e EmptyRequestValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e EmptyRequestValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e EmptyRequestValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e EmptyRequestValidationError) ErrorName() string { return "EmptyRequestValidationError" } - -// Error satisfies the builtin error interface -func (e EmptyRequestValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sEmptyRequest.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = EmptyRequestValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = EmptyRequestValidationError{} - -// Validate checks the field values on BlockUpdate with the rules defined in -// the proto definition for this message. If any rules are violated, the first -// error encountered is returned, or nil if there are no violations. -func (m *BlockUpdate) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on BlockUpdate with the rules defined in -// the proto definition for this message. If any rules are violated, the -// result is a list of violation errors wrapped in BlockUpdateMultiError, or -// nil if none found. -func (m *BlockUpdate) ValidateAll() error { - return m.validate(true) -} - -func (m *BlockUpdate) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for Slot - - // no validation rules for Blockhash - - for idx, item := range m.GetRewards() { - _, _ = idx, item - - if all { - switch v := interface{}(item).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, BlockUpdateValidationError{ - field: fmt.Sprintf("Rewards[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, BlockUpdateValidationError{ - field: fmt.Sprintf("Rewards[%v]", idx), - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return BlockUpdateValidationError{ - field: fmt.Sprintf("Rewards[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - - } - - if all { - switch v := interface{}(m.GetBlockTime()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, BlockUpdateValidationError{ - field: "BlockTime", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, BlockUpdateValidationError{ - field: "BlockTime", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetBlockTime()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return BlockUpdateValidationError{ - field: "BlockTime", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if m.BlockHeight != nil { - // no validation rules for BlockHeight - } - - if m.ExecutedTransactionCount != nil { - // no validation rules for ExecutedTransactionCount - } - - if m.EntryCount != nil { - // no validation rules for EntryCount - } - - if len(errors) > 0 { - return BlockUpdateMultiError(errors) - } - - return nil -} - -// BlockUpdateMultiError is an error wrapping multiple validation errors -// returned by BlockUpdate.ValidateAll() if the designated constraints aren't met. -type BlockUpdateMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m BlockUpdateMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m BlockUpdateMultiError) AllErrors() []error { return m } - -// BlockUpdateValidationError is the validation error returned by -// BlockUpdate.Validate if the designated constraints aren't met. -type BlockUpdateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e BlockUpdateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e BlockUpdateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e BlockUpdateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e BlockUpdateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e BlockUpdateValidationError) ErrorName() string { return "BlockUpdateValidationError" } - -// Error satisfies the builtin error interface -func (e BlockUpdateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sBlockUpdate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = BlockUpdateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = BlockUpdateValidationError{} - -// Validate checks the field values on TimestampedBlockUpdate with the rules -// defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *TimestampedBlockUpdate) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on TimestampedBlockUpdate with the rules -// defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// TimestampedBlockUpdateMultiError, or nil if none found. -func (m *TimestampedBlockUpdate) ValidateAll() error { - return m.validate(true) -} - -func (m *TimestampedBlockUpdate) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if all { - switch v := interface{}(m.GetTs()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, TimestampedBlockUpdateValidationError{ - field: "Ts", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, TimestampedBlockUpdateValidationError{ - field: "Ts", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetTs()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TimestampedBlockUpdateValidationError{ - field: "Ts", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if all { - switch v := interface{}(m.GetBlockUpdate()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, TimestampedBlockUpdateValidationError{ - field: "BlockUpdate", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, TimestampedBlockUpdateValidationError{ - field: "BlockUpdate", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetBlockUpdate()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TimestampedBlockUpdateValidationError{ - field: "BlockUpdate", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if len(errors) > 0 { - return TimestampedBlockUpdateMultiError(errors) - } - - return nil -} - -// TimestampedBlockUpdateMultiError is an error wrapping multiple validation -// errors returned by TimestampedBlockUpdate.ValidateAll() if the designated -// constraints aren't met. -type TimestampedBlockUpdateMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m TimestampedBlockUpdateMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m TimestampedBlockUpdateMultiError) AllErrors() []error { return m } - -// TimestampedBlockUpdateValidationError is the validation error returned by -// TimestampedBlockUpdate.Validate if the designated constraints aren't met. -type TimestampedBlockUpdateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e TimestampedBlockUpdateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e TimestampedBlockUpdateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e TimestampedBlockUpdateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e TimestampedBlockUpdateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e TimestampedBlockUpdateValidationError) ErrorName() string { - return "TimestampedBlockUpdateValidationError" -} - -// Error satisfies the builtin error interface -func (e TimestampedBlockUpdateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sTimestampedBlockUpdate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = TimestampedBlockUpdateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = TimestampedBlockUpdateValidationError{} - -// Validate checks the field values on TransactionUpdate with the rules defined -// in the proto definition for this message. If any rules are violated, the -// first error encountered is returned, or nil if there are no violations. -func (m *TransactionUpdate) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on TransactionUpdate with the rules -// defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// TransactionUpdateMultiError, or nil if none found. -func (m *TransactionUpdate) ValidateAll() error { - return m.validate(true) -} - -func (m *TransactionUpdate) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for Slot - - // no validation rules for Signature - - // no validation rules for IsVote - - // no validation rules for TxIdx - - if all { - switch v := interface{}(m.GetTx()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, TransactionUpdateValidationError{ - field: "Tx", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, TransactionUpdateValidationError{ - field: "Tx", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetTx()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TransactionUpdateValidationError{ - field: "Tx", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if len(errors) > 0 { - return TransactionUpdateMultiError(errors) - } - - return nil -} - -// TransactionUpdateMultiError is an error wrapping multiple validation errors -// returned by TransactionUpdate.ValidateAll() if the designated constraints -// aren't met. -type TransactionUpdateMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m TransactionUpdateMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m TransactionUpdateMultiError) AllErrors() []error { return m } - -// TransactionUpdateValidationError is the validation error returned by -// TransactionUpdate.Validate if the designated constraints aren't met. -type TransactionUpdateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e TransactionUpdateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e TransactionUpdateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e TransactionUpdateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e TransactionUpdateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e TransactionUpdateValidationError) ErrorName() string { - return "TransactionUpdateValidationError" -} - -// Error satisfies the builtin error interface -func (e TransactionUpdateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sTransactionUpdate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = TransactionUpdateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = TransactionUpdateValidationError{} - -// Validate checks the field values on TimestampedTransactionUpdate with the -// rules defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *TimestampedTransactionUpdate) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on TimestampedTransactionUpdate with the -// rules defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// TimestampedTransactionUpdateMultiError, or nil if none found. -func (m *TimestampedTransactionUpdate) ValidateAll() error { - return m.validate(true) -} - -func (m *TimestampedTransactionUpdate) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if all { - switch v := interface{}(m.GetTs()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, TimestampedTransactionUpdateValidationError{ - field: "Ts", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, TimestampedTransactionUpdateValidationError{ - field: "Ts", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetTs()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TimestampedTransactionUpdateValidationError{ - field: "Ts", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if all { - switch v := interface{}(m.GetTransaction()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, TimestampedTransactionUpdateValidationError{ - field: "Transaction", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, TimestampedTransactionUpdateValidationError{ - field: "Transaction", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetTransaction()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TimestampedTransactionUpdateValidationError{ - field: "Transaction", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if len(errors) > 0 { - return TimestampedTransactionUpdateMultiError(errors) - } - - return nil -} - -// TimestampedTransactionUpdateMultiError is an error wrapping multiple -// validation errors returned by TimestampedTransactionUpdate.ValidateAll() if -// the designated constraints aren't met. -type TimestampedTransactionUpdateMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m TimestampedTransactionUpdateMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m TimestampedTransactionUpdateMultiError) AllErrors() []error { return m } - -// TimestampedTransactionUpdateValidationError is the validation error returned -// by TimestampedTransactionUpdate.Validate if the designated constraints -// aren't met. -type TimestampedTransactionUpdateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e TimestampedTransactionUpdateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e TimestampedTransactionUpdateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e TimestampedTransactionUpdateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e TimestampedTransactionUpdateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e TimestampedTransactionUpdateValidationError) ErrorName() string { - return "TimestampedTransactionUpdateValidationError" -} - -// Error satisfies the builtin error interface -func (e TimestampedTransactionUpdateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sTimestampedTransactionUpdate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = TimestampedTransactionUpdateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = TimestampedTransactionUpdateValidationError{} - -// Validate checks the field values on SubscribeSlotUpdateRequest with the -// rules defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *SubscribeSlotUpdateRequest) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on SubscribeSlotUpdateRequest with the -// rules defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// SubscribeSlotUpdateRequestMultiError, or nil if none found. -func (m *SubscribeSlotUpdateRequest) ValidateAll() error { - return m.validate(true) -} - -func (m *SubscribeSlotUpdateRequest) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if len(errors) > 0 { - return SubscribeSlotUpdateRequestMultiError(errors) - } - - return nil -} - -// SubscribeSlotUpdateRequestMultiError is an error wrapping multiple -// validation errors returned by SubscribeSlotUpdateRequest.ValidateAll() if -// the designated constraints aren't met. -type SubscribeSlotUpdateRequestMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m SubscribeSlotUpdateRequestMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m SubscribeSlotUpdateRequestMultiError) AllErrors() []error { return m } - -// SubscribeSlotUpdateRequestValidationError is the validation error returned -// by SubscribeSlotUpdateRequest.Validate if the designated constraints aren't met. -type SubscribeSlotUpdateRequestValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e SubscribeSlotUpdateRequestValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e SubscribeSlotUpdateRequestValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e SubscribeSlotUpdateRequestValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e SubscribeSlotUpdateRequestValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e SubscribeSlotUpdateRequestValidationError) ErrorName() string { - return "SubscribeSlotUpdateRequestValidationError" -} - -// Error satisfies the builtin error interface -func (e SubscribeSlotUpdateRequestValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sSubscribeSlotUpdateRequest.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = SubscribeSlotUpdateRequestValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = SubscribeSlotUpdateRequestValidationError{} - -// Validate checks the field values on SubscribeAccountUpdatesRequest with the -// rules defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *SubscribeAccountUpdatesRequest) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on SubscribeAccountUpdatesRequest with -// the rules defined in the proto definition for this message. If any rules -// are violated, the result is a list of violation errors wrapped in -// SubscribeAccountUpdatesRequestMultiError, or nil if none found. -func (m *SubscribeAccountUpdatesRequest) ValidateAll() error { - return m.validate(true) -} - -func (m *SubscribeAccountUpdatesRequest) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if len(errors) > 0 { - return SubscribeAccountUpdatesRequestMultiError(errors) - } - - return nil -} - -// SubscribeAccountUpdatesRequestMultiError is an error wrapping multiple -// validation errors returned by SubscribeAccountUpdatesRequest.ValidateAll() -// if the designated constraints aren't met. -type SubscribeAccountUpdatesRequestMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m SubscribeAccountUpdatesRequestMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m SubscribeAccountUpdatesRequestMultiError) AllErrors() []error { return m } - -// SubscribeAccountUpdatesRequestValidationError is the validation error -// returned by SubscribeAccountUpdatesRequest.Validate if the designated -// constraints aren't met. -type SubscribeAccountUpdatesRequestValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e SubscribeAccountUpdatesRequestValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e SubscribeAccountUpdatesRequestValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e SubscribeAccountUpdatesRequestValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e SubscribeAccountUpdatesRequestValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e SubscribeAccountUpdatesRequestValidationError) ErrorName() string { - return "SubscribeAccountUpdatesRequestValidationError" -} - -// Error satisfies the builtin error interface -func (e SubscribeAccountUpdatesRequestValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sSubscribeAccountUpdatesRequest.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = SubscribeAccountUpdatesRequestValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = SubscribeAccountUpdatesRequestValidationError{} - -// Validate checks the field values on SubscribeProgramsUpdatesRequest with the -// rules defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *SubscribeProgramsUpdatesRequest) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on SubscribeProgramsUpdatesRequest with -// the rules defined in the proto definition for this message. If any rules -// are violated, the result is a list of violation errors wrapped in -// SubscribeProgramsUpdatesRequestMultiError, or nil if none found. -func (m *SubscribeProgramsUpdatesRequest) ValidateAll() error { - return m.validate(true) -} - -func (m *SubscribeProgramsUpdatesRequest) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if len(errors) > 0 { - return SubscribeProgramsUpdatesRequestMultiError(errors) - } - - return nil -} - -// SubscribeProgramsUpdatesRequestMultiError is an error wrapping multiple -// validation errors returned by SubscribeProgramsUpdatesRequest.ValidateAll() -// if the designated constraints aren't met. -type SubscribeProgramsUpdatesRequestMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m SubscribeProgramsUpdatesRequestMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m SubscribeProgramsUpdatesRequestMultiError) AllErrors() []error { return m } - -// SubscribeProgramsUpdatesRequestValidationError is the validation error -// returned by SubscribeProgramsUpdatesRequest.Validate if the designated -// constraints aren't met. -type SubscribeProgramsUpdatesRequestValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e SubscribeProgramsUpdatesRequestValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e SubscribeProgramsUpdatesRequestValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e SubscribeProgramsUpdatesRequestValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e SubscribeProgramsUpdatesRequestValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e SubscribeProgramsUpdatesRequestValidationError) ErrorName() string { - return "SubscribeProgramsUpdatesRequestValidationError" -} - -// Error satisfies the builtin error interface -func (e SubscribeProgramsUpdatesRequestValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sSubscribeProgramsUpdatesRequest.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = SubscribeProgramsUpdatesRequestValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = SubscribeProgramsUpdatesRequestValidationError{} - -// Validate checks the field values on SubscribePartialAccountUpdatesRequest -// with the rules defined in the proto definition for this message. If any -// rules are violated, the first error encountered is returned, or nil if -// there are no violations. -func (m *SubscribePartialAccountUpdatesRequest) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on SubscribePartialAccountUpdatesRequest -// with the rules defined in the proto definition for this message. If any -// rules are violated, the result is a list of violation errors wrapped in -// SubscribePartialAccountUpdatesRequestMultiError, or nil if none found. -func (m *SubscribePartialAccountUpdatesRequest) ValidateAll() error { - return m.validate(true) -} - -func (m *SubscribePartialAccountUpdatesRequest) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for SkipVoteAccounts - - if len(errors) > 0 { - return SubscribePartialAccountUpdatesRequestMultiError(errors) - } - - return nil -} - -// SubscribePartialAccountUpdatesRequestMultiError is an error wrapping -// multiple validation errors returned by -// SubscribePartialAccountUpdatesRequest.ValidateAll() if the designated -// constraints aren't met. -type SubscribePartialAccountUpdatesRequestMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m SubscribePartialAccountUpdatesRequestMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m SubscribePartialAccountUpdatesRequestMultiError) AllErrors() []error { return m } - -// SubscribePartialAccountUpdatesRequestValidationError is the validation error -// returned by SubscribePartialAccountUpdatesRequest.Validate if the -// designated constraints aren't met. -type SubscribePartialAccountUpdatesRequestValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e SubscribePartialAccountUpdatesRequestValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e SubscribePartialAccountUpdatesRequestValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e SubscribePartialAccountUpdatesRequestValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e SubscribePartialAccountUpdatesRequestValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e SubscribePartialAccountUpdatesRequestValidationError) ErrorName() string { - return "SubscribePartialAccountUpdatesRequestValidationError" -} - -// Error satisfies the builtin error interface -func (e SubscribePartialAccountUpdatesRequestValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sSubscribePartialAccountUpdatesRequest.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = SubscribePartialAccountUpdatesRequestValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = SubscribePartialAccountUpdatesRequestValidationError{} - -// Validate checks the field values on GetHeartbeatIntervalResponse with the -// rules defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *GetHeartbeatIntervalResponse) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on GetHeartbeatIntervalResponse with the -// rules defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// GetHeartbeatIntervalResponseMultiError, or nil if none found. -func (m *GetHeartbeatIntervalResponse) ValidateAll() error { - return m.validate(true) -} - -func (m *GetHeartbeatIntervalResponse) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for HeartbeatIntervalMs - - if len(errors) > 0 { - return GetHeartbeatIntervalResponseMultiError(errors) - } - - return nil -} - -// GetHeartbeatIntervalResponseMultiError is an error wrapping multiple -// validation errors returned by GetHeartbeatIntervalResponse.ValidateAll() if -// the designated constraints aren't met. -type GetHeartbeatIntervalResponseMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m GetHeartbeatIntervalResponseMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m GetHeartbeatIntervalResponseMultiError) AllErrors() []error { return m } - -// GetHeartbeatIntervalResponseValidationError is the validation error returned -// by GetHeartbeatIntervalResponse.Validate if the designated constraints -// aren't met. -type GetHeartbeatIntervalResponseValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e GetHeartbeatIntervalResponseValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e GetHeartbeatIntervalResponseValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e GetHeartbeatIntervalResponseValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e GetHeartbeatIntervalResponseValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e GetHeartbeatIntervalResponseValidationError) ErrorName() string { - return "GetHeartbeatIntervalResponseValidationError" -} - -// Error satisfies the builtin error interface -func (e GetHeartbeatIntervalResponseValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sGetHeartbeatIntervalResponse.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = GetHeartbeatIntervalResponseValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = GetHeartbeatIntervalResponseValidationError{} - -// Validate checks the field values on SlotEntryUpdate with the rules defined -// in the proto definition for this message. If any rules are violated, the -// first error encountered is returned, or nil if there are no violations. -func (m *SlotEntryUpdate) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on SlotEntryUpdate with the rules -// defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// SlotEntryUpdateMultiError, or nil if none found. -func (m *SlotEntryUpdate) ValidateAll() error { - return m.validate(true) -} - -func (m *SlotEntryUpdate) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for Slot - - // no validation rules for Index - - // no validation rules for ExecutedTransactionCount - - if len(errors) > 0 { - return SlotEntryUpdateMultiError(errors) - } - - return nil -} - -// SlotEntryUpdateMultiError is an error wrapping multiple validation errors -// returned by SlotEntryUpdate.ValidateAll() if the designated constraints -// aren't met. -type SlotEntryUpdateMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m SlotEntryUpdateMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m SlotEntryUpdateMultiError) AllErrors() []error { return m } - -// SlotEntryUpdateValidationError is the validation error returned by -// SlotEntryUpdate.Validate if the designated constraints aren't met. -type SlotEntryUpdateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e SlotEntryUpdateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e SlotEntryUpdateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e SlotEntryUpdateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e SlotEntryUpdateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e SlotEntryUpdateValidationError) ErrorName() string { return "SlotEntryUpdateValidationError" } - -// Error satisfies the builtin error interface -func (e SlotEntryUpdateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sSlotEntryUpdate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = SlotEntryUpdateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = SlotEntryUpdateValidationError{} - -// Validate checks the field values on TimestampedSlotEntryUpdate with the -// rules defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *TimestampedSlotEntryUpdate) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on TimestampedSlotEntryUpdate with the -// rules defined in the proto definition for this message. If any rules are -// violated, the result is a list of violation errors wrapped in -// TimestampedSlotEntryUpdateMultiError, or nil if none found. -func (m *TimestampedSlotEntryUpdate) ValidateAll() error { - return m.validate(true) -} - -func (m *TimestampedSlotEntryUpdate) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - // no validation rules for Ts - - if all { - switch v := interface{}(m.GetEntryUpdate()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, TimestampedSlotEntryUpdateValidationError{ - field: "EntryUpdate", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, TimestampedSlotEntryUpdateValidationError{ - field: "EntryUpdate", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetEntryUpdate()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TimestampedSlotEntryUpdateValidationError{ - field: "EntryUpdate", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if len(errors) > 0 { - return TimestampedSlotEntryUpdateMultiError(errors) - } - - return nil -} - -// TimestampedSlotEntryUpdateMultiError is an error wrapping multiple -// validation errors returned by TimestampedSlotEntryUpdate.ValidateAll() if -// the designated constraints aren't met. -type TimestampedSlotEntryUpdateMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m TimestampedSlotEntryUpdateMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m TimestampedSlotEntryUpdateMultiError) AllErrors() []error { return m } - -// TimestampedSlotEntryUpdateValidationError is the validation error returned -// by TimestampedSlotEntryUpdate.Validate if the designated constraints aren't met. -type TimestampedSlotEntryUpdateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e TimestampedSlotEntryUpdateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e TimestampedSlotEntryUpdateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e TimestampedSlotEntryUpdateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e TimestampedSlotEntryUpdateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e TimestampedSlotEntryUpdateValidationError) ErrorName() string { - return "TimestampedSlotEntryUpdateValidationError" -} - -// Error satisfies the builtin error interface -func (e TimestampedSlotEntryUpdateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sTimestampedSlotEntryUpdate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = TimestampedSlotEntryUpdateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = TimestampedSlotEntryUpdateValidationError{} - -// Validate checks the field values on SubscribeSlotEntryUpdateRequest with the -// rules defined in the proto definition for this message. If any rules are -// violated, the first error encountered is returned, or nil if there are no violations. -func (m *SubscribeSlotEntryUpdateRequest) Validate() error { - return m.validate(false) -} - -// ValidateAll checks the field values on SubscribeSlotEntryUpdateRequest with -// the rules defined in the proto definition for this message. If any rules -// are violated, the result is a list of violation errors wrapped in -// SubscribeSlotEntryUpdateRequestMultiError, or nil if none found. -func (m *SubscribeSlotEntryUpdateRequest) ValidateAll() error { - return m.validate(true) -} - -func (m *SubscribeSlotEntryUpdateRequest) validate(all bool) error { - if m == nil { - return nil - } - - var errors []error - - if len(errors) > 0 { - return SubscribeSlotEntryUpdateRequestMultiError(errors) - } - - return nil -} - -// SubscribeSlotEntryUpdateRequestMultiError is an error wrapping multiple -// validation errors returned by SubscribeSlotEntryUpdateRequest.ValidateAll() -// if the designated constraints aren't met. -type SubscribeSlotEntryUpdateRequestMultiError []error - -// Error returns a concatenation of all the error messages it wraps. -func (m SubscribeSlotEntryUpdateRequestMultiError) Error() string { - var msgs []string - for _, err := range m { - msgs = append(msgs, err.Error()) - } - return strings.Join(msgs, "; ") -} - -// AllErrors returns a list of validation violation errors. -func (m SubscribeSlotEntryUpdateRequestMultiError) AllErrors() []error { return m } - -// SubscribeSlotEntryUpdateRequestValidationError is the validation error -// returned by SubscribeSlotEntryUpdateRequest.Validate if the designated -// constraints aren't met. -type SubscribeSlotEntryUpdateRequestValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e SubscribeSlotEntryUpdateRequestValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e SubscribeSlotEntryUpdateRequestValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e SubscribeSlotEntryUpdateRequestValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e SubscribeSlotEntryUpdateRequestValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e SubscribeSlotEntryUpdateRequestValidationError) ErrorName() string { - return "SubscribeSlotEntryUpdateRequestValidationError" -} - -// Error satisfies the builtin error interface -func (e SubscribeSlotEntryUpdateRequestValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sSubscribeSlotEntryUpdateRequest.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = SubscribeSlotEntryUpdateRequestValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = SubscribeSlotEntryUpdateRequestValidationError{} diff --git a/pkg/code/async/geyser/api/gen/geyser_grpc.pb.go b/pkg/code/async/geyser/api/gen/geyser_grpc.pb.go index d16ea876..b02049ee 100644 --- a/pkg/code/async/geyser/api/gen/geyser_grpc.pb.go +++ b/pkg/code/async/geyser/api/gen/geyser_grpc.pb.go @@ -22,28 +22,13 @@ const _ = grpc.SupportPackageIsVersion7 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type GeyserClient interface { - // Invoke to get the expected heartbeat interval. - GetHeartbeatInterval(ctx context.Context, in *EmptyRequest, opts ...grpc.CallOption) (*GetHeartbeatIntervalResponse, error) - // Subscribes to account updates in the accounts database; additionally pings clients with empty heartbeats. - // Upon initially connecting the client can expect a `highest_write_slot` set in the http headers. - // Subscribe to account updates - SubscribeAccountUpdates(ctx context.Context, in *SubscribeAccountUpdatesRequest, opts ...grpc.CallOption) (Geyser_SubscribeAccountUpdatesClient, error) - // Subscribes to updates given a list of program IDs. When an account update comes in that's owned by a provided - // program id, one will receive an update - SubscribeProgramUpdates(ctx context.Context, in *SubscribeProgramsUpdatesRequest, opts ...grpc.CallOption) (Geyser_SubscribeProgramUpdatesClient, error) - // Functions similarly to `SubscribeAccountUpdates`, but consumes less bandwidth. - // Returns the highest slot seen thus far in the http headers named `highest-write-slot`. - SubscribePartialAccountUpdates(ctx context.Context, in *SubscribePartialAccountUpdatesRequest, opts ...grpc.CallOption) (Geyser_SubscribePartialAccountUpdatesClient, error) - // Subscribes to slot updates. - // Returns the highest slot seen thus far in the http headers named `highest-write-slot`. - SubscribeSlotUpdates(ctx context.Context, in *SubscribeSlotUpdateRequest, opts ...grpc.CallOption) (Geyser_SubscribeSlotUpdatesClient, error) - // Subscribes to transaction updates. - SubscribeTransactionUpdates(ctx context.Context, in *SubscribeTransactionUpdatesRequest, opts ...grpc.CallOption) (Geyser_SubscribeTransactionUpdatesClient, error) - // Subscribes to block updates. - SubscribeBlockUpdates(ctx context.Context, in *SubscribeBlockUpdatesRequest, opts ...grpc.CallOption) (Geyser_SubscribeBlockUpdatesClient, error) - // Subscribes to entry updates. - // Returns the highest slot seen thus far and the entry index corresponding to the tick - SubscribeSlotEntryUpdates(ctx context.Context, in *SubscribeSlotEntryUpdateRequest, opts ...grpc.CallOption) (Geyser_SubscribeSlotEntryUpdatesClient, error) + Subscribe(ctx context.Context, opts ...grpc.CallOption) (Geyser_SubscribeClient, error) + Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PongResponse, error) + GetLatestBlockhash(ctx context.Context, in *GetLatestBlockhashRequest, opts ...grpc.CallOption) (*GetLatestBlockhashResponse, error) + GetBlockHeight(ctx context.Context, in *GetBlockHeightRequest, opts ...grpc.CallOption) (*GetBlockHeightResponse, error) + GetSlot(ctx context.Context, in *GetSlotRequest, opts ...grpc.CallOption) (*GetSlotResponse, error) + IsBlockhashValid(ctx context.Context, in *IsBlockhashValidRequest, opts ...grpc.CallOption) (*IsBlockhashValidResponse, error) + GetVersion(ctx context.Context, in *GetVersionRequest, opts ...grpc.CallOption) (*GetVersionResponse, error) } type geyserClient struct { @@ -54,265 +39,102 @@ func NewGeyserClient(cc grpc.ClientConnInterface) GeyserClient { return &geyserClient{cc} } -func (c *geyserClient) GetHeartbeatInterval(ctx context.Context, in *EmptyRequest, opts ...grpc.CallOption) (*GetHeartbeatIntervalResponse, error) { - out := new(GetHeartbeatIntervalResponse) - err := c.cc.Invoke(ctx, "/solana.geyser.Geyser/GetHeartbeatInterval", in, out, opts...) +func (c *geyserClient) Subscribe(ctx context.Context, opts ...grpc.CallOption) (Geyser_SubscribeClient, error) { + stream, err := c.cc.NewStream(ctx, &Geyser_ServiceDesc.Streams[0], "/geyser.Geyser/Subscribe", opts...) if err != nil { return nil, err } - return out, nil -} - -func (c *geyserClient) SubscribeAccountUpdates(ctx context.Context, in *SubscribeAccountUpdatesRequest, opts ...grpc.CallOption) (Geyser_SubscribeAccountUpdatesClient, error) { - stream, err := c.cc.NewStream(ctx, &Geyser_ServiceDesc.Streams[0], "/solana.geyser.Geyser/SubscribeAccountUpdates", opts...) - if err != nil { - return nil, err - } - x := &geyserSubscribeAccountUpdatesClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } + x := &geyserSubscribeClient{stream} return x, nil } -type Geyser_SubscribeAccountUpdatesClient interface { - Recv() (*TimestampedAccountUpdate, error) +type Geyser_SubscribeClient interface { + Send(*SubscribeRequest) error + Recv() (*SubscribeUpdate, error) grpc.ClientStream } -type geyserSubscribeAccountUpdatesClient struct { +type geyserSubscribeClient struct { grpc.ClientStream } -func (x *geyserSubscribeAccountUpdatesClient) Recv() (*TimestampedAccountUpdate, error) { - m := new(TimestampedAccountUpdate) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil +func (x *geyserSubscribeClient) Send(m *SubscribeRequest) error { + return x.ClientStream.SendMsg(m) } -func (c *geyserClient) SubscribeProgramUpdates(ctx context.Context, in *SubscribeProgramsUpdatesRequest, opts ...grpc.CallOption) (Geyser_SubscribeProgramUpdatesClient, error) { - stream, err := c.cc.NewStream(ctx, &Geyser_ServiceDesc.Streams[1], "/solana.geyser.Geyser/SubscribeProgramUpdates", opts...) - if err != nil { - return nil, err - } - x := &geyserSubscribeProgramUpdatesClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Geyser_SubscribeProgramUpdatesClient interface { - Recv() (*TimestampedAccountUpdate, error) - grpc.ClientStream -} - -type geyserSubscribeProgramUpdatesClient struct { - grpc.ClientStream -} - -func (x *geyserSubscribeProgramUpdatesClient) Recv() (*TimestampedAccountUpdate, error) { - m := new(TimestampedAccountUpdate) +func (x *geyserSubscribeClient) Recv() (*SubscribeUpdate, error) { + m := new(SubscribeUpdate) if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err } return m, nil } -func (c *geyserClient) SubscribePartialAccountUpdates(ctx context.Context, in *SubscribePartialAccountUpdatesRequest, opts ...grpc.CallOption) (Geyser_SubscribePartialAccountUpdatesClient, error) { - stream, err := c.cc.NewStream(ctx, &Geyser_ServiceDesc.Streams[2], "/solana.geyser.Geyser/SubscribePartialAccountUpdates", opts...) +func (c *geyserClient) Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PongResponse, error) { + out := new(PongResponse) + err := c.cc.Invoke(ctx, "/geyser.Geyser/Ping", in, out, opts...) if err != nil { return nil, err } - x := &geyserSubscribePartialAccountUpdatesClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Geyser_SubscribePartialAccountUpdatesClient interface { - Recv() (*MaybePartialAccountUpdate, error) - grpc.ClientStream -} - -type geyserSubscribePartialAccountUpdatesClient struct { - grpc.ClientStream -} - -func (x *geyserSubscribePartialAccountUpdatesClient) Recv() (*MaybePartialAccountUpdate, error) { - m := new(MaybePartialAccountUpdate) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil + return out, nil } -func (c *geyserClient) SubscribeSlotUpdates(ctx context.Context, in *SubscribeSlotUpdateRequest, opts ...grpc.CallOption) (Geyser_SubscribeSlotUpdatesClient, error) { - stream, err := c.cc.NewStream(ctx, &Geyser_ServiceDesc.Streams[3], "/solana.geyser.Geyser/SubscribeSlotUpdates", opts...) +func (c *geyserClient) GetLatestBlockhash(ctx context.Context, in *GetLatestBlockhashRequest, opts ...grpc.CallOption) (*GetLatestBlockhashResponse, error) { + out := new(GetLatestBlockhashResponse) + err := c.cc.Invoke(ctx, "/geyser.Geyser/GetLatestBlockhash", in, out, opts...) if err != nil { return nil, err } - x := &geyserSubscribeSlotUpdatesClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Geyser_SubscribeSlotUpdatesClient interface { - Recv() (*TimestampedSlotUpdate, error) - grpc.ClientStream -} - -type geyserSubscribeSlotUpdatesClient struct { - grpc.ClientStream -} - -func (x *geyserSubscribeSlotUpdatesClient) Recv() (*TimestampedSlotUpdate, error) { - m := new(TimestampedSlotUpdate) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil + return out, nil } -func (c *geyserClient) SubscribeTransactionUpdates(ctx context.Context, in *SubscribeTransactionUpdatesRequest, opts ...grpc.CallOption) (Geyser_SubscribeTransactionUpdatesClient, error) { - stream, err := c.cc.NewStream(ctx, &Geyser_ServiceDesc.Streams[4], "/solana.geyser.Geyser/SubscribeTransactionUpdates", opts...) +func (c *geyserClient) GetBlockHeight(ctx context.Context, in *GetBlockHeightRequest, opts ...grpc.CallOption) (*GetBlockHeightResponse, error) { + out := new(GetBlockHeightResponse) + err := c.cc.Invoke(ctx, "/geyser.Geyser/GetBlockHeight", in, out, opts...) if err != nil { return nil, err } - x := &geyserSubscribeTransactionUpdatesClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Geyser_SubscribeTransactionUpdatesClient interface { - Recv() (*TimestampedTransactionUpdate, error) - grpc.ClientStream -} - -type geyserSubscribeTransactionUpdatesClient struct { - grpc.ClientStream -} - -func (x *geyserSubscribeTransactionUpdatesClient) Recv() (*TimestampedTransactionUpdate, error) { - m := new(TimestampedTransactionUpdate) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil + return out, nil } -func (c *geyserClient) SubscribeBlockUpdates(ctx context.Context, in *SubscribeBlockUpdatesRequest, opts ...grpc.CallOption) (Geyser_SubscribeBlockUpdatesClient, error) { - stream, err := c.cc.NewStream(ctx, &Geyser_ServiceDesc.Streams[5], "/solana.geyser.Geyser/SubscribeBlockUpdates", opts...) +func (c *geyserClient) GetSlot(ctx context.Context, in *GetSlotRequest, opts ...grpc.CallOption) (*GetSlotResponse, error) { + out := new(GetSlotResponse) + err := c.cc.Invoke(ctx, "/geyser.Geyser/GetSlot", in, out, opts...) if err != nil { return nil, err } - x := &geyserSubscribeBlockUpdatesClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Geyser_SubscribeBlockUpdatesClient interface { - Recv() (*TimestampedBlockUpdate, error) - grpc.ClientStream -} - -type geyserSubscribeBlockUpdatesClient struct { - grpc.ClientStream -} - -func (x *geyserSubscribeBlockUpdatesClient) Recv() (*TimestampedBlockUpdate, error) { - m := new(TimestampedBlockUpdate) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil + return out, nil } -func (c *geyserClient) SubscribeSlotEntryUpdates(ctx context.Context, in *SubscribeSlotEntryUpdateRequest, opts ...grpc.CallOption) (Geyser_SubscribeSlotEntryUpdatesClient, error) { - stream, err := c.cc.NewStream(ctx, &Geyser_ServiceDesc.Streams[6], "/solana.geyser.Geyser/SubscribeSlotEntryUpdates", opts...) +func (c *geyserClient) IsBlockhashValid(ctx context.Context, in *IsBlockhashValidRequest, opts ...grpc.CallOption) (*IsBlockhashValidResponse, error) { + out := new(IsBlockhashValidResponse) + err := c.cc.Invoke(ctx, "/geyser.Geyser/IsBlockhashValid", in, out, opts...) if err != nil { return nil, err } - x := &geyserSubscribeSlotEntryUpdatesClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Geyser_SubscribeSlotEntryUpdatesClient interface { - Recv() (*TimestampedSlotEntryUpdate, error) - grpc.ClientStream -} - -type geyserSubscribeSlotEntryUpdatesClient struct { - grpc.ClientStream + return out, nil } -func (x *geyserSubscribeSlotEntryUpdatesClient) Recv() (*TimestampedSlotEntryUpdate, error) { - m := new(TimestampedSlotEntryUpdate) - if err := x.ClientStream.RecvMsg(m); err != nil { +func (c *geyserClient) GetVersion(ctx context.Context, in *GetVersionRequest, opts ...grpc.CallOption) (*GetVersionResponse, error) { + out := new(GetVersionResponse) + err := c.cc.Invoke(ctx, "/geyser.Geyser/GetVersion", in, out, opts...) + if err != nil { return nil, err } - return m, nil + return out, nil } // GeyserServer is the server API for Geyser service. // All implementations must embed UnimplementedGeyserServer // for forward compatibility type GeyserServer interface { - // Invoke to get the expected heartbeat interval. - GetHeartbeatInterval(context.Context, *EmptyRequest) (*GetHeartbeatIntervalResponse, error) - // Subscribes to account updates in the accounts database; additionally pings clients with empty heartbeats. - // Upon initially connecting the client can expect a `highest_write_slot` set in the http headers. - // Subscribe to account updates - SubscribeAccountUpdates(*SubscribeAccountUpdatesRequest, Geyser_SubscribeAccountUpdatesServer) error - // Subscribes to updates given a list of program IDs. When an account update comes in that's owned by a provided - // program id, one will receive an update - SubscribeProgramUpdates(*SubscribeProgramsUpdatesRequest, Geyser_SubscribeProgramUpdatesServer) error - // Functions similarly to `SubscribeAccountUpdates`, but consumes less bandwidth. - // Returns the highest slot seen thus far in the http headers named `highest-write-slot`. - SubscribePartialAccountUpdates(*SubscribePartialAccountUpdatesRequest, Geyser_SubscribePartialAccountUpdatesServer) error - // Subscribes to slot updates. - // Returns the highest slot seen thus far in the http headers named `highest-write-slot`. - SubscribeSlotUpdates(*SubscribeSlotUpdateRequest, Geyser_SubscribeSlotUpdatesServer) error - // Subscribes to transaction updates. - SubscribeTransactionUpdates(*SubscribeTransactionUpdatesRequest, Geyser_SubscribeTransactionUpdatesServer) error - // Subscribes to block updates. - SubscribeBlockUpdates(*SubscribeBlockUpdatesRequest, Geyser_SubscribeBlockUpdatesServer) error - // Subscribes to entry updates. - // Returns the highest slot seen thus far and the entry index corresponding to the tick - SubscribeSlotEntryUpdates(*SubscribeSlotEntryUpdateRequest, Geyser_SubscribeSlotEntryUpdatesServer) error + Subscribe(Geyser_SubscribeServer) error + Ping(context.Context, *PingRequest) (*PongResponse, error) + GetLatestBlockhash(context.Context, *GetLatestBlockhashRequest) (*GetLatestBlockhashResponse, error) + GetBlockHeight(context.Context, *GetBlockHeightRequest) (*GetBlockHeightResponse, error) + GetSlot(context.Context, *GetSlotRequest) (*GetSlotResponse, error) + IsBlockhashValid(context.Context, *IsBlockhashValidRequest) (*IsBlockhashValidResponse, error) + GetVersion(context.Context, *GetVersionRequest) (*GetVersionResponse, error) mustEmbedUnimplementedGeyserServer() } @@ -320,29 +142,26 @@ type GeyserServer interface { type UnimplementedGeyserServer struct { } -func (UnimplementedGeyserServer) GetHeartbeatInterval(context.Context, *EmptyRequest) (*GetHeartbeatIntervalResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetHeartbeatInterval not implemented") +func (UnimplementedGeyserServer) Subscribe(Geyser_SubscribeServer) error { + return status.Errorf(codes.Unimplemented, "method Subscribe not implemented") } -func (UnimplementedGeyserServer) SubscribeAccountUpdates(*SubscribeAccountUpdatesRequest, Geyser_SubscribeAccountUpdatesServer) error { - return status.Errorf(codes.Unimplemented, "method SubscribeAccountUpdates not implemented") +func (UnimplementedGeyserServer) Ping(context.Context, *PingRequest) (*PongResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") } -func (UnimplementedGeyserServer) SubscribeProgramUpdates(*SubscribeProgramsUpdatesRequest, Geyser_SubscribeProgramUpdatesServer) error { - return status.Errorf(codes.Unimplemented, "method SubscribeProgramUpdates not implemented") +func (UnimplementedGeyserServer) GetLatestBlockhash(context.Context, *GetLatestBlockhashRequest) (*GetLatestBlockhashResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetLatestBlockhash not implemented") } -func (UnimplementedGeyserServer) SubscribePartialAccountUpdates(*SubscribePartialAccountUpdatesRequest, Geyser_SubscribePartialAccountUpdatesServer) error { - return status.Errorf(codes.Unimplemented, "method SubscribePartialAccountUpdates not implemented") +func (UnimplementedGeyserServer) GetBlockHeight(context.Context, *GetBlockHeightRequest) (*GetBlockHeightResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetBlockHeight not implemented") } -func (UnimplementedGeyserServer) SubscribeSlotUpdates(*SubscribeSlotUpdateRequest, Geyser_SubscribeSlotUpdatesServer) error { - return status.Errorf(codes.Unimplemented, "method SubscribeSlotUpdates not implemented") +func (UnimplementedGeyserServer) GetSlot(context.Context, *GetSlotRequest) (*GetSlotResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetSlot not implemented") } -func (UnimplementedGeyserServer) SubscribeTransactionUpdates(*SubscribeTransactionUpdatesRequest, Geyser_SubscribeTransactionUpdatesServer) error { - return status.Errorf(codes.Unimplemented, "method SubscribeTransactionUpdates not implemented") +func (UnimplementedGeyserServer) IsBlockhashValid(context.Context, *IsBlockhashValidRequest) (*IsBlockhashValidResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method IsBlockhashValid not implemented") } -func (UnimplementedGeyserServer) SubscribeBlockUpdates(*SubscribeBlockUpdatesRequest, Geyser_SubscribeBlockUpdatesServer) error { - return status.Errorf(codes.Unimplemented, "method SubscribeBlockUpdates not implemented") -} -func (UnimplementedGeyserServer) SubscribeSlotEntryUpdates(*SubscribeSlotEntryUpdateRequest, Geyser_SubscribeSlotEntryUpdatesServer) error { - return status.Errorf(codes.Unimplemented, "method SubscribeSlotEntryUpdates not implemented") +func (UnimplementedGeyserServer) GetVersion(context.Context, *GetVersionRequest) (*GetVersionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetVersion not implemented") } func (UnimplementedGeyserServer) mustEmbedUnimplementedGeyserServer() {} @@ -357,218 +176,178 @@ func RegisterGeyserServer(s grpc.ServiceRegistrar, srv GeyserServer) { s.RegisterService(&Geyser_ServiceDesc, srv) } -func _Geyser_GetHeartbeatInterval_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(EmptyRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(GeyserServer).GetHeartbeatInterval(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/solana.geyser.Geyser/GetHeartbeatInterval", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GeyserServer).GetHeartbeatInterval(ctx, req.(*EmptyRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Geyser_SubscribeAccountUpdates_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(SubscribeAccountUpdatesRequest) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(GeyserServer).SubscribeAccountUpdates(m, &geyserSubscribeAccountUpdatesServer{stream}) +func _Geyser_Subscribe_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(GeyserServer).Subscribe(&geyserSubscribeServer{stream}) } -type Geyser_SubscribeAccountUpdatesServer interface { - Send(*TimestampedAccountUpdate) error +type Geyser_SubscribeServer interface { + Send(*SubscribeUpdate) error + Recv() (*SubscribeRequest, error) grpc.ServerStream } -type geyserSubscribeAccountUpdatesServer struct { +type geyserSubscribeServer struct { grpc.ServerStream } -func (x *geyserSubscribeAccountUpdatesServer) Send(m *TimestampedAccountUpdate) error { +func (x *geyserSubscribeServer) Send(m *SubscribeUpdate) error { return x.ServerStream.SendMsg(m) } -func _Geyser_SubscribeProgramUpdates_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(SubscribeProgramsUpdatesRequest) - if err := stream.RecvMsg(m); err != nil { - return err +func (x *geyserSubscribeServer) Recv() (*SubscribeRequest, error) { + m := new(SubscribeRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err } - return srv.(GeyserServer).SubscribeProgramUpdates(m, &geyserSubscribeProgramUpdatesServer{stream}) -} - -type Geyser_SubscribeProgramUpdatesServer interface { - Send(*TimestampedAccountUpdate) error - grpc.ServerStream -} - -type geyserSubscribeProgramUpdatesServer struct { - grpc.ServerStream -} - -func (x *geyserSubscribeProgramUpdatesServer) Send(m *TimestampedAccountUpdate) error { - return x.ServerStream.SendMsg(m) + return m, nil } -func _Geyser_SubscribePartialAccountUpdates_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(SubscribePartialAccountUpdatesRequest) - if err := stream.RecvMsg(m); err != nil { - return err +func _Geyser_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PingRequest) + if err := dec(in); err != nil { + return nil, err } - return srv.(GeyserServer).SubscribePartialAccountUpdates(m, &geyserSubscribePartialAccountUpdatesServer{stream}) -} - -type Geyser_SubscribePartialAccountUpdatesServer interface { - Send(*MaybePartialAccountUpdate) error - grpc.ServerStream -} - -type geyserSubscribePartialAccountUpdatesServer struct { - grpc.ServerStream -} - -func (x *geyserSubscribePartialAccountUpdatesServer) Send(m *MaybePartialAccountUpdate) error { - return x.ServerStream.SendMsg(m) -} - -func _Geyser_SubscribeSlotUpdates_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(SubscribeSlotUpdateRequest) - if err := stream.RecvMsg(m); err != nil { - return err + if interceptor == nil { + return srv.(GeyserServer).Ping(ctx, in) } - return srv.(GeyserServer).SubscribeSlotUpdates(m, &geyserSubscribeSlotUpdatesServer{stream}) -} - -type Geyser_SubscribeSlotUpdatesServer interface { - Send(*TimestampedSlotUpdate) error - grpc.ServerStream -} - -type geyserSubscribeSlotUpdatesServer struct { - grpc.ServerStream -} - -func (x *geyserSubscribeSlotUpdatesServer) Send(m *TimestampedSlotUpdate) error { - return x.ServerStream.SendMsg(m) -} - -func _Geyser_SubscribeTransactionUpdates_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(SubscribeTransactionUpdatesRequest) - if err := stream.RecvMsg(m); err != nil { - return err + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/geyser.Geyser/Ping", } - return srv.(GeyserServer).SubscribeTransactionUpdates(m, &geyserSubscribeTransactionUpdatesServer{stream}) -} - -type Geyser_SubscribeTransactionUpdatesServer interface { - Send(*TimestampedTransactionUpdate) error - grpc.ServerStream -} - -type geyserSubscribeTransactionUpdatesServer struct { - grpc.ServerStream -} - -func (x *geyserSubscribeTransactionUpdatesServer) Send(m *TimestampedTransactionUpdate) error { - return x.ServerStream.SendMsg(m) -} - -func _Geyser_SubscribeBlockUpdates_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(SubscribeBlockUpdatesRequest) - if err := stream.RecvMsg(m); err != nil { - return err + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GeyserServer).Ping(ctx, req.(*PingRequest)) } - return srv.(GeyserServer).SubscribeBlockUpdates(m, &geyserSubscribeBlockUpdatesServer{stream}) -} - -type Geyser_SubscribeBlockUpdatesServer interface { - Send(*TimestampedBlockUpdate) error - grpc.ServerStream -} - -type geyserSubscribeBlockUpdatesServer struct { - grpc.ServerStream + return interceptor(ctx, in, info, handler) } -func (x *geyserSubscribeBlockUpdatesServer) Send(m *TimestampedBlockUpdate) error { - return x.ServerStream.SendMsg(m) +func _Geyser_GetLatestBlockhash_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetLatestBlockhashRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GeyserServer).GetLatestBlockhash(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/geyser.Geyser/GetLatestBlockhash", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GeyserServer).GetLatestBlockhash(ctx, req.(*GetLatestBlockhashRequest)) + } + return interceptor(ctx, in, info, handler) } -func _Geyser_SubscribeSlotEntryUpdates_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(SubscribeSlotEntryUpdateRequest) - if err := stream.RecvMsg(m); err != nil { - return err +func _Geyser_GetBlockHeight_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetBlockHeightRequest) + if err := dec(in); err != nil { + return nil, err } - return srv.(GeyserServer).SubscribeSlotEntryUpdates(m, &geyserSubscribeSlotEntryUpdatesServer{stream}) + if interceptor == nil { + return srv.(GeyserServer).GetBlockHeight(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/geyser.Geyser/GetBlockHeight", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GeyserServer).GetBlockHeight(ctx, req.(*GetBlockHeightRequest)) + } + return interceptor(ctx, in, info, handler) } -type Geyser_SubscribeSlotEntryUpdatesServer interface { - Send(*TimestampedSlotEntryUpdate) error - grpc.ServerStream +func _Geyser_GetSlot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSlotRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GeyserServer).GetSlot(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/geyser.Geyser/GetSlot", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GeyserServer).GetSlot(ctx, req.(*GetSlotRequest)) + } + return interceptor(ctx, in, info, handler) } -type geyserSubscribeSlotEntryUpdatesServer struct { - grpc.ServerStream +func _Geyser_IsBlockhashValid_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(IsBlockhashValidRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GeyserServer).IsBlockhashValid(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/geyser.Geyser/IsBlockhashValid", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GeyserServer).IsBlockhashValid(ctx, req.(*IsBlockhashValidRequest)) + } + return interceptor(ctx, in, info, handler) } -func (x *geyserSubscribeSlotEntryUpdatesServer) Send(m *TimestampedSlotEntryUpdate) error { - return x.ServerStream.SendMsg(m) +func _Geyser_GetVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetVersionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GeyserServer).GetVersion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/geyser.Geyser/GetVersion", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GeyserServer).GetVersion(ctx, req.(*GetVersionRequest)) + } + return interceptor(ctx, in, info, handler) } // Geyser_ServiceDesc is the grpc.ServiceDesc for Geyser service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) var Geyser_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "solana.geyser.Geyser", + ServiceName: "geyser.Geyser", HandlerType: (*GeyserServer)(nil), Methods: []grpc.MethodDesc{ { - MethodName: "GetHeartbeatInterval", - Handler: _Geyser_GetHeartbeatInterval_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "SubscribeAccountUpdates", - Handler: _Geyser_SubscribeAccountUpdates_Handler, - ServerStreams: true, + MethodName: "Ping", + Handler: _Geyser_Ping_Handler, }, { - StreamName: "SubscribeProgramUpdates", - Handler: _Geyser_SubscribeProgramUpdates_Handler, - ServerStreams: true, + MethodName: "GetLatestBlockhash", + Handler: _Geyser_GetLatestBlockhash_Handler, }, { - StreamName: "SubscribePartialAccountUpdates", - Handler: _Geyser_SubscribePartialAccountUpdates_Handler, - ServerStreams: true, + MethodName: "GetBlockHeight", + Handler: _Geyser_GetBlockHeight_Handler, }, { - StreamName: "SubscribeSlotUpdates", - Handler: _Geyser_SubscribeSlotUpdates_Handler, - ServerStreams: true, + MethodName: "GetSlot", + Handler: _Geyser_GetSlot_Handler, }, { - StreamName: "SubscribeTransactionUpdates", - Handler: _Geyser_SubscribeTransactionUpdates_Handler, - ServerStreams: true, + MethodName: "IsBlockhashValid", + Handler: _Geyser_IsBlockhashValid_Handler, }, { - StreamName: "SubscribeBlockUpdates", - Handler: _Geyser_SubscribeBlockUpdates_Handler, - ServerStreams: true, + MethodName: "GetVersion", + Handler: _Geyser_GetVersion_Handler, }, + }, + Streams: []grpc.StreamDesc{ { - StreamName: "SubscribeSlotEntryUpdates", - Handler: _Geyser_SubscribeSlotEntryUpdates_Handler, + StreamName: "Subscribe", + Handler: _Geyser_Subscribe_Handler, ServerStreams: true, + ClientStreams: true, }, }, Metadata: "geyser.proto", diff --git a/pkg/code/async/geyser/api/gen/confirmed_block.pb.go b/pkg/code/async/geyser/api/gen/solana-storage.pb.go similarity index 62% rename from pkg/code/async/geyser/api/gen/confirmed_block.pb.go rename to pkg/code/async/geyser/api/gen/solana-storage.pb.go index 915a2e71..7c6eedd4 100644 --- a/pkg/code/async/geyser/api/gen/confirmed_block.pb.go +++ b/pkg/code/async/geyser/api/gen/solana-storage.pb.go @@ -1,10 +1,10 @@ -// Source: https://github.com/jito-foundation/geyser-grpc-plugin/blob/v2.2/proto/proto/confirmed_block.proto +// Source: https://github.com/rpcpool/yellowstone-grpc/blob/v6.0.0%2Bsolana.2.2.12/yellowstone-grpc-proto/proto/solana-storage.proto // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 // protoc v3.21.12 -// source: confirmed_block.proto +// source: solana-storage.proto package geyser @@ -61,11 +61,11 @@ func (x RewardType) String() string { } func (RewardType) Descriptor() protoreflect.EnumDescriptor { - return file_confirmed_block_proto_enumTypes[0].Descriptor() + return file_solana_storage_proto_enumTypes[0].Descriptor() } func (RewardType) Type() protoreflect.EnumType { - return &file_confirmed_block_proto_enumTypes[0] + return &file_solana_storage_proto_enumTypes[0] } func (x RewardType) Number() protoreflect.EnumNumber { @@ -74,7 +74,7 @@ func (x RewardType) Number() protoreflect.EnumNumber { // Deprecated: Use RewardType.Descriptor instead. func (RewardType) EnumDescriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{0} + return file_solana_storage_proto_rawDescGZIP(), []int{0} } type ConfirmedBlock struct { @@ -95,7 +95,7 @@ type ConfirmedBlock struct { func (x *ConfirmedBlock) Reset() { *x = ConfirmedBlock{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[0] + mi := &file_solana_storage_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -108,7 +108,7 @@ func (x *ConfirmedBlock) String() string { func (*ConfirmedBlock) ProtoMessage() {} func (x *ConfirmedBlock) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[0] + mi := &file_solana_storage_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -121,7 +121,7 @@ func (x *ConfirmedBlock) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfirmedBlock.ProtoReflect.Descriptor instead. func (*ConfirmedBlock) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{0} + return file_solana_storage_proto_rawDescGZIP(), []int{0} } func (x *ConfirmedBlock) GetPreviousBlockhash() string { @@ -192,7 +192,7 @@ type ConfirmedTransaction struct { func (x *ConfirmedTransaction) Reset() { *x = ConfirmedTransaction{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[1] + mi := &file_solana_storage_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -205,7 +205,7 @@ func (x *ConfirmedTransaction) String() string { func (*ConfirmedTransaction) ProtoMessage() {} func (x *ConfirmedTransaction) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[1] + mi := &file_solana_storage_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -218,7 +218,7 @@ func (x *ConfirmedTransaction) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfirmedTransaction.ProtoReflect.Descriptor instead. func (*ConfirmedTransaction) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{1} + return file_solana_storage_proto_rawDescGZIP(), []int{1} } func (x *ConfirmedTransaction) GetTransaction() *Transaction { @@ -247,7 +247,7 @@ type Transaction struct { func (x *Transaction) Reset() { *x = Transaction{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[2] + mi := &file_solana_storage_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -260,7 +260,7 @@ func (x *Transaction) String() string { func (*Transaction) ProtoMessage() {} func (x *Transaction) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[2] + mi := &file_solana_storage_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -273,7 +273,7 @@ func (x *Transaction) ProtoReflect() protoreflect.Message { // Deprecated: Use Transaction.ProtoReflect.Descriptor instead. func (*Transaction) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{2} + return file_solana_storage_proto_rawDescGZIP(), []int{2} } func (x *Transaction) GetSignatures() [][]byte { @@ -306,7 +306,7 @@ type Message struct { func (x *Message) Reset() { *x = Message{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[3] + mi := &file_solana_storage_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -319,7 +319,7 @@ func (x *Message) String() string { func (*Message) ProtoMessage() {} func (x *Message) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[3] + mi := &file_solana_storage_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -332,7 +332,7 @@ func (x *Message) ProtoReflect() protoreflect.Message { // Deprecated: Use Message.ProtoReflect.Descriptor instead. func (*Message) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{3} + return file_solana_storage_proto_rawDescGZIP(), []int{3} } func (x *Message) GetHeader() *MessageHeader { @@ -390,7 +390,7 @@ type MessageHeader struct { func (x *MessageHeader) Reset() { *x = MessageHeader{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[4] + mi := &file_solana_storage_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -403,7 +403,7 @@ func (x *MessageHeader) String() string { func (*MessageHeader) ProtoMessage() {} func (x *MessageHeader) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[4] + mi := &file_solana_storage_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -416,7 +416,7 @@ func (x *MessageHeader) ProtoReflect() protoreflect.Message { // Deprecated: Use MessageHeader.ProtoReflect.Descriptor instead. func (*MessageHeader) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{4} + return file_solana_storage_proto_rawDescGZIP(), []int{4} } func (x *MessageHeader) GetNumRequiredSignatures() uint32 { @@ -453,7 +453,7 @@ type MessageAddressTableLookup struct { func (x *MessageAddressTableLookup) Reset() { *x = MessageAddressTableLookup{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[5] + mi := &file_solana_storage_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -466,7 +466,7 @@ func (x *MessageAddressTableLookup) String() string { func (*MessageAddressTableLookup) ProtoMessage() {} func (x *MessageAddressTableLookup) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[5] + mi := &file_solana_storage_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -479,7 +479,7 @@ func (x *MessageAddressTableLookup) ProtoReflect() protoreflect.Message { // Deprecated: Use MessageAddressTableLookup.ProtoReflect.Descriptor instead. func (*MessageAddressTableLookup) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{5} + return file_solana_storage_proto_rawDescGZIP(), []int{5} } func (x *MessageAddressTableLookup) GetAccountKey() []byte { @@ -532,7 +532,7 @@ type TransactionStatusMeta struct { func (x *TransactionStatusMeta) Reset() { *x = TransactionStatusMeta{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[6] + mi := &file_solana_storage_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -545,7 +545,7 @@ func (x *TransactionStatusMeta) String() string { func (*TransactionStatusMeta) ProtoMessage() {} func (x *TransactionStatusMeta) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[6] + mi := &file_solana_storage_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -558,7 +558,7 @@ func (x *TransactionStatusMeta) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionStatusMeta.ProtoReflect.Descriptor instead. func (*TransactionStatusMeta) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{6} + return file_solana_storage_proto_rawDescGZIP(), []int{6} } func (x *TransactionStatusMeta) GetErr() *TransactionError { @@ -684,7 +684,7 @@ type TransactionError struct { func (x *TransactionError) Reset() { *x = TransactionError{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[7] + mi := &file_solana_storage_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -697,7 +697,7 @@ func (x *TransactionError) String() string { func (*TransactionError) ProtoMessage() {} func (x *TransactionError) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[7] + mi := &file_solana_storage_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -710,7 +710,7 @@ func (x *TransactionError) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionError.ProtoReflect.Descriptor instead. func (*TransactionError) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{7} + return file_solana_storage_proto_rawDescGZIP(), []int{7} } func (x *TransactionError) GetErr() []byte { @@ -732,7 +732,7 @@ type InnerInstructions struct { func (x *InnerInstructions) Reset() { *x = InnerInstructions{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[8] + mi := &file_solana_storage_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -745,7 +745,7 @@ func (x *InnerInstructions) String() string { func (*InnerInstructions) ProtoMessage() {} func (x *InnerInstructions) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[8] + mi := &file_solana_storage_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -758,7 +758,7 @@ func (x *InnerInstructions) ProtoReflect() protoreflect.Message { // Deprecated: Use InnerInstructions.ProtoReflect.Descriptor instead. func (*InnerInstructions) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{8} + return file_solana_storage_proto_rawDescGZIP(), []int{8} } func (x *InnerInstructions) GetIndex() uint32 { @@ -792,7 +792,7 @@ type InnerInstruction struct { func (x *InnerInstruction) Reset() { *x = InnerInstruction{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[9] + mi := &file_solana_storage_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -805,7 +805,7 @@ func (x *InnerInstruction) String() string { func (*InnerInstruction) ProtoMessage() {} func (x *InnerInstruction) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[9] + mi := &file_solana_storage_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -818,7 +818,7 @@ func (x *InnerInstruction) ProtoReflect() protoreflect.Message { // Deprecated: Use InnerInstruction.ProtoReflect.Descriptor instead. func (*InnerInstruction) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{9} + return file_solana_storage_proto_rawDescGZIP(), []int{9} } func (x *InnerInstruction) GetProgramIdIndex() uint32 { @@ -862,7 +862,7 @@ type CompiledInstruction struct { func (x *CompiledInstruction) Reset() { *x = CompiledInstruction{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[10] + mi := &file_solana_storage_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -875,7 +875,7 @@ func (x *CompiledInstruction) String() string { func (*CompiledInstruction) ProtoMessage() {} func (x *CompiledInstruction) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[10] + mi := &file_solana_storage_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -888,7 +888,7 @@ func (x *CompiledInstruction) ProtoReflect() protoreflect.Message { // Deprecated: Use CompiledInstruction.ProtoReflect.Descriptor instead. func (*CompiledInstruction) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{10} + return file_solana_storage_proto_rawDescGZIP(), []int{10} } func (x *CompiledInstruction) GetProgramIdIndex() uint32 { @@ -927,7 +927,7 @@ type TokenBalance struct { func (x *TokenBalance) Reset() { *x = TokenBalance{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[11] + mi := &file_solana_storage_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -940,7 +940,7 @@ func (x *TokenBalance) String() string { func (*TokenBalance) ProtoMessage() {} func (x *TokenBalance) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[11] + mi := &file_solana_storage_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -953,7 +953,7 @@ func (x *TokenBalance) ProtoReflect() protoreflect.Message { // Deprecated: Use TokenBalance.ProtoReflect.Descriptor instead. func (*TokenBalance) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{11} + return file_solana_storage_proto_rawDescGZIP(), []int{11} } func (x *TokenBalance) GetAccountIndex() uint32 { @@ -1005,7 +1005,7 @@ type UiTokenAmount struct { func (x *UiTokenAmount) Reset() { *x = UiTokenAmount{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[12] + mi := &file_solana_storage_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1018,7 +1018,7 @@ func (x *UiTokenAmount) String() string { func (*UiTokenAmount) ProtoMessage() {} func (x *UiTokenAmount) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[12] + mi := &file_solana_storage_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1031,7 +1031,7 @@ func (x *UiTokenAmount) ProtoReflect() protoreflect.Message { // Deprecated: Use UiTokenAmount.ProtoReflect.Descriptor instead. func (*UiTokenAmount) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{12} + return file_solana_storage_proto_rawDescGZIP(), []int{12} } func (x *UiTokenAmount) GetUiAmount() float64 { @@ -1074,7 +1074,7 @@ type ReturnData struct { func (x *ReturnData) Reset() { *x = ReturnData{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[13] + mi := &file_solana_storage_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1087,7 +1087,7 @@ func (x *ReturnData) String() string { func (*ReturnData) ProtoMessage() {} func (x *ReturnData) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[13] + mi := &file_solana_storage_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1100,7 +1100,7 @@ func (x *ReturnData) ProtoReflect() protoreflect.Message { // Deprecated: Use ReturnData.ProtoReflect.Descriptor instead. func (*ReturnData) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{13} + return file_solana_storage_proto_rawDescGZIP(), []int{13} } func (x *ReturnData) GetProgramId() []byte { @@ -1132,7 +1132,7 @@ type Reward struct { func (x *Reward) Reset() { *x = Reward{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[14] + mi := &file_solana_storage_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1145,7 +1145,7 @@ func (x *Reward) String() string { func (*Reward) ProtoMessage() {} func (x *Reward) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[14] + mi := &file_solana_storage_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1158,7 +1158,7 @@ func (x *Reward) ProtoReflect() protoreflect.Message { // Deprecated: Use Reward.ProtoReflect.Descriptor instead. func (*Reward) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{14} + return file_solana_storage_proto_rawDescGZIP(), []int{14} } func (x *Reward) GetPubkey() string { @@ -1208,7 +1208,7 @@ type Rewards struct { func (x *Rewards) Reset() { *x = Rewards{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[15] + mi := &file_solana_storage_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1221,7 +1221,7 @@ func (x *Rewards) String() string { func (*Rewards) ProtoMessage() {} func (x *Rewards) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[15] + mi := &file_solana_storage_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1234,7 +1234,7 @@ func (x *Rewards) ProtoReflect() protoreflect.Message { // Deprecated: Use Rewards.ProtoReflect.Descriptor instead. func (*Rewards) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{15} + return file_solana_storage_proto_rawDescGZIP(), []int{15} } func (x *Rewards) GetRewards() []*Reward { @@ -1262,7 +1262,7 @@ type UnixTimestamp struct { func (x *UnixTimestamp) Reset() { *x = UnixTimestamp{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[16] + mi := &file_solana_storage_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1275,7 +1275,7 @@ func (x *UnixTimestamp) String() string { func (*UnixTimestamp) ProtoMessage() {} func (x *UnixTimestamp) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[16] + mi := &file_solana_storage_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1288,7 +1288,7 @@ func (x *UnixTimestamp) ProtoReflect() protoreflect.Message { // Deprecated: Use UnixTimestamp.ProtoReflect.Descriptor instead. func (*UnixTimestamp) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{16} + return file_solana_storage_proto_rawDescGZIP(), []int{16} } func (x *UnixTimestamp) GetTimestamp() int64 { @@ -1309,7 +1309,7 @@ type BlockHeight struct { func (x *BlockHeight) Reset() { *x = BlockHeight{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[17] + mi := &file_solana_storage_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1322,7 +1322,7 @@ func (x *BlockHeight) String() string { func (*BlockHeight) ProtoMessage() {} func (x *BlockHeight) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[17] + mi := &file_solana_storage_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1335,7 +1335,7 @@ func (x *BlockHeight) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockHeight.ProtoReflect.Descriptor instead. func (*BlockHeight) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{17} + return file_solana_storage_proto_rawDescGZIP(), []int{17} } func (x *BlockHeight) GetBlockHeight() uint64 { @@ -1356,7 +1356,7 @@ type NumPartitions struct { func (x *NumPartitions) Reset() { *x = NumPartitions{} if protoimpl.UnsafeEnabled { - mi := &file_confirmed_block_proto_msgTypes[18] + mi := &file_solana_storage_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1369,7 +1369,7 @@ func (x *NumPartitions) String() string { func (*NumPartitions) ProtoMessage() {} func (x *NumPartitions) ProtoReflect() protoreflect.Message { - mi := &file_confirmed_block_proto_msgTypes[18] + mi := &file_solana_storage_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1382,7 +1382,7 @@ func (x *NumPartitions) ProtoReflect() protoreflect.Message { // Deprecated: Use NumPartitions.ProtoReflect.Descriptor instead. func (*NumPartitions) Descriptor() ([]byte, []int) { - return file_confirmed_block_proto_rawDescGZIP(), []int{18} + return file_solana_storage_proto_rawDescGZIP(), []int{18} } func (x *NumPartitions) GetNumPartitions() uint64 { @@ -1392,282 +1392,282 @@ func (x *NumPartitions) GetNumPartitions() uint64 { return 0 } -var File_confirmed_block_proto protoreflect.FileDescriptor +var File_solana_storage_proto protoreflect.FileDescriptor -var file_confirmed_block_proto_rawDesc = []byte{ - 0x0a, 0x15, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 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, 0x22, 0x89, 0x04, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x65, - 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 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, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x57, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 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, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x3f, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x25, 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, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x73, 0x12, 0x4b, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x73, +var file_solana_storage_proto_rawDesc = []byte{ + 0x0a, 0x14, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 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, 0x07, - 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, 0x53, 0x0a, - 0x0e, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x08, 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, 0x4e, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x22, 0xae, 0x01, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x0b, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2a, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x89, 0x04, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x65, 0x76, + 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 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, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, + 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x57, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 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, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x3f, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x25, 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, 0x02, 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, 0x22, 0x6f, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x73, 0x74, 0x6f, + 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, + 0x12, 0x4b, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, + 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, 0x07, 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, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x81, 0x03, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x44, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 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, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, - 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0b, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x63, - 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x68, 0x61, 0x73, 0x68, 0x12, 0x56, 0x0a, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 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, 0x43, 0x6f, 0x6d, 0x70, 0x69, - 0x6c, 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, - 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1c, 0x0a, 0x09, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x12, 0x6c, 0x0a, 0x15, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, - 0x75, 0x70, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 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, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x6f, - 0x6b, 0x75, 0x70, 0x52, 0x13, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x73, 0x22, 0xcd, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x36, 0x0a, 0x17, 0x6e, 0x75, - 0x6d, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x6e, 0x75, 0x6d, - 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x1c, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, - 0x6c, 0x79, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x19, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x61, - 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x1e, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, - 0x6e, 0x6c, 0x79, 0x5f, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1b, 0x6e, 0x75, 0x6d, - 0x52, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x55, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0x92, 0x01, 0x0a, 0x19, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x10, 0x77, 0x72, 0x69, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x72, 0x65, - 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x22, 0xd9, 0x07, - 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x41, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x73, 0x74, + 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, 0x53, 0x0a, 0x0e, + 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, + 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, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x03, 0x65, 0x72, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x65, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x21, 0x0a, 0x0c, - 0x70, 0x72, 0x65, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x04, 0x52, 0x0b, 0x70, 0x72, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, - 0x23, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x74, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x73, 0x12, 0x5f, 0x0a, 0x12, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x6e, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x30, 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, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x11, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x69, - 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x6e, 0x6f, 0x6e, 0x65, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4e, 0x6f, 0x6e, 0x65, 0x12, 0x21, 0x0a, - 0x0c, 0x6c, 0x6f, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x6f, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x5f, 0x6e, 0x6f, 0x6e, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6c, 0x6f, 0x67, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x4e, 0x6f, 0x6e, 0x65, 0x12, 0x59, 0x0a, 0x12, - 0x70, 0x72, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x4e, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x22, 0xae, 0x01, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x0b, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 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, 0x02, 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, 0x22, 0x6f, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 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, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x81, 0x03, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x44, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 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, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0b, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x63, 0x65, + 0x6e, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, + 0x61, 0x73, 0x68, 0x12, 0x56, 0x0a, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 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, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x69, + 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x12, 0x6c, 0x0a, 0x15, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, + 0x70, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 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, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x10, 0x70, 0x72, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x5b, 0x0a, 0x13, 0x70, 0x6f, 0x73, 0x74, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x08, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x73, 0x74, + 0x6d, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, + 0x75, 0x70, 0x52, 0x13, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x73, 0x22, 0xcd, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x36, 0x0a, 0x17, 0x6e, 0x75, 0x6d, + 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x6e, 0x75, 0x6d, 0x52, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x12, 0x3f, 0x0a, 0x1c, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, + 0x79, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x19, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x61, 0x64, + 0x6f, 0x6e, 0x6c, 0x79, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x12, 0x43, 0x0a, 0x1e, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, + 0x6c, 0x79, 0x5f, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1b, 0x6e, 0x75, 0x6d, 0x52, + 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x55, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0x92, 0x01, 0x0a, 0x19, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4c, + 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x10, 0x77, 0x72, 0x69, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, + 0x73, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x72, 0x65, 0x61, + 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x22, 0xd9, 0x07, 0x0a, + 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x41, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x01, 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, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x65, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, + 0x72, 0x65, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x04, 0x52, 0x0b, 0x70, 0x72, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x23, + 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x73, 0x12, 0x5f, 0x0a, 0x12, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x30, 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, + 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x11, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x6e, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x6e, 0x6f, 0x6e, 0x65, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4e, 0x6f, 0x6e, 0x65, 0x12, 0x21, 0x0a, 0x0c, + 0x6c, 0x6f, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0b, 0x6c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, + 0x2a, 0x0a, 0x11, 0x6c, 0x6f, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x5f, + 0x6e, 0x6f, 0x6e, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6c, 0x6f, 0x67, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x4e, 0x6f, 0x6e, 0x65, 0x12, 0x59, 0x0a, 0x12, 0x70, + 0x72, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 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, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x52, 0x10, 0x70, 0x72, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x5b, 0x0a, 0x13, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x08, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2b, 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, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x52, 0x11, 0x70, 0x6f, 0x73, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x09, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 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, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x52, 0x11, 0x70, 0x6f, 0x73, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, - 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x2e, 0x73, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x72, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x5f, 0x77, + 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x17, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x57, + 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x12, 0x3a, 0x0a, 0x19, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, + 0x6e, 0x6c, 0x79, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x0d, 0x20, + 0x03, 0x28, 0x0c, 0x52, 0x17, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x52, 0x65, 0x61, 0x64, 0x6f, + 0x6e, 0x6c, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x4a, 0x0a, 0x0b, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x29, 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, 0x74, 0x75, 0x72, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6e, 0x6f, 0x6e, 0x65, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x4e, 0x6f, + 0x6e, 0x65, 0x12, 0x39, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x75, 0x6e, + 0x69, 0x74, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x04, 0x48, 0x00, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x55, 0x6e, 0x69, + 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, 0x19, 0x0a, + 0x17, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x5f, + 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x03, + 0x65, 0x72, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x65, 0x72, 0x72, 0x22, 0x7e, + 0x0a, 0x11, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x53, 0x0a, 0x0c, 0x69, 0x6e, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 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, + 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa5, + 0x01, 0x0a, 0x10, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x69, + 0x64, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x70, + 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1a, 0x0a, + 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x26, 0x0a, + 0x0c, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x6f, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, + 0x10, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x5f, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, + 0x49, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd2, 0x01, 0x0a, 0x0c, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x12, 0x0a, + 0x04, 0x6d, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x69, 0x6e, + 0x74, 0x12, 0x54, 0x0a, 0x0f, 0x75, 0x69, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x61, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 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, 0x69, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0d, 0x75, 0x69, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1d, 0x0a, + 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x22, 0x8a, 0x01, 0x0a, + 0x0d, 0x55, 0x69, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, + 0x0a, 0x09, 0x75, 0x69, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x08, 0x75, 0x69, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, + 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, + 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x28, 0x0a, 0x10, 0x75, 0x69, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x75, 0x69, 0x41, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x3f, 0x0a, 0x0a, 0x52, 0x65, 0x74, + 0x75, 0x72, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, + 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x72, 0x6f, + 0x67, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xcb, 0x01, 0x0a, 0x06, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 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, 0x03, 0x52, + 0x08, 0x6c, 0x61, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x6f, 0x73, + 0x74, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0b, 0x70, 0x6f, 0x73, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x0b, + 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x29, 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, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x72, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x9f, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x73, 0x12, 0x3f, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 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, 0x52, 0x07, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x5f, - 0x77, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x17, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, - 0x57, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x61, 0x64, - 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x0d, - 0x20, 0x03, 0x28, 0x0c, 0x52, 0x17, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x52, 0x65, 0x61, 0x64, - 0x6f, 0x6e, 0x6c, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x4a, 0x0a, - 0x0b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x29, 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, 0x74, 0x75, 0x72, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6e, 0x6f, 0x6e, 0x65, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x4e, - 0x6f, 0x6e, 0x65, 0x12, 0x39, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x75, - 0x6e, 0x69, 0x74, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x55, 0x6e, - 0x69, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, 0x19, - 0x0a, 0x17, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x73, - 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x10, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x10, 0x0a, - 0x03, 0x65, 0x72, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x65, 0x72, 0x72, 0x22, - 0x7e, 0x0a, 0x11, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x53, 0x0a, 0x0c, 0x69, 0x6e, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 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, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0xa5, 0x01, 0x0a, 0x10, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, - 0x69, 0x64, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, - 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1a, - 0x0a, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x26, - 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x48, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x73, 0x74, 0x61, 0x63, 0x6b, - 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x6f, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x69, - 0x6c, 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, - 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x5f, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x49, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd2, 0x01, 0x0a, 0x0c, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x12, - 0x0a, 0x04, 0x6d, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x69, - 0x6e, 0x74, 0x12, 0x54, 0x0a, 0x0f, 0x75, 0x69, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 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, 0x69, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0d, 0x75, 0x69, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1d, - 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x22, 0x8a, 0x01, - 0x0a, 0x0d, 0x55, 0x69, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x75, 0x69, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x08, 0x75, 0x69, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, - 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x28, 0x0a, 0x10, 0x75, 0x69, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x75, 0x69, 0x41, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x3f, 0x0a, 0x0a, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xcb, 0x01, 0x0a, 0x06, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 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, 0x03, - 0x52, 0x08, 0x6c, 0x61, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x6f, - 0x73, 0x74, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0b, 0x70, 0x6f, 0x73, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x4a, 0x0a, - 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x29, 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, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x72, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x9f, 0x01, 0x0a, 0x07, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x3f, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 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, 0x52, 0x07, 0x72, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x53, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 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, 0x4e, - 0x75, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x6e, 0x75, - 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x2d, 0x0a, 0x0d, 0x55, - 0x6e, 0x69, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1c, 0x0a, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x30, 0x0a, 0x0b, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 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, 0x36, 0x0a, 0x0d, - 0x4e, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, - 0x0e, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2a, 0x49, 0x0a, 0x0a, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x65, 0x65, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, - 0x52, 0x65, 0x6e, 0x74, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x04, 0x42, - 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x53, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 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, 0x4e, 0x75, + 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x6e, 0x75, 0x6d, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x2d, 0x0a, 0x0d, 0x55, 0x6e, + 0x69, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x30, 0x0a, 0x0b, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 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, 0x36, 0x0a, 0x0d, 0x4e, + 0x75, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, + 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2a, 0x49, 0x0a, 0x0a, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, + 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x65, 0x65, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x52, + 0x65, 0x6e, 0x74, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, + 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x04, 0x42, 0x0a, + 0x5a, 0x08, 0x2e, 0x3b, 0x67, 0x65, 0x79, 0x73, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( - file_confirmed_block_proto_rawDescOnce sync.Once - file_confirmed_block_proto_rawDescData = file_confirmed_block_proto_rawDesc + file_solana_storage_proto_rawDescOnce sync.Once + file_solana_storage_proto_rawDescData = file_solana_storage_proto_rawDesc ) -func file_confirmed_block_proto_rawDescGZIP() []byte { - file_confirmed_block_proto_rawDescOnce.Do(func() { - file_confirmed_block_proto_rawDescData = protoimpl.X.CompressGZIP(file_confirmed_block_proto_rawDescData) +func file_solana_storage_proto_rawDescGZIP() []byte { + file_solana_storage_proto_rawDescOnce.Do(func() { + file_solana_storage_proto_rawDescData = protoimpl.X.CompressGZIP(file_solana_storage_proto_rawDescData) }) - return file_confirmed_block_proto_rawDescData + return file_solana_storage_proto_rawDescData } -var file_confirmed_block_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_confirmed_block_proto_msgTypes = make([]protoimpl.MessageInfo, 19) -var file_confirmed_block_proto_goTypes = []interface{}{ +var file_solana_storage_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_solana_storage_proto_msgTypes = make([]protoimpl.MessageInfo, 19) +var file_solana_storage_proto_goTypes = []interface{}{ (RewardType)(0), // 0: solana.storage.ConfirmedBlock.RewardType (*ConfirmedBlock)(nil), // 1: solana.storage.ConfirmedBlock.ConfirmedBlock (*ConfirmedTransaction)(nil), // 2: solana.storage.ConfirmedBlock.ConfirmedTransaction @@ -1689,7 +1689,7 @@ var file_confirmed_block_proto_goTypes = []interface{}{ (*BlockHeight)(nil), // 18: solana.storage.ConfirmedBlock.BlockHeight (*NumPartitions)(nil), // 19: solana.storage.ConfirmedBlock.NumPartitions } -var file_confirmed_block_proto_depIdxs = []int32{ +var file_solana_storage_proto_depIdxs = []int32{ 2, // 0: solana.storage.ConfirmedBlock.ConfirmedBlock.transactions:type_name -> solana.storage.ConfirmedBlock.ConfirmedTransaction 15, // 1: solana.storage.ConfirmedBlock.ConfirmedBlock.rewards:type_name -> solana.storage.ConfirmedBlock.Reward 17, // 2: solana.storage.ConfirmedBlock.ConfirmedBlock.block_time:type_name -> solana.storage.ConfirmedBlock.UnixTimestamp @@ -1719,13 +1719,13 @@ var file_confirmed_block_proto_depIdxs = []int32{ 0, // [0:22] is the sub-list for field type_name } -func init() { file_confirmed_block_proto_init() } -func file_confirmed_block_proto_init() { - if File_confirmed_block_proto != nil { +func init() { file_solana_storage_proto_init() } +func file_solana_storage_proto_init() { + if File_solana_storage_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_confirmed_block_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConfirmedBlock); i { case 0: return &v.state @@ -1737,7 +1737,7 @@ func file_confirmed_block_proto_init() { return nil } } - file_confirmed_block_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConfirmedTransaction); i { case 0: return &v.state @@ -1749,7 +1749,7 @@ func file_confirmed_block_proto_init() { return nil } } - file_confirmed_block_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Transaction); i { case 0: return &v.state @@ -1761,7 +1761,7 @@ func file_confirmed_block_proto_init() { return nil } } - file_confirmed_block_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Message); i { case 0: return &v.state @@ -1773,7 +1773,7 @@ func file_confirmed_block_proto_init() { return nil } } - file_confirmed_block_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MessageHeader); i { case 0: return &v.state @@ -1785,7 +1785,7 @@ func file_confirmed_block_proto_init() { return nil } } - file_confirmed_block_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MessageAddressTableLookup); i { case 0: return &v.state @@ -1797,7 +1797,7 @@ func file_confirmed_block_proto_init() { return nil } } - file_confirmed_block_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionStatusMeta); i { case 0: return &v.state @@ -1809,7 +1809,7 @@ func file_confirmed_block_proto_init() { return nil } } - file_confirmed_block_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionError); i { case 0: return &v.state @@ -1821,7 +1821,7 @@ func file_confirmed_block_proto_init() { return nil } } - file_confirmed_block_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*InnerInstructions); i { case 0: return &v.state @@ -1833,7 +1833,7 @@ func file_confirmed_block_proto_init() { return nil } } - file_confirmed_block_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*InnerInstruction); i { case 0: return &v.state @@ -1845,7 +1845,7 @@ func file_confirmed_block_proto_init() { return nil } } - file_confirmed_block_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CompiledInstruction); i { case 0: return &v.state @@ -1857,7 +1857,7 @@ func file_confirmed_block_proto_init() { return nil } } - file_confirmed_block_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TokenBalance); i { case 0: return &v.state @@ -1869,7 +1869,7 @@ func file_confirmed_block_proto_init() { return nil } } - file_confirmed_block_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UiTokenAmount); i { case 0: return &v.state @@ -1881,7 +1881,7 @@ func file_confirmed_block_proto_init() { return nil } } - file_confirmed_block_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReturnData); i { case 0: return &v.state @@ -1893,7 +1893,7 @@ func file_confirmed_block_proto_init() { return nil } } - file_confirmed_block_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Reward); i { case 0: return &v.state @@ -1905,7 +1905,7 @@ func file_confirmed_block_proto_init() { return nil } } - file_confirmed_block_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Rewards); i { case 0: return &v.state @@ -1917,7 +1917,7 @@ func file_confirmed_block_proto_init() { return nil } } - file_confirmed_block_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnixTimestamp); i { case 0: return &v.state @@ -1929,7 +1929,7 @@ func file_confirmed_block_proto_init() { return nil } } - file_confirmed_block_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BlockHeight); i { case 0: return &v.state @@ -1941,7 +1941,7 @@ func file_confirmed_block_proto_init() { return nil } } - file_confirmed_block_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_solana_storage_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NumPartitions); i { case 0: return &v.state @@ -1954,25 +1954,25 @@ func file_confirmed_block_proto_init() { } } } - file_confirmed_block_proto_msgTypes[6].OneofWrappers = []interface{}{} - file_confirmed_block_proto_msgTypes[9].OneofWrappers = []interface{}{} + file_solana_storage_proto_msgTypes[6].OneofWrappers = []interface{}{} + file_solana_storage_proto_msgTypes[9].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_confirmed_block_proto_rawDesc, + RawDescriptor: file_solana_storage_proto_rawDesc, NumEnums: 1, NumMessages: 19, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_confirmed_block_proto_goTypes, - DependencyIndexes: file_confirmed_block_proto_depIdxs, - EnumInfos: file_confirmed_block_proto_enumTypes, - MessageInfos: file_confirmed_block_proto_msgTypes, + GoTypes: file_solana_storage_proto_goTypes, + DependencyIndexes: file_solana_storage_proto_depIdxs, + EnumInfos: file_solana_storage_proto_enumTypes, + MessageInfos: file_solana_storage_proto_msgTypes, }.Build() - File_confirmed_block_proto = out.File - file_confirmed_block_proto_rawDesc = nil - file_confirmed_block_proto_goTypes = nil - file_confirmed_block_proto_depIdxs = nil + File_solana_storage_proto = out.File + file_solana_storage_proto_rawDesc = nil + file_solana_storage_proto_goTypes = nil + file_solana_storage_proto_depIdxs = nil } diff --git a/pkg/code/async/geyser/api/proto/geyser.proto b/pkg/code/async/geyser/api/proto/geyser.proto index 76bcfa20..b29cd72e 100644 --- a/pkg/code/async/geyser/api/proto/geyser.proto +++ b/pkg/code/async/geyser/api/proto/geyser.proto @@ -1,224 +1,274 @@ -// Source: https://github.com/jito-foundation/geyser-grpc-plugin/blob/v2.2/proto/proto/geyser.proto +// Source: https://github.com/rpcpool/yellowstone-grpc/blob/v6.0.0%2Bsolana.2.2.12/yellowstone-grpc-proto/proto/geyser.proto syntax = "proto3"; import "google/protobuf/timestamp.proto"; -import "confirmed_block.proto"; - -package solana.geyser; +import public "solana-storage.proto"; option go_package = ".;geyser"; -message PartialAccountUpdate { - // Slot this update occurred. - uint64 slot = 1; +package geyser; - // Account's pubkey. - bytes pubkey = 2; +service Geyser { + rpc Subscribe(stream SubscribeRequest) returns (stream SubscribeUpdate) {} + rpc Ping(PingRequest) returns (PongResponse) {} + rpc GetLatestBlockhash(GetLatestBlockhashRequest) returns (GetLatestBlockhashResponse) {} + rpc GetBlockHeight(GetBlockHeightRequest) returns (GetBlockHeightResponse) {} + rpc GetSlot(GetSlotRequest) returns (GetSlotResponse) {} + rpc IsBlockhashValid(IsBlockhashValidRequest) returns (IsBlockhashValidResponse) {} + rpc GetVersion(GetVersionRequest) returns (GetVersionResponse) {} +} - // Account's owner. - bytes owner = 3; +enum CommitmentLevel { + PROCESSED = 0; + CONFIRMED = 1; + FINALIZED = 2; +} - // Flags whether this update was streamed as part of startup, hence not a realtime update. - bool is_startup = 4; +enum SlotStatus { + SLOT_PROCESSED = 0; + SLOT_CONFIRMED = 1; + SLOT_FINALIZED = 2; + SLOT_FIRST_SHRED_RECEIVED = 3; + SLOT_COMPLETED = 4; + SLOT_CREATED_BANK = 5; + SLOT_DEAD = 6; +} - // A monotonically increasing number specifying the order of this update. - // Can be used to determine what the latest update for an account was at - // a given slot, assuming there were multiple updates. - uint64 seq = 5; +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; + optional CommitmentLevel commitment = 6; + repeated SubscribeRequestAccountsDataSlice accounts_data_slice = 7; + optional SubscribeRequestPing ping = 9; + optional uint64 from_slot = 11; +} - // Transaction signature that caused this update. - optional string tx_signature = 6; +message SubscribeRequestFilterAccounts { + repeated string account = 2; + repeated string owner = 3; + repeated SubscribeRequestFilterAccountsFilter filters = 4; + optional bool nonempty_txn_signature = 5; +} - // AccountReplica version. - uint32 replica_version = 7; +message SubscribeRequestFilterAccountsFilter { + oneof filter { + SubscribeRequestFilterAccountsFilterMemcmp memcmp = 1; + uint64 datasize = 2; + bool token_account_state = 3; + SubscribeRequestFilterAccountsFilterLamports lamports = 4; + } } -message AccountUpdate { - // Slot this update occurred. - uint64 slot = 1; +message SubscribeRequestFilterAccountsFilterMemcmp { + uint64 offset = 1; + oneof data { + bytes bytes = 2; + string base58 = 3; + string base64 = 4; + } +} - // Account's pubkey. - bytes pubkey = 2; +message SubscribeRequestFilterAccountsFilterLamports { + oneof cmp { + uint64 eq = 1; + uint64 ne = 2; + uint64 lt = 3; + uint64 gt = 4; + } +} - // Account's lamports post update. - uint64 lamports = 3; +message SubscribeRequestFilterSlots { + optional bool filter_by_commitment = 1; + optional bool interslot_updates = 2; +} - // Account's owner. - bytes owner = 4; +message SubscribeRequestFilterTransactions { + optional bool vote = 1; + optional bool failed = 2; + optional string signature = 5; + repeated string account_include = 3; + repeated string account_exclude = 4; + repeated string account_required = 6; +} - // Flags whether an account is executable. - bool is_executable = 5; +message SubscribeRequestFilterBlocks { + repeated string account_include = 1; + optional bool include_transactions = 2; + optional bool include_accounts = 3; + optional bool include_entries = 4; +} - // The epoch at which this account will next owe rent. - uint64 rent_epoch = 6; +message SubscribeRequestFilterBlocksMeta {} - // Account's data post update. - bytes data = 7; +message SubscribeRequestFilterEntry {} - // A monotonically increasing number specifying the order of this update. - // Can be used to determine what the latest update for an account was at - // a given slot, assuming there were multiple updates. - uint64 seq = 8; +message SubscribeRequestAccountsDataSlice { + uint64 offset = 1; + uint64 length = 2; +} - // Flags whether this update was streamed as part of startup i.e. not a real-time update. - bool is_startup = 9; +message SubscribeRequestPing { + int32 id = 1; +} - // Transaction signature that caused this update. - optional string tx_signature = 10; +message SubscribeUpdate { + repeated string filters = 1; + oneof update_oneof { + SubscribeUpdateAccount account = 2; + SubscribeUpdateSlot slot = 3; + SubscribeUpdateTransaction transaction = 4; + SubscribeUpdateTransactionStatus transaction_status = 10; + SubscribeUpdateBlock block = 5; + SubscribeUpdatePing ping = 6; + SubscribeUpdatePong pong = 9; + SubscribeUpdateBlockMeta block_meta = 7; + SubscribeUpdateEntry entry = 8; + } + google.protobuf.Timestamp created_at = 11; +} - // AccountReplica version. - uint32 replica_version = 11; +message SubscribeUpdateAccount { + SubscribeUpdateAccountInfo account = 1; + uint64 slot = 2; + bool is_startup = 3; } -enum SlotUpdateStatus { - CONFIRMED = 0; - PROCESSED = 1; - ROOTED = 2; - FIRST_SHRED_RECEIVED = 3; - COMPLETED = 4; - CREATED_BANK = 5; - DEAD = 6; +message SubscribeUpdateAccountInfo { + bytes pubkey = 1; + uint64 lamports = 2; + bytes owner = 3; + bool executable = 4; + uint64 rent_epoch = 5; + bytes data = 6; + uint64 write_version = 7; + optional bytes txn_signature = 8; } -message SlotUpdate { +message SubscribeUpdateSlot { uint64 slot = 1; - optional uint64 parent_slot = 2; - SlotUpdateStatus status = 3; + optional uint64 parent = 2; + SlotStatus status = 3; + optional string dead_error = 4; } -message TimestampedSlotUpdate { - // Time at which the message was generated - google.protobuf.Timestamp ts = 1; - // Slot update - SlotUpdate slot_update = 2; +message SubscribeUpdateTransaction { + SubscribeUpdateTransactionInfo transaction = 1; + uint64 slot = 2; } -message TimestampedAccountUpdate { - // Time at which the message was generated - google.protobuf.Timestamp ts = 1; - // Account update - AccountUpdate account_update = 2; +message SubscribeUpdateTransactionInfo { + bytes signature = 1; + bool is_vote = 2; + solana.storage.ConfirmedBlock.Transaction transaction = 3; + solana.storage.ConfirmedBlock.TransactionStatusMeta meta = 4; + uint64 index = 5; } -message SubscribeTransactionUpdatesRequest {} - -message SubscribeBlockUpdatesRequest {} - -message MaybePartialAccountUpdate { - oneof msg { - PartialAccountUpdate partial_account_update = 1; - Heartbeat hb = 2; - } +message SubscribeUpdateTransactionStatus { + uint64 slot = 1; + bytes signature = 2; + bool is_vote = 3; + uint64 index = 4; + solana.storage.ConfirmedBlock.TransactionError err = 5; } -message Heartbeat {} -message EmptyRequest {} - -message BlockUpdate { - uint64 slot = 1; +message SubscribeUpdateBlock { + uint64 slot = 1; string blockhash = 2; - repeated storage.ConfirmedBlock.Reward rewards = 3; - google.protobuf.Timestamp block_time = 4; - optional uint64 block_height = 5; - optional uint64 executed_transaction_count = 6; - optional uint64 entry_count = 7; -} - -message TimestampedBlockUpdate { - // Time at which the message was generated - google.protobuf.Timestamp ts = 1; - // Block contents - BlockUpdate block_update = 2; + solana.storage.ConfirmedBlock.Rewards rewards = 3; + solana.storage.ConfirmedBlock.UnixTimestamp block_time = 4; + solana.storage.ConfirmedBlock.BlockHeight block_height = 5; + uint64 parent_slot = 7; + string parent_blockhash = 8; + uint64 executed_transaction_count = 9; + repeated SubscribeUpdateTransactionInfo transactions = 6; + uint64 updated_account_count = 10; + repeated SubscribeUpdateAccountInfo accounts = 11; + uint64 entries_count = 12; + repeated SubscribeUpdateEntry entries = 13; } -message TransactionUpdate { +message SubscribeUpdateBlockMeta { uint64 slot = 1; - string signature = 2; - bool is_vote = 3; - uint64 tx_idx = 4; - storage.ConfirmedBlock.ConfirmedTransaction tx = 5; + string blockhash = 2; + solana.storage.ConfirmedBlock.Rewards rewards = 3; + solana.storage.ConfirmedBlock.UnixTimestamp block_time = 4; + solana.storage.ConfirmedBlock.BlockHeight block_height = 5; + uint64 parent_slot = 6; + string parent_blockhash = 7; + uint64 executed_transaction_count = 8; + uint64 entries_count = 9; } -message TimestampedTransactionUpdate { - google.protobuf.Timestamp ts = 1; - TransactionUpdate transaction = 2; +message SubscribeUpdateEntry { + uint64 slot = 1; + uint64 index = 2; + uint64 num_hashes = 3; + bytes hash = 4; + uint64 executed_transaction_count = 5; + uint64 starting_transaction_index = 6; // added in v1.18, for solana 1.17 value is always 0 } +message SubscribeUpdatePing {} -message SubscribeSlotUpdateRequest {} - -message SubscribeAccountUpdatesRequest { - repeated bytes accounts = 1; +message SubscribeUpdatePong { + int32 id = 1; } -message SubscribeProgramsUpdatesRequest { - repeated bytes programs = 1; +// non-streaming methods + +message PingRequest { + int32 count = 1; } -message SubscribePartialAccountUpdatesRequest { - // If true, will not stream vote account updates. - bool skip_vote_accounts = 1; +message PongResponse { + int32 count = 1; } -message GetHeartbeatIntervalResponse { - uint64 heartbeat_interval_ms = 1; +message GetLatestBlockhashRequest { + optional CommitmentLevel commitment = 1; } -/// Modelled based off of https://github.com/solana-labs/solana/blob/v2.0/geyser-plugin-interface/src/geyser_plugin_interface.rs#L210 -/// If more details are needed can extend this structure. -message SlotEntryUpdate { - // The slot number of the block containing this Entry +message GetLatestBlockhashResponse { uint64 slot = 1; - // The Entry's index in the block - uint64 index = 2; - // The number of executed transactions in the Entry - // If this number is zero, we can assume its a tick entry - uint64 executed_transaction_count = 3; + string blockhash = 2; + uint64 last_valid_block_height = 3; } -message TimestampedSlotEntryUpdate { - // Time at which the message was generated - // Send relative timestamp in micros using u32 to reduce overhead. Provides ~71 mins of accuracy between sender and receiver - // See [compact_timestamp::to_system_time] - uint32 ts = 1; - // SlotEntryUpdate update - SlotEntryUpdate entry_update = 2; +message GetBlockHeightRequest { + optional CommitmentLevel commitment = 1; } -message SubscribeSlotEntryUpdateRequest {} - -// The following __must__ be assumed: -// - Clients may receive data for slots out of order. -// - Clients may receive account updates for a given slot out of order. -service Geyser { - // Invoke to get the expected heartbeat interval. - rpc GetHeartbeatInterval(EmptyRequest) returns (GetHeartbeatIntervalResponse) {} - - // Subscribes to account updates in the accounts database; additionally pings clients with empty heartbeats. - // Upon initially connecting the client can expect a `highest_write_slot` set in the http headers. - // Subscribe to account updates - rpc SubscribeAccountUpdates(SubscribeAccountUpdatesRequest) returns (stream TimestampedAccountUpdate) {} +message GetBlockHeightResponse { + uint64 block_height = 1; +} - // Subscribes to updates given a list of program IDs. When an account update comes in that's owned by a provided - // program id, one will receive an update - rpc SubscribeProgramUpdates(SubscribeProgramsUpdatesRequest) returns (stream TimestampedAccountUpdate) {} +message GetSlotRequest { + optional CommitmentLevel commitment = 1; +} - // Functions similarly to `SubscribeAccountUpdates`, but consumes less bandwidth. - // Returns the highest slot seen thus far in the http headers named `highest-write-slot`. - rpc SubscribePartialAccountUpdates(SubscribePartialAccountUpdatesRequest) returns (stream MaybePartialAccountUpdate) {} +message GetSlotResponse { + uint64 slot = 1; +} - // Subscribes to slot updates. - // Returns the highest slot seen thus far in the http headers named `highest-write-slot`. - rpc SubscribeSlotUpdates(SubscribeSlotUpdateRequest) returns (stream TimestampedSlotUpdate) {} +message GetVersionRequest {} - // Subscribes to transaction updates. - rpc SubscribeTransactionUpdates(SubscribeTransactionUpdatesRequest) returns (stream TimestampedTransactionUpdate) {} +message GetVersionResponse { + string version = 1; +} - // Subscribes to block updates. - rpc SubscribeBlockUpdates(SubscribeBlockUpdatesRequest) returns (stream TimestampedBlockUpdate) {} +message IsBlockhashValidRequest { + string blockhash = 1; + optional CommitmentLevel commitment = 2; +} - // Subscribes to entry updates. - // Returns the highest slot seen thus far and the entry index corresponding to the tick - rpc SubscribeSlotEntryUpdates(SubscribeSlotEntryUpdateRequest) returns (stream TimestampedSlotEntryUpdate) {} +message IsBlockhashValidResponse { + uint64 slot = 1; + bool valid = 2; } diff --git a/pkg/code/async/geyser/api/proto/confirmed_block.proto b/pkg/code/async/geyser/api/proto/solana-storage.proto similarity index 94% rename from pkg/code/async/geyser/api/proto/confirmed_block.proto rename to pkg/code/async/geyser/api/proto/solana-storage.proto index c04432c6..1c9c4f73 100644 --- a/pkg/code/async/geyser/api/proto/confirmed_block.proto +++ b/pkg/code/async/geyser/api/proto/solana-storage.proto @@ -1,4 +1,4 @@ -// Source: https://github.com/jito-foundation/geyser-grpc-plugin/blob/v2.2/proto/proto/confirmed_block.proto +// Source: https://github.com/rpcpool/yellowstone-grpc/blob/v6.0.0%2Bsolana.2.2.12/yellowstone-grpc-proto/proto/solana-storage.proto syntax = "proto3"; @@ -134,8 +134,8 @@ message Reward { } message Rewards { - repeated Reward rewards = 1; - NumPartitions num_partitions = 2; + repeated Reward rewards = 1; + NumPartitions num_partitions = 2; } message UnixTimestamp { diff --git a/pkg/code/async/geyser/config.go b/pkg/code/async/geyser/config.go index a6f8861c..bab16e60 100644 --- a/pkg/code/async/geyser/config.go +++ b/pkg/code/async/geyser/config.go @@ -13,6 +13,9 @@ const ( GrpcPluginEndointConfigEnvName = envConfigPrefix + "GRPC_PLUGIN_ENDPOINT" defaultGrpcPluginEndoint = "" + GrpcPluginXTokenConfigEnvName = envConfigPrefix + "GRPC_PLUGIN_X_TOKEN" + defaultGrpcPluginXToken = "" + ProgramUpdateWorkerCountConfigEnvName = envConfigPrefix + "PROGRAM_UPDATE_WORKER_COUNT" defaultProgramUpdateWorkerCount = 1024 @@ -24,13 +27,11 @@ const ( BackupExternalDepositWorkerIntervalConfigEnvName = envConfigPrefix + "BACKUP_EXTERNAL_DEPOSIT_WORKER_INTERVAL" defaultBackupExternalDepositWorkerInterval = 15 * time.Second - - SwapSubsidizerPublicKeyConfigEnvName = envConfigPrefix + "SWAP_SUBSIDIZER_PUBLIC_KEY" - defaultSwapSubsidizerPublicKey = "invalid" // ensure something valid is set ) type conf struct { grpcPluginEndpoint config.String + grpcPluginXToken config.String programUpdateWorkerCount config.Uint64 programUpdateQueueSize config.Uint64 @@ -38,8 +39,6 @@ type conf struct { backupExternalDepositWorkerInterval config.Duration backupTimelockWorkerInterval config.Duration - - swapSubsidizerPublicKey config.String } // ConfigProvider defines how config values are pulled @@ -50,6 +49,7 @@ func WithEnvConfigs() ConfigProvider { return func() *conf { return &conf{ grpcPluginEndpoint: env.NewStringConfig(GrpcPluginEndointConfigEnvName, defaultGrpcPluginEndoint), + grpcPluginXToken: env.NewStringConfig(GrpcPluginXTokenConfigEnvName, defaultGrpcPluginXToken), programUpdateWorkerCount: env.NewUint64Config(ProgramUpdateWorkerCountConfigEnvName, defaultProgramUpdateWorkerCount), programUpdateQueueSize: env.NewUint64Config(ProgramUpdateQueueSizeConfigEnvName, defaultProgramUpdateQueueSize), @@ -57,8 +57,6 @@ func WithEnvConfigs() ConfigProvider { backupExternalDepositWorkerInterval: env.NewDurationConfig(BackupExternalDepositWorkerIntervalConfigEnvName, defaultBackupExternalDepositWorkerInterval), backupTimelockWorkerInterval: env.NewDurationConfig(BackupTimelockWorkerIntervalConfigEnvName, defaultBackupTimelockWorkerInterval), - - swapSubsidizerPublicKey: env.NewStringConfig(SwapSubsidizerPublicKeyConfigEnvName, defaultSwapSubsidizerPublicKey), } } } diff --git a/pkg/code/async/geyser/consumer.go b/pkg/code/async/geyser/consumer.go index 7f6093d1..27b50b11 100644 --- a/pkg/code/async/geyser/consumer.go +++ b/pkg/code/async/geyser/consumer.go @@ -4,12 +4,13 @@ import ( "context" "time" + "github.com/mr-tron/base58" "github.com/newrelic/go-agent/v3/newrelic" "github.com/pkg/errors" "github.com/sirupsen/logrus" - "github.com/code-payments/code-server/pkg/metrics" "github.com/code-payments/code-server/pkg/code/common" + "github.com/code-payments/code-server/pkg/metrics" ) func (p *service) consumeGeyserProgramUpdateEvents(ctx context.Context) error { @@ -23,7 +24,7 @@ func (p *service) consumeGeyserProgramUpdateEvents(ctx context.Context) error { default: } - err := p.subscribeToProgramUpdatesFromGeyser(ctx, p.conf.grpcPluginEndpoint.Get(ctx)) + err := p.subscribeToProgramUpdatesFromGeyser(ctx, p.conf.grpcPluginEndpoint.Get(ctx), p.conf.grpcPluginXToken.Get(ctx)) if err != nil && !errors.Is(err, context.Canceled) { log.WithError(err).Warn("program update consumer unexpectedly terminated") } @@ -44,7 +45,7 @@ func (p *service) consumeGeyserSlotUpdateEvents(ctx context.Context) error { default: } - err := p.subscribeToSlotUpdatesFromGeyser(ctx, p.conf.grpcPluginEndpoint.Get(ctx)) + err := p.subscribeToSlotUpdatesFromGeyser(ctx, p.conf.grpcPluginEndpoint.Get(ctx), p.conf.grpcPluginXToken.Get(ctx)) if err != nil && !errors.Is(err, context.Canceled) { log.WithError(err).Warn("slot update consumer unexpectedly terminated") } @@ -90,13 +91,13 @@ func (p *service) programUpdateWorker(serviceCtx context.Context, id int) { p.metricStatusLock.Unlock() }() - publicKey, err := common.NewAccountFromPublicKeyBytes(update.Pubkey) + publicKey, err := common.NewAccountFromPublicKeyBytes(update.Account.Pubkey) if err != nil { log.WithError(err).Warn("invalid public key") return } - program, err := common.NewAccountFromPublicKeyBytes(update.Owner) + program, err := common.NewAccountFromPublicKeyBytes(update.Account.Owner) if err != nil { log.WithError(err).Warn("invalid owner account") return @@ -107,8 +108,8 @@ func (p *service) programUpdateWorker(serviceCtx context.Context, id int) { "account": publicKey.PublicKey().ToBase58(), "slot": update.Slot, }) - if update.TxSignature != nil { - log = log.WithField("transaction", *update.TxSignature) + if update.Account.TxnSignature != nil { + log = log.WithField("transaction", base58.Encode(update.Account.TxnSignature)) } handler, ok := p.programUpdateHandlers[program.PublicKey().ToBase58()] diff --git a/pkg/code/async/geyser/external_deposit.go b/pkg/code/async/geyser/external_deposit.go index 237d2251..804301bf 100644 --- a/pkg/code/async/geyser/external_deposit.go +++ b/pkg/code/async/geyser/external_deposit.go @@ -405,352 +405,3 @@ func getExternalDepositIntentID(signature string, destination *common.Account) s func getSyncedVmDepositCacheKey(signature string, vmDepositAta *common.Account) string { return fmt.Sprintf("%s:%s", signature, vmDepositAta.PublicKey().ToBase58()) } - -// todo: below swap code needs to be reimagined for the VM - -/* - func markRequiringSwapRetries(ctx context.Context, data code_data.Provider, accountInfoRecord *account.Record) error { - if accountInfoRecord.RequiresSwapRetry { - return nil - } - - accountInfoRecord.RequiresSwapRetry = true - accountInfoRecord.LastSwapRetryAt = time.Now() - err := data.UpdateAccountInfo(ctx, accountInfoRecord) - if err != nil { - return errors.Wrap(err, "error updating swap account info") - } - return nil - } - - func getCodeSwapMetadata(ctx context.Context, conf *conf, tokenBalances *solana.TransactionTokenBalances) (bool, *common.Account, uint64, error) { - // Detect whether this is a Code swap by inspecting whether the swap subsidizer - // is included in the transaction. - var isCodeSwap bool - for _, account := range tokenBalances.Accounts { - if account == conf.swapSubsidizerPublicKey.Get(ctx) { - isCodeSwap = true - break - } - } - - if !isCodeSwap { - return false, nil, 0, nil - } - - var usdcPaid uint64 - var usdcAccount *common.Account - for _, tokenBalance := range tokenBalances.PreTokenBalances { - tokenAccount, err := common.NewAccountFromPublicKeyString(tokenBalances.Accounts[tokenBalance.AccountIndex]) - if err != nil { - return false, nil, 0, errors.Wrap(err, "invalid token account") - } - - if tokenBalance.Mint == common.UsdcMintAccount.PublicKey().ToBase58() { - deltaQuarks, err := getDeltaQuarksFromTokenBalances(tokenAccount, tokenBalances) - if err != nil { - return false, nil, 0, errors.Wrap(err, "error getting delta quarks") - } - - if deltaQuarks >= 0 { - continue - } - - absDeltaQuarks := uint64(-1 * deltaQuarks) - if absDeltaQuarks > usdcPaid { - usdcPaid = absDeltaQuarks - usdcAccount = tokenAccount - } - } - } - - if usdcAccount == nil { - return false, nil, 0, errors.New("usdc account not found") - } - - return true, usdcAccount, usdcPaid, nil - } - - type purchaseWithMetrics struct { - protoExchangeData *transactionpb.ExchangeDataWithoutRate - deviceType client.DeviceType - purchaseInitiationTime *time.Time - usdcDepositTime *time.Time - } - -func getPurchasesFromSwap( - ctx context.Context, - conf *conf, - data code_data.Provider, - signature string, - usdcSwapAccount *common.Account, - usdcQuarksSwapped uint64, - - ) ([]*purchaseWithMetrics, error) { - accountInfoRecord, err := data.GetAccountInfoByTokenAddress(ctx, usdcSwapAccount.PublicKey().ToBase58()) - if err != nil { - return nil, errors.Wrap(err, "error getting account info record") - } else if accountInfoRecord.AccountType != commonpb.AccountType_SWAP { - return nil, errors.New("usdc account is not a code swap account") - } - - cursorValue, err := base58.Decode(signature) - if err != nil { - return nil, err - } - - pageSize := 32 - history, err := data.GetBlockchainHistory( - ctx, - usdcSwapAccount.PublicKey().ToBase58(), - solana.CommitmentFinalized, - query.WithCursor(cursorValue), - query.WithLimit(uint64(pageSize)), - ) - if err != nil { - return nil, errors.Wrap(err, "error getting transaction history") - } - - purchases, err := func() ([]*purchaseWithMetrics, error) { - var res []*purchaseWithMetrics - var usdcDeposited uint64 - for _, historyItem := range history { - if historyItem.Err != nil { - continue - } - - tokenBalances, err := data.GetBlockchainTransactionTokenBalances(ctx, base58.Encode(historyItem.Signature[:])) - if err != nil { - return nil, errors.Wrap(err, "error getting token balances") - } - blockTime := time.Now() - if historyItem.BlockTime != nil { - blockTime = *historyItem.BlockTime - } - - isCodeSwap, _, _, err := getCodeSwapMetadata(ctx, conf, tokenBalances) - if err != nil { - return nil, errors.Wrap(err, "error getting code swap metadata") - } - - // Found another swap, so stop searching for purchases - if isCodeSwap { - // The amount of USDC deposited doesn't equate to the amount we - // swapped. There's either a race condition between a swap and - // deposit, or the user is manually moving funds in the account. - // - // Either way, the current algorithm can't properly assign pruchases - // to the swap, so return an empty result. - if usdcDeposited != usdcQuarksSwapped { - return nil, nil - } - - return res, nil - } - - deltaQuarks, err := getDeltaQuarksFromTokenBalances(usdcSwapAccount, tokenBalances) - if err != nil { - return nil, errors.Wrap(err, "error getting delta usdc from token balances") - } - - // Skip any USDC withdrawals. The average user will not be able to - // do this anyways since the swap account is derived off the 12 words. - if deltaQuarks <= 0 { - continue - } - - usdAmount := float64(deltaQuarks) / float64(usdc.QuarksPerUsdc) - usdcDeposited += uint64(deltaQuarks) - - // Disregard any USDC deposits for inconsequential amounts to avoid - // spam coming through - if usdAmount < 0.01 { - continue - } - - rawUsdPurchase := &purchaseWithMetrics{ - protoExchangeData: &transactionpb.ExchangeDataWithoutRate{ - Currency: "usd", - NativeAmount: math.Round(usdAmount), // Round to nearest $1 since we don't support decimals in app yet - }, - deviceType: client.DeviceTypeUnknown, - usdcDepositTime: historyItem.BlockTime, - } - - // There is no memo for a blockchain message - if historyItem.Memo == nil { - res = append([]*purchaseWithMetrics{rawUsdPurchase}, res...) - continue - } - - // Attempt to parse a blockchain message from the memo, which will contain a - // nonce that maps to a fiat purchase from an onramp. - memoParts := strings.Split(*historyItem.Memo, " ") - memoMessage := memoParts[len(memoParts)-1] - blockchainMessage, err := thirdparty.DecodeFiatOnrampPurchaseMessage([]byte(memoMessage)) - if err != nil { - res = append([]*purchaseWithMetrics{rawUsdPurchase}, res...) - continue - } - onrampRecord, err := data.GetFiatOnrampPurchase(ctx, blockchainMessage.Nonce) - if err == onramp.ErrPurchaseNotFound { - res = append([]*purchaseWithMetrics{rawUsdPurchase}, res...) - continue - } else if err != nil { - return nil, errors.Wrap(err, "error getting onramp record") - } - - rawUsdPurchase.deviceType = client.DeviceType(onrampRecord.Platform) - rawUsdPurchase.purchaseInitiationTime = &onrampRecord.CreatedAt - - // This nonce is not associated with the owner account linked to the - // fiat purchase. - if onrampRecord.Owner != accountInfoRecord.OwnerAccount { - res = append([]*purchaseWithMetrics{rawUsdPurchase}, res...) - continue - } - - // Ensure the amounts make some sense wrt FX rates if we have them. We - // allow a generous buffer of 10% to account for fees that might be - // taken off of the deposited amount. - var usdRate, otherCurrencyRate float64 - usdRateRecord, err := data.GetExchangeRate(ctx, currency_lib.USD, blockTime) - if err == nil { - usdRate = usdRateRecord.Rate - } - otherCurrencyRateRecord, err := data.GetExchangeRate(ctx, currency_lib.Code(onrampRecord.Currency), blockTime) - if err == nil { - otherCurrencyRate = otherCurrencyRateRecord.Rate - } - if usdRate != 0 && otherCurrencyRate != 0 { - fxRate := otherCurrencyRate / usdRate - pctDiff := math.Abs(usdAmount*fxRate-onrampRecord.Amount) / onrampRecord.Amount - if pctDiff > 0.1 { - res = append([]*purchaseWithMetrics{rawUsdPurchase}, res...) - continue - } - } - - res = append([]*purchaseWithMetrics{ - { - protoExchangeData: &transactionpb.ExchangeDataWithoutRate{ - Currency: onrampRecord.Currency, - NativeAmount: onrampRecord.Amount, - }, - deviceType: client.DeviceType(onrampRecord.Platform), - purchaseInitiationTime: &onrampRecord.CreatedAt, - usdcDepositTime: historyItem.BlockTime, - }, - }, res...) - } - - if len(history) < pageSize { - // At the end of history, so return the result - return res, nil - } - // Didn't find another swap, so we didn't find the full purchase history. - // Return an empty result. - // - // todo: Continue looking back into history - return nil, nil - }() - if err != nil { - return nil, err - } - - if len(purchases) == 0 { - // No purchases were returned, so defer back to the USDC amount swapped - return []*purchaseWithMetrics{ - { - protoExchangeData: &transactionpb.ExchangeDataWithoutRate{ - Currency: "usd", - NativeAmount: float64(usdcQuarksSwapped) / float64(usdc.QuarksPerUsdc), - }, - }, - }, nil - } - return purchases, nil - } - -func delayedUsdcDepositProcessing( - ctx context.Context, - conf *conf, - data code_data.Provider, - ownerAccount *common.Account, - tokenAccount *common.Account, - signature string, - blockTime time.Time, - - ) { - // todo: configurable - time.Sleep(2 * time.Minute) - - history, err := data.GetBlockchainHistory(ctx, tokenAccount.PublicKey().ToBase58(), solana.CommitmentFinalized, query.WithLimit(32)) - if err != nil { - return - } - - var foundSignature bool - var historyToCheck []*solana.TransactionSignature - for _, historyItem := range history { - if base58.Encode(historyItem.Signature[:]) == signature { - foundSignature = true - break - } - - if historyItem.Err == nil { - historyToCheck = append(historyToCheck, historyItem) - } - } - - // The deposit is too far in the past in history, so we opt to skip processing it. - if !foundSignature { - return - } - - for _, historyItem := range historyToCheck { - tokenBalances, err := data.GetBlockchainTransactionTokenBalances(ctx, base58.Encode(historyItem.Signature[:])) - if err != nil { - continue - } - - isCodeSwap, _, _, err := getCodeSwapMetadata(ctx, conf, tokenBalances) - if err != nil { - continue - } - - if isCodeSwap { - return - } - } - } - -// Optimistically tries to cache a balance for an external account not managed -// Code. It doesn't need to be perfect and will be lazily corrected on the next -// balance fetch with a newer state returned by a RPC node. - - func bestEffortCacheExternalAccountBalance(ctx context.Context, data code_data.Provider, tokenAccount *common.Account, tokenBalances *solana.TransactionTokenBalances) { - postBalance, err := getPostQuarkBalance(tokenAccount, tokenBalances) - if err == nil { - checkpointRecord := &balance.Record{ - TokenAccount: tokenAccount.PublicKey().ToBase58(), - Quarks: postBalance, - SlotCheckpoint: tokenBalances.Slot, - } - data.SaveBalanceCheckpoint(ctx, checkpointRecord) - } - } - - func getPostQuarkBalance(tokenAccount *common.Account, tokenBalances *solana.TransactionTokenBalances) (uint64, error) { - for _, postBalance := range tokenBalances.PostTokenBalances { - if tokenBalances.Accounts[postBalance.AccountIndex] == tokenAccount.PublicKey().ToBase58() { - postQuarkBalance, err := strconv.ParseUint(postBalance.TokenAmount.Amount, 10, 64) - if err != nil { - return 0, errors.Wrap(err, "error parsing post token balance") - } - return postQuarkBalance, nil - } - } - return 0, errors.New("no post balance for account") -} -*/ diff --git a/pkg/code/async/geyser/handler.go b/pkg/code/async/geyser/handler.go index 7920bcc1..2f4f87cb 100644 --- a/pkg/code/async/geyser/handler.go +++ b/pkg/code/async/geyser/handler.go @@ -24,7 +24,7 @@ type ProgramAccountUpdateHandler interface { // to come in order. Implementations must be idempotent and should not // trust the account data passed in. Always refer to finalized blockchain // state from another RPC provider. - Handle(ctx context.Context, update *geyserpb.AccountUpdate) error + Handle(ctx context.Context, update *geyserpb.SubscribeUpdateAccount) error } type TokenProgramAccountHandler struct { @@ -42,31 +42,32 @@ func NewTokenProgramAccountHandler(conf *conf, data code_data.Provider, vmIndexe } // todo: This needs to handle swaps -func (h *TokenProgramAccountHandler) Handle(ctx context.Context, update *geyserpb.AccountUpdate) error { - if !bytes.Equal(update.Owner, token.ProgramKey) { +func (h *TokenProgramAccountHandler) Handle(ctx context.Context, update *geyserpb.SubscribeUpdateAccount) error { + if !bytes.Equal(update.Account.Owner, token.ProgramKey) { return ErrUnexpectedProgramOwner } // We need to know the amount being deposited, and that's impossible without // a transaction signature. - if update.TxSignature == nil { + if len(update.Account.TxnSignature) == 0 { return nil } + signature := base58.Encode(update.Account.TxnSignature) // We need to know more about the account before accessing our data stores, // so skip anything that doesn't have data. I'm assuming this means the account // is closed anyways. - if len(update.Data) == 0 { + if len(update.Account.Data) == 0 { return nil } var unmarshalled token.Account - if !unmarshalled.Unmarshal(update.Data) { + if !unmarshalled.Unmarshal(update.Account.Data) { // Probably not a token account (eg. mint) return nil } - tokenAccount, err := common.NewAccountFromPublicKeyBytes(update.Pubkey) + tokenAccount, err := common.NewAccountFromPublicKeyBytes(update.Account.Pubkey) if err != nil { return errors.Wrap(err, "invalid token account") } @@ -96,7 +97,7 @@ func (h *TokenProgramAccountHandler) Handle(ctx context.Context, update *geyserp return nil } - err = processPotentialExternalDepositIntoVm(ctx, h.data, *update.TxSignature, userAuthorityAccount) + err = processPotentialExternalDepositIntoVm(ctx, h.data, signature, userAuthorityAccount) if err != nil { return errors.Wrap(err, "error processing signature for external deposit into vm") } diff --git a/pkg/code/async/geyser/metrics.go b/pkg/code/async/geyser/metrics.go index 22ee2a3e..9201e331 100644 --- a/pkg/code/async/geyser/metrics.go +++ b/pkg/code/async/geyser/metrics.go @@ -4,7 +4,6 @@ import ( "context" "time" - "github.com/code-payments/code-server/pkg/grpc/client" "github.com/code-payments/code-server/pkg/metrics" "github.com/code-payments/code-server/pkg/solana" ) @@ -20,9 +19,6 @@ const ( slotUpdateWorkerName = "SlotUpdate" externalDepositWorkerName = "ExternalDeposit" timelockStateWorkerName = "TimelockState" - messagingWorkerName = "Messaging" - - buyModulePurchaseCompletedEventName = "BuyModulePurchaseCompleted" ) func (p *service) metricsGaugeWorker(ctx context.Context) error { @@ -35,9 +31,9 @@ func (p *service) metricsGaugeWorker(ctx context.Context) error { case <-time.After(delay): start := time.Now() - //p.recordSubscriptionStatusPollingEvent(ctx) - //p.recordEventWorkerStatusPollingEvent(ctx) - //p.recordEventQueueStatusPollingEvent(ctx) + p.recordSubscriptionStatusPollingEvent(ctx) + p.recordEventWorkerStatusPollingEvent(ctx) + p.recordEventQueueStatusPollingEvent(ctx) p.recordBackupWorkerStatusPollingEvent(ctx) p.recordBackupQueueStatusPollingEvent(ctx) @@ -58,16 +54,16 @@ func (p *service) recordSubscriptionStatusPollingEvent(ctx context.Context) { }) var slotsBehind uint64 - if currentFinalizedSlot > p.highestObservedRootedSlot { - slotsBehind = currentFinalizedSlot - p.highestObservedRootedSlot + if currentFinalizedSlot > p.highestObservedFinalizedSlot { + slotsBehind = currentFinalizedSlot - p.highestObservedFinalizedSlot } kvPairs := map[string]interface{}{ "event_type": slotUpdateWorkerName, "is_active": p.slotUpdateSubscriptionStatus, } - if p.highestObservedRootedSlot > 0 { - kvPairs["highest_observed_slot"] = p.highestObservedRootedSlot + if p.highestObservedFinalizedSlot > 0 { + kvPairs["highest_observed_slot"] = p.highestObservedFinalizedSlot if currentFinalizedSlot > 0 { kvPairs["slots_behind"] = slotsBehind } @@ -137,16 +133,3 @@ func (p *service) recordBackupQueueStatusPollingEvent(ctx context.Context) { "current_size": count, }) } - -func recordBuyModulePurchaseCompletedEvent(ctx context.Context, deviceType client.DeviceType, purchaseInitiationTime *time.Time, usdcDepositTime *time.Time) { - kvs := map[string]interface{}{ - "platform": deviceType.String(), - } - if purchaseInitiationTime != nil { - kvs["total_latency"] = int(time.Since(*purchaseInitiationTime) / time.Millisecond) - } - if usdcDepositTime != nil { - kvs["swap_latency"] = int(time.Since(*usdcDepositTime) / time.Millisecond) - } - metrics.RecordEvent(ctx, buyModulePurchaseCompletedEventName, kvs) -} diff --git a/pkg/code/async/geyser/service.go b/pkg/code/async/geyser/service.go index 0342c95f..4f344683 100644 --- a/pkg/code/async/geyser/service.go +++ b/pkg/code/async/geyser/service.go @@ -20,13 +20,14 @@ type eventWorkerMetrics struct { eventsProcessed int } +// todo: we can consolidate the various subscription streams into one type service struct { log *logrus.Entry data code_data.Provider vmIndexerClient indexerpb.IndexerClient conf *conf - programUpdatesChan chan *geyserpb.AccountUpdate + programUpdatesChan chan *geyserpb.SubscribeUpdateAccount programUpdateHandlers map[string]ProgramAccountUpdateHandler metricStatusLock sync.RWMutex @@ -35,7 +36,7 @@ type service struct { programUpdateWorkerMetrics map[int]*eventWorkerMetrics slotUpdateSubscriptionStatus bool - highestObservedRootedSlot uint64 + highestObservedFinalizedSlot uint64 oldestTimelockRecord *time.Time backupTimelockStateWorkerStatus bool @@ -50,7 +51,7 @@ func New(data code_data.Provider, vmIndexerClient indexerpb.IndexerClient, confi data: data, vmIndexerClient: vmIndexerClient, conf: configProvider(), - programUpdatesChan: make(chan *geyserpb.AccountUpdate, conf.programUpdateQueueSize.Get(context.Background())), + programUpdatesChan: make(chan *geyserpb.SubscribeUpdateAccount, conf.programUpdateQueueSize.Get(context.Background())), programUpdateHandlers: initializeProgramAccountUpdateHandlers(conf, data, vmIndexerClient), programUpdateWorkerMetrics: make(map[int]*eventWorkerMetrics), } diff --git a/pkg/code/async/geyser/subscription.go b/pkg/code/async/geyser/subscription.go index 3722296f..f1b688d9 100644 --- a/pkg/code/async/geyser/subscription.go +++ b/pkg/code/async/geyser/subscription.go @@ -4,9 +4,11 @@ import ( "context" "time" + "github.com/mr-tron/base58" "github.com/pkg/errors" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" + "google.golang.org/grpc/metadata" geyserpb "github.com/code-payments/code-server/pkg/code/async/geyser/api/gen" @@ -18,49 +20,30 @@ const ( ) var ( - ErrSubscriptionFallenBehind = errors.New("subscription stream fell behind") - ErrTimeoutReceivingUpdate = errors.New("timed out receiving update") + ErrTimeoutReceivingUpdate = errors.New("timed out receiving update") ) -func newGeyserClient(ctx context.Context, endpoint string) (geyserpb.GeyserClient, error) { - conn, err := grpc.Dial(endpoint, grpc.WithTransportCredentials(insecure.NewCredentials())) +func newGeyserClient(endpoint, xToken string) (geyserpb.GeyserClient, error) { + opts := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())} + if len(xToken) > 0 { + opts = append( + opts, + grpc.WithUnaryInterceptor(newXTokenUnaryClientInterceptor(xToken)), + grpc.WithStreamInterceptor(newXTokenStreamClientInterceptor(xToken)), + ) + } + + conn, err := grpc.NewClient(endpoint, opts...) if err != nil { return nil, err } client := geyserpb.NewGeyserClient(conn) - // Unfortunately the RPCs we use no longer support hearbeats. We'll let each - // individual subscriber determine what an appropriate timeout to receive a - // message should be. - /* - heartbeatResp, err := client.GetHeartbeatInterval(ctx, &geyserpb.EmptyRequest{}) - if err != nil { - return nil, 0, errors.Wrap(err, "error getting heartbeat interval") - } - - heartbeatTimeout := time.Duration(2 * heartbeatResp.HeartbeatIntervalMs * uint64(time.Millisecond)) - */ - return client, nil } -func boundedProgramUpdateRecv(ctx context.Context, streamer geyserpb.Geyser_SubscribeProgramUpdatesClient, timeout time.Duration) (update *geyserpb.TimestampedAccountUpdate, err error) { - done := make(chan struct{}) - go func() { - update, err = streamer.Recv() - close(done) - }() - - select { - case <-time.After(timeout): - return nil, ErrTimeoutReceivingUpdate - case <-done: - return update, err - } -} - -func boundedSlotUpdateRecv(ctx context.Context, streamer geyserpb.Geyser_SubscribeSlotUpdatesClient, timeout time.Duration) (update *geyserpb.TimestampedSlotUpdate, err error) { +func boundedRecv(ctx context.Context, streamer geyserpb.Geyser_SubscribeClient, timeout time.Duration) (update *geyserpb.SubscribeUpdate, err error) { done := make(chan struct{}) go func() { update, err = streamer.Recv() @@ -68,6 +51,8 @@ func boundedSlotUpdateRecv(ctx context.Context, streamer geyserpb.Geyser_Subscri }() select { + case <-ctx.Done(): + return nil, ctx.Err() case <-time.After(timeout): return nil, ErrTimeoutReceivingUpdate case <-done: @@ -75,7 +60,7 @@ func boundedSlotUpdateRecv(ctx context.Context, streamer geyserpb.Geyser_Subscri } } -func (p *service) subscribeToProgramUpdatesFromGeyser(ctx context.Context, endpoint string) error { +func (p *service) subscribeToProgramUpdatesFromGeyser(ctx context.Context, endpoint, xToken string) error { log := p.log.WithField("method", "subscribeToProgramUpdatesFromGeyser") log.Debug("subscription started") @@ -87,21 +72,32 @@ func (p *service) subscribeToProgramUpdatesFromGeyser(ctx context.Context, endpo log.Debug("subscription stopped") }() - client, err := newGeyserClient(ctx, endpoint) + client, err := newGeyserClient(endpoint, xToken) if err != nil { return errors.Wrap(err, "error creating client") } - streamer, err := client.SubscribeProgramUpdates(ctx, &geyserpb.SubscribeProgramsUpdatesRequest{ - Programs: [][]byte{token.ProgramKey}, - }) + streamer, err := client.Subscribe(ctx) if err != nil { return errors.Wrap(err, "error opening subscription stream") } + req := &geyserpb.SubscribeRequest{ + Accounts: make(map[string]*geyserpb.SubscribeRequestFilterAccounts), + } + req.Accounts["accounts_subscription"] = &geyserpb.SubscribeRequestFilterAccounts{ + Owner: []string{base58.Encode(token.ProgramKey)}, + } + finalizedCommitmentLevel := geyserpb.CommitmentLevel_FINALIZED + req.Commitment = &finalizedCommitmentLevel + err = streamer.Send(req) + if err != nil { + return errors.Wrap(err, "error sending subscription request") + } + var isSubscriptionActive bool for { - update, err := boundedProgramUpdateRecv(ctx, streamer, defaultStreamSubscriptionTimeout) + update, err := boundedRecv(ctx, streamer, defaultStreamSubscriptionTimeout) if err != nil { return errors.Wrap(err, "error recieving update") } @@ -115,15 +111,14 @@ func (p *service) subscribeToProgramUpdatesFromGeyser(ctx context.Context, endpo isSubscriptionActive = true } - messageAge := time.Since(update.Ts.AsTime()) - if messageAge > defaultStreamSubscriptionTimeout { - log.WithField("message_age", messageAge).Warn(ErrSubscriptionFallenBehind.Error()) - return ErrSubscriptionFallenBehind + accountUpdate := update.GetAccount() + if accountUpdate == nil { + continue } // Ignore startup updates. We only care about real-time updates due to // transactions. - if update.AccountUpdate.IsStartup { + if accountUpdate.IsStartup { continue } @@ -132,14 +127,14 @@ func (p *service) subscribeToProgramUpdatesFromGeyser(ctx context.Context, endpo // backing up the Geyser plugin, which kills this subscription and we end up // missing updates. select { - case p.programUpdatesChan <- update.AccountUpdate: + case p.programUpdatesChan <- accountUpdate: default: log.Warn("dropping update because queue is full") } } } -func (p *service) subscribeToSlotUpdatesFromGeyser(ctx context.Context, endpoint string) error { +func (p *service) subscribeToSlotUpdatesFromGeyser(ctx context.Context, endpoint, xToken string) error { log := p.log.WithField("method", "subscribeToSlotUpdatesFromGeyser") log.Debug("subscription started") @@ -151,40 +146,81 @@ func (p *service) subscribeToSlotUpdatesFromGeyser(ctx context.Context, endpoint log.Debug("subscription stopped") }() - client, err := newGeyserClient(ctx, endpoint) + client, err := newGeyserClient(endpoint, xToken) if err != nil { return errors.Wrap(err, "error creating client") } - streamer, err := client.SubscribeSlotUpdates(ctx, &geyserpb.SubscribeSlotUpdateRequest{}) + streamer, err := client.Subscribe(ctx) if err != nil { return errors.Wrap(err, "error opening subscription stream") } + req := &geyserpb.SubscribeRequest{ + Slots: make(map[string]*geyserpb.SubscribeRequestFilterSlots), + } + req.Slots["slots_subscription"] = &geyserpb.SubscribeRequestFilterSlots{} + err = streamer.Send(req) + if err != nil { + return errors.Wrap(err, "error sending subscription request") + } + p.metricStatusLock.Lock() p.slotUpdateSubscriptionStatus = true p.metricStatusLock.Unlock() for { - update, err := boundedSlotUpdateRecv(ctx, streamer, defaultStreamSubscriptionTimeout) + update, err := boundedRecv(ctx, streamer, defaultStreamSubscriptionTimeout) if err != nil { return errors.Wrap(err, "error recieving update") } - messageAge := time.Since(update.Ts.AsTime()) - if messageAge > defaultStreamSubscriptionTimeout { - log.WithField("message_age", messageAge).Warn(ErrSubscriptionFallenBehind.Error()) - return ErrSubscriptionFallenBehind + slotUpdate := update.GetSlot() + if slotUpdate == nil { + continue } - if update.SlotUpdate.Status != geyserpb.SlotUpdateStatus_ROOTED { + if slotUpdate.Status != geyserpb.SlotStatus_SLOT_FINALIZED { continue } p.metricStatusLock.Lock() - if update.SlotUpdate.Slot > p.highestObservedRootedSlot { - p.highestObservedRootedSlot = update.SlotUpdate.Slot + if slotUpdate.Slot > p.highestObservedFinalizedSlot { + p.highestObservedFinalizedSlot = slotUpdate.Slot } p.metricStatusLock.Unlock() } } + +func newXTokenUnaryClientInterceptor(xToken string) grpc.UnaryClientInterceptor { + return func( + ctx context.Context, + method string, + req, reply interface{}, + cc *grpc.ClientConn, + invoker grpc.UnaryInvoker, + opts ...grpc.CallOption, + ) error { + ctx = withXToken(ctx, xToken) + return invoker(ctx, method, req, reply, cc, opts...) + } +} + +func newXTokenStreamClientInterceptor(xToken string) grpc.StreamClientInterceptor { + return func( + ctx context.Context, + desc *grpc.StreamDesc, + cc *grpc.ClientConn, + method string, + streamer grpc.Streamer, + opts ...grpc.CallOption, + ) (grpc.ClientStream, error) { + ctx = withXToken(ctx, xToken) + return streamer(ctx, desc, cc, method, opts...) + } +} + +func withXToken(ctx context.Context, xToken string) context.Context { + md := metadata.Pairs("x-token", xToken) + return metadata.NewOutgoingContext(ctx, md) +}