From dafc48b069ef89660c10f439e45679efefc2fe71 Mon Sep 17 00:00:00 2001 From: kaleofduty <59616916+kaleofduty@users.noreply.github.com> Date: Wed, 4 Jun 2025 16:56:18 +0200 Subject: [PATCH] Improvements: - Transmission telemetry for OCR2 and OCR3. To enable it, be sure to set LocalConfig.EnableTransmissionTelemetry - Further OCR3.1 work. Note that this release is only compatible (on the wire) with libocr release c90716988ee0037688190cded8ba17d666a0d836 or newer - Various logging and documentation improvements Based on 478f9240ece50a87dba40b2985d1e27a22daf896 --- .../protocol/observation/observation.go | 1 - .../internal/serialization/serialization.go | 2 +- .../reportingplugin/median/median.go | 2 +- .../config/ocr2config/public_config.go | 6 +- .../config/ocr3config/public_config.go | 6 +- .../internal/managed/limits/ocr3_limits.go | 4 +- .../managed/managed_mercury_oracle.go | 2 +- .../internal/managed/managed_ocr2_oracle.go | 2 +- .../internal/managed/managed_ocr3_oracle.go | 2 +- .../internal/ocr2/protocol/oracle.go | 1 + .../internal/ocr2/protocol/pacemaker.go | 2 + .../protocol/report_generation_follower.go | 7 +- .../internal/ocr2/protocol/telemetry.go | 28 +- .../internal/ocr2/protocol/transmission.go | 61 +- .../offchainreporting2_telemetry.pb.go | 687 ++++++++++++++-- .../internal/ocr3/protocol/message.go | 20 +- .../internal/ocr3/protocol/oracle.go | 1 + .../protocol/outcome_generation_follower.go | 2 +- .../protocol/outcome_generation_leader.go | 19 +- .../internal/ocr3/protocol/pacemaker.go | 3 + .../internal/ocr3/protocol/signed_data.go | 232 +++++- .../internal/ocr3/protocol/telemetry.go | 34 + .../internal/ocr3/protocol/transmission.go | 124 ++- .../offchainreporting3_messages.pb.go | 346 ++++---- .../offchainreporting3_telemetry.pb.go | 739 +++++++++++++++--- .../ocr3/serialization/serialization.go | 4 + .../internal/shim/ocr2_telemetry_sender.go | 105 ++- .../internal/shim/ocr3_telemetry_sender.go | 104 ++- offchainreporting2plus/types/local_config.go | 5 + ragep2p/internal/mtls/common.go | 3 +- 30 files changed, 2103 insertions(+), 451 deletions(-) diff --git a/offchainreporting/internal/protocol/observation/observation.go b/offchainreporting/internal/protocol/observation/observation.go index 41d02e07..8d911422 100644 --- a/offchainreporting/internal/protocol/observation/observation.go +++ b/offchainreporting/internal/protocol/observation/observation.go @@ -58,7 +58,6 @@ func (o Observation) GoEthereumValue() *big.Int { return o.v } func (o Observation) Deviates(old Observation, thresholdPPB uint64) bool { if old.v.Cmp(i(0)) == 0 { - //nolint:gosimple if o.v.Cmp(i(0)) == 0 { return false // Both values are zero; no deviation } diff --git a/offchainreporting/internal/serialization/serialization.go b/offchainreporting/internal/serialization/serialization.go index 6428f599..82836b71 100644 --- a/offchainreporting/internal/serialization/serialization.go +++ b/offchainreporting/internal/serialization/serialization.go @@ -389,7 +389,7 @@ func finalToProtoMessage(v protocol.MessageFinal) *protobuf.MessageFinal { Signatures: make([][]byte, len(v.Report.Signatures)), }, } - for i, sig := range v.Report.Signatures { //nolint:gosimple + for i, sig := range v.Report.Signatures { //nolint:staticcheck pm.Report.Signatures[i] = sig } return pm diff --git a/offchainreporting2/reportingplugin/median/median.go b/offchainreporting2/reportingplugin/median/median.go index 25a4d37b..1e763298 100644 --- a/offchainreporting2/reportingplugin/median/median.go +++ b/offchainreporting2/reportingplugin/median/median.go @@ -337,7 +337,7 @@ func (fac NumericalMedianFactory) NewReportingPlugin(ctx context.Context, config func DefaultDeviationFunc(_ context.Context, thresholdPPB uint64, old *big.Int, new *big.Int) (bool, error) { if old.Cmp(i(0)) == 0 { - if new.Cmp(i(0)) == 0 { //nolint:gosimple + if new.Cmp(i(0)) == 0 { return false, nil // Both values are zero; no deviation } return true, nil // Any deviation from 0 is significant diff --git a/offchainreporting2plus/internal/config/ocr2config/public_config.go b/offchainreporting2plus/internal/config/ocr2config/public_config.go index 633df1e0..350a0fd1 100644 --- a/offchainreporting2plus/internal/config/ocr2config/public_config.go +++ b/offchainreporting2plus/internal/config/ocr2config/public_config.go @@ -12,8 +12,10 @@ import ( "github.com/smartcontractkit/libocr/offchainreporting2plus/types" ) -// PublicConfig is the configuration disseminated through the smart contract -// It's public, because anybody can read it from the blockchain +// PublicConfig is the configuration disseminated through the smart contract. +// It's public, because anybody can read it from the blockchain. +// The various parameters (e.g. Delta*, MaxDuration*) have some dependencies +// on each other, so be sure to consider the holistic impact of changes to them. type PublicConfig struct { // If an epoch (driven by a leader) fails to achieve progress (generate a // report) after DeltaProgress, we enter a new epoch. This parameter must be diff --git a/offchainreporting2plus/internal/config/ocr3config/public_config.go b/offchainreporting2plus/internal/config/ocr3config/public_config.go index 6dd5e34c..2785dd3f 100644 --- a/offchainreporting2plus/internal/config/ocr3config/public_config.go +++ b/offchainreporting2plus/internal/config/ocr3config/public_config.go @@ -13,8 +13,10 @@ import ( "github.com/smartcontractkit/libocr/offchainreporting2plus/types" ) -// PublicConfig is the configuration disseminated through the smart contract -// It's public, because anybody can read it from the blockchain +// PublicConfig is the configuration disseminated through the smart contract. +// It's public, because anybody can read it from the blockchain. +// The various parameters (e.g. Delta*, MaxDuration*) have some dependencies +// on each other, so be sure to consider the holistic impact of changes to them. type PublicConfig struct { // If an epoch (driven by a leader) fails to achieve progress (generate a // report) after DeltaProgress, we enter a new epoch. This parameter must be diff --git a/offchainreporting2plus/internal/managed/limits/ocr3_limits.go b/offchainreporting2plus/internal/managed/limits/ocr3_limits.go index db8c5be4..fb8e1776 100644 --- a/offchainreporting2plus/internal/managed/limits/ocr3_limits.go +++ b/offchainreporting2plus/internal/managed/limits/ocr3_limits.go @@ -61,9 +61,9 @@ func ocr3limits(cfg ocr3config.PublicConfig, pluginLimits ocr3types.ReportingPlu maxLenMsgNewEpoch := overhead maxLenMsgEpochStartRequest := add(maxLenCertifiedPrepareOrCommit, overhead) maxLenMsgEpochStart := add(maxLenCertifiedPrepareOrCommit, mul(2*(ed25519.SignatureSize+sigOverhead), cfg.ByzQuorumSize()), overhead) - maxLenMsgRoundStart := add(pluginLimits.MaxQueryLength, overhead) + maxLenMsgRoundStart := add(pluginLimits.MaxQueryLength, ed25519.SignatureSize+sigOverhead, overhead) maxLenMsgObservation := add(pluginLimits.MaxObservationLength, overhead) - maxLenMsgProposal := add(mul(add(pluginLimits.MaxObservationLength, ed25519.SignatureSize+sigOverhead), cfg.N()), overhead) + maxLenMsgProposal := add(mul(add(pluginLimits.MaxObservationLength, ed25519.SignatureSize+sigOverhead), cfg.N()), ed25519.SignatureSize+sigOverhead, overhead) maxLenMsgPrepare := overhead maxLenMsgCommit := overhead maxLenMsgReportSignatures := add(mul(add(maxSigLen, sigOverhead), pluginLimits.MaxReportCount), overhead) diff --git a/offchainreporting2plus/internal/managed/managed_mercury_oracle.go b/offchainreporting2plus/internal/managed/managed_mercury_oracle.go index 69497059..9142873b 100644 --- a/offchainreporting2plus/internal/managed/managed_mercury_oracle.go +++ b/offchainreporting2plus/internal/managed/managed_mercury_oracle.go @@ -229,7 +229,7 @@ func RunManagedMercuryOracle( offchainKeyring, ocr3OnchainKeyring, shim.LimitCheckOCR3ReportingPlugin[mercuryshim.MercuryReportInfo]{reportingPlugin, reportingPluginLimits}, - shim.NewOCR3TelemetrySender(chTelemetrySend, childLogger), + shim.NewOCR3TelemetrySender(chTelemetrySend, childLogger, localConfig.EnableTransmissionTelemetry), ) return nil, false diff --git a/offchainreporting2plus/internal/managed/managed_ocr2_oracle.go b/offchainreporting2plus/internal/managed/managed_ocr2_oracle.go index 46f6c729..7aa41758 100644 --- a/offchainreporting2plus/internal/managed/managed_ocr2_oracle.go +++ b/offchainreporting2plus/internal/managed/managed_ocr2_oracle.go @@ -237,7 +237,7 @@ func RunManagedOCR2Oracle( onchainKeyring, shim.LimitCheckReportingPlugin{reportingPlugin, reportingPluginInfo.Limits}, reportQuorum, - shim.NewOCR2TelemetrySender(chTelemetrySend, childLogger), + shim.NewOCR2TelemetrySender(chTelemetrySend, childLogger, localConfig.EnableTransmissionTelemetry), ) return nil, false diff --git a/offchainreporting2plus/internal/managed/managed_ocr3_oracle.go b/offchainreporting2plus/internal/managed/managed_ocr3_oracle.go index 366c18c2..d8d9ae1a 100644 --- a/offchainreporting2plus/internal/managed/managed_ocr3_oracle.go +++ b/offchainreporting2plus/internal/managed/managed_ocr3_oracle.go @@ -208,7 +208,7 @@ func RunManagedOCR3Oracle[RI any]( offchainKeyring, onchainKeyring, shim.LimitCheckOCR3ReportingPlugin[RI]{reportingPlugin, reportingPluginInfo.Limits}, - shim.NewOCR3TelemetrySender(chTelemetrySend, childLogger), + shim.NewOCR3TelemetrySender(chTelemetrySend, childLogger, localConfig.EnableTransmissionTelemetry), ) return nil, false diff --git a/offchainreporting2plus/internal/ocr2/protocol/oracle.go b/offchainreporting2plus/internal/ocr2/protocol/oracle.go index c9ca6eac..e6f717d8 100644 --- a/offchainreporting2plus/internal/ocr2/protocol/oracle.go +++ b/offchainreporting2plus/internal/ocr2/protocol/oracle.go @@ -202,6 +202,7 @@ func (o *oracleState) run() { o.localConfig, o.logger, o.reportingPlugin, + o.telemetrySender, o.contractTransmitter, ) }) diff --git a/offchainreporting2plus/internal/ocr2/protocol/pacemaker.go b/offchainreporting2plus/internal/ocr2/protocol/pacemaker.go index a86d07ec..4f76a72d 100644 --- a/offchainreporting2plus/internal/ocr2/protocol/pacemaker.go +++ b/offchainreporting2plus/internal/ocr2/protocol/pacemaker.go @@ -456,6 +456,8 @@ func (pace *pacemakerState) messageNewepoch(msg MessageNewEpoch, sender commonty pace.metrics.leader.Set(float64(pace.l)) pace.persist() + pace.telemetrySender.EpochStarted(pace.config.ConfigDigest, pace.e, pace.l) + // abort instance [...], initialize instance (e,l) of report generation pace.spawnReportGeneration() diff --git a/offchainreporting2plus/internal/ocr2/protocol/report_generation_follower.go b/offchainreporting2plus/internal/ocr2/protocol/report_generation_follower.go index 213d151f..6b3c0b86 100644 --- a/offchainreporting2plus/internal/ocr2/protocol/report_generation_follower.go +++ b/offchainreporting2plus/internal/ocr2/protocol/report_generation_follower.go @@ -116,12 +116,7 @@ func (repgen *reportGenerationState) messageObserveReq(msg MessageObserveReq, se repgen.followerState.sentReport = false repgen.followerState.completedRound = false - repgen.telemetrySender.RoundStarted( - repgen.config.ConfigDigest, - repgen.e, - repgen.followerState.r, - repgen.l, - ) + repgen.telemetrySender.RoundStarted(repgen.followerReportTimestamp(), repgen.l) var o types.Observation { diff --git a/offchainreporting2plus/internal/ocr2/protocol/telemetry.go b/offchainreporting2plus/internal/ocr2/protocol/telemetry.go index 84b565c7..a047043a 100644 --- a/offchainreporting2plus/internal/ocr2/protocol/telemetry.go +++ b/offchainreporting2plus/internal/ocr2/protocol/telemetry.go @@ -1,15 +1,39 @@ package protocol import ( + "time" + "github.com/smartcontractkit/libocr/commontypes" "github.com/smartcontractkit/libocr/offchainreporting2plus/types" ) type TelemetrySender interface { - RoundStarted( + EpochStarted( configDigest types.ConfigDigest, epoch uint32, - round uint8, leader commontypes.OracleID, ) + + RoundStarted( + reportTimestamp types.ReportTimestamp, + leader commontypes.OracleID, + ) + + TransmissionScheduleComputed( + reportTimestamp types.ReportTimestamp, + now time.Time, + schedule map[commontypes.OracleID]time.Duration, + ) + + TransmissionShouldAcceptFinalizedReportComputed( + reportTimestamp types.ReportTimestamp, + result bool, + ok bool, + ) + + TransmissionShouldTransmitAcceptedReportComputed( + reportTimestamp types.ReportTimestamp, + result bool, + ok bool, + ) } diff --git a/offchainreporting2plus/internal/ocr2/protocol/transmission.go b/offchainreporting2plus/internal/ocr2/protocol/transmission.go index 0448c03d..6a0eb43d 100644 --- a/offchainreporting2plus/internal/ocr2/protocol/transmission.go +++ b/offchainreporting2plus/internal/ocr2/protocol/transmission.go @@ -37,6 +37,7 @@ func RunTransmission( localConfig types.LocalConfig, logger loghelper.LoggerWithContext, reportingPlugin types.ReportingPlugin, + telemetrySender TelemetrySender, transmitter types.ContractTransmitter, ) { t := transmissionState{ @@ -50,6 +51,7 @@ func RunTransmission( localConfig: localConfig, logger: logger, reportingPlugin: reportingPlugin, + telemetrySender: telemetrySender, transmitter: transmitter, } t.run() @@ -66,6 +68,7 @@ type transmissionState struct { localConfig types.LocalConfig logger loghelper.LoggerWithContext reportingPlugin types.ReportingPlugin + telemetrySender TelemetrySender transmitter types.ContractTransmitter chPersist chan<- persist.TransmissionDBUpdate @@ -173,6 +176,7 @@ func (t *transmissionState) eventTransmit(ev EventTransmit) { "epoch": ev.Epoch, "round": ev.Round, }) + t.telemetrySender.TransmissionShouldAcceptFinalizedReportComputed(ts, false, false) return } @@ -181,16 +185,20 @@ func (t *transmissionState) eventTransmit(ev EventTransmit) { "epoch": ev.Epoch, "round": ev.Round, }) + t.telemetrySender.TransmissionShouldAcceptFinalizedReportComputed(ts, false, true) return } } + t.telemetrySender.TransmissionShouldAcceptFinalizedReportComputed(ts, true, true) + now := time.Now() - delayMaybe := t.transmitDelay(ev.Epoch, ev.Round) - if delayMaybe == nil { + delays := t.transmitDelays(ev.Epoch, ev.Round) + t.telemetrySender.TransmissionScheduleComputed(ts, now, delays) + delay, ok := delays[t.id] + if !ok { return } - delay := *delayMaybe transmission := types.PendingTransmission{ now.Add(delay), @@ -266,11 +274,13 @@ func (t *transmissionState) eventTTransmitTimeout() { if err != nil { t.logger.Error("eventTTransmitTimeout: ReportingPlugin.ShouldTransmitAcceptedReport error", commontypes.LogFields{"error": err}) + t.telemetrySender.TransmissionShouldTransmitAcceptedReportComputed(item.ReportTimestamp, false, false) return } if !shouldTransmit { t.logger.Info("eventTTransmitTimeout: ReportingPlugin.ShouldTransmitAcceptedReport returned false", nil) + t.telemetrySender.TransmissionShouldTransmitAcceptedReportComputed(item.ReportTimestamp, false, true) return } } @@ -279,6 +289,7 @@ func (t *transmissionState) eventTTransmitTimeout() { "epoch": item.Epoch, "round": item.Round, }) + t.telemetrySender.TransmissionShouldTransmitAcceptedReportComputed(item.ReportTimestamp, true, true) { ctx, cancel := context.WithTimeout( @@ -321,7 +332,10 @@ func (t *transmissionState) eventTTransmitTimeout() { }) } -func (t *transmissionState) transmitDelay(epoch uint32, round uint8) *time.Duration { +// Computes a map from oracle ids to to transmission delays. This is +// deterministic across all oracles. The result is derived pseudorandomly +// uniformly and independently per epoch and round. +func (t *transmissionState) transmitDelays(epoch uint32, round uint8) map[commontypes.OracleID]time.Duration { // No need for HMAC. Since we use Keccak256, prepending // with key gives us a PRF already. hash := sha3.NewLegacyKeccak256() @@ -336,15 +350,36 @@ func (t *transmissionState) transmitDelay(epoch uint32, round uint8) *time.Durat var key [16]byte copy(key[:], hash.Sum(nil)) - pi := permutation.Permutation(t.config.N(), key) - - sum := 0 - for i, s := range t.config.S { - sum += s - if pi[t.id] < sum { - result := time.Duration(i) * t.config.DeltaStage - return &result + + // Permutation from transmission order index to oracle id + piInv := make([]int, t.config.N()) + { + // Permutation from oracle id to transmission order index. The + // permutations are structured in this "inverted" way for historical + // compatibility + pi := permutation.Permutation(t.config.N(), key) + for i := range pi { + piInv[pi[i]] = i + } + } + + result := make(map[commontypes.OracleID]time.Duration, t.config.N()) + + accumulatedStageSize := 0 + for stageIdx, stageSize := range t.config.S { + // i is the index of the oracle sorted by transmission order + for i := accumulatedStageSize; i < accumulatedStageSize+stageSize; i++ { + if i >= len(piInv) { + // Index is larger than index of the last oracle. This happens + // when sum(S) > N. + break + } + oracleId := commontypes.OracleID(piInv[i]) + result[oracleId] = time.Duration(stageIdx) * t.config.DeltaStage } + + accumulatedStageSize += stageSize } - return nil + + return result } diff --git a/offchainreporting2plus/internal/ocr2/serialization/offchainreporting2_telemetry.pb.go b/offchainreporting2plus/internal/ocr2/serialization/offchainreporting2_telemetry.pb.go index e0c1452d..6e8f35b4 100644 --- a/offchainreporting2plus/internal/ocr2/serialization/offchainreporting2_telemetry.pb.go +++ b/offchainreporting2plus/internal/ocr2/serialization/offchainreporting2_telemetry.pb.go @@ -32,6 +32,10 @@ type TelemetryWrapper struct { // *TelemetryWrapper_MessageSent // *TelemetryWrapper_AssertionViolation // *TelemetryWrapper_RoundStarted + // *TelemetryWrapper_TransmissionScheduleComputed + // *TelemetryWrapper_TransmissionShouldAcceptFinalizedReportComputed + // *TelemetryWrapper_TransmissionShouldTransmitAcceptedReportComputed + // *TelemetryWrapper_EpochStarted Wrapped isTelemetryWrapper_Wrapped `protobuf_oneof:"wrapped"` UnixTimeNanoseconds int64 `protobuf:"varint,6,opt,name=unix_time_nanoseconds,json=unixTimeNanoseconds,proto3" json:"unix_time_nanoseconds,omitempty"` } @@ -110,6 +114,34 @@ func (x *TelemetryWrapper) GetRoundStarted() *TelemetryRoundStarted { return nil } +func (x *TelemetryWrapper) GetTransmissionScheduleComputed() *TelemetryTransmissionScheduleComputed { + if x, ok := x.GetWrapped().(*TelemetryWrapper_TransmissionScheduleComputed); ok { + return x.TransmissionScheduleComputed + } + return nil +} + +func (x *TelemetryWrapper) GetTransmissionShouldAcceptFinalizedReportComputed() *TelemetryTransmissionShouldAcceptFinalizedReportComputed { + if x, ok := x.GetWrapped().(*TelemetryWrapper_TransmissionShouldAcceptFinalizedReportComputed); ok { + return x.TransmissionShouldAcceptFinalizedReportComputed + } + return nil +} + +func (x *TelemetryWrapper) GetTransmissionShouldTransmitAcceptedReportComputed() *TelemetryTransmissionShouldTransmitAcceptedReportComputed { + if x, ok := x.GetWrapped().(*TelemetryWrapper_TransmissionShouldTransmitAcceptedReportComputed); ok { + return x.TransmissionShouldTransmitAcceptedReportComputed + } + return nil +} + +func (x *TelemetryWrapper) GetEpochStarted() *TelemetryEpochStarted { + if x, ok := x.GetWrapped().(*TelemetryWrapper_EpochStarted); ok { + return x.EpochStarted + } + return nil +} + func (x *TelemetryWrapper) GetUnixTimeNanoseconds() int64 { if x != nil { return x.UnixTimeNanoseconds @@ -141,6 +173,22 @@ type TelemetryWrapper_RoundStarted struct { RoundStarted *TelemetryRoundStarted `protobuf:"bytes,5,opt,name=round_started,json=roundStarted,proto3,oneof"` } +type TelemetryWrapper_TransmissionScheduleComputed struct { + TransmissionScheduleComputed *TelemetryTransmissionScheduleComputed `protobuf:"bytes,7,opt,name=transmission_schedule_computed,json=transmissionScheduleComputed,proto3,oneof"` +} + +type TelemetryWrapper_TransmissionShouldAcceptFinalizedReportComputed struct { + TransmissionShouldAcceptFinalizedReportComputed *TelemetryTransmissionShouldAcceptFinalizedReportComputed `protobuf:"bytes,8,opt,name=transmission_should_accept_finalized_report_computed,json=transmissionShouldAcceptFinalizedReportComputed,proto3,oneof"` +} + +type TelemetryWrapper_TransmissionShouldTransmitAcceptedReportComputed struct { + TransmissionShouldTransmitAcceptedReportComputed *TelemetryTransmissionShouldTransmitAcceptedReportComputed `protobuf:"bytes,9,opt,name=transmission_should_transmit_accepted_report_computed,json=transmissionShouldTransmitAcceptedReportComputed,proto3,oneof"` +} + +type TelemetryWrapper_EpochStarted struct { + EpochStarted *TelemetryEpochStarted `protobuf:"bytes,10,opt,name=epoch_started,json=epochStarted,proto3,oneof"` +} + func (*TelemetryWrapper_MessageReceived) isTelemetryWrapper_Wrapped() {} func (*TelemetryWrapper_MessageBroadcast) isTelemetryWrapper_Wrapped() {} @@ -151,6 +199,16 @@ func (*TelemetryWrapper_AssertionViolation) isTelemetryWrapper_Wrapped() {} func (*TelemetryWrapper_RoundStarted) isTelemetryWrapper_Wrapped() {} +func (*TelemetryWrapper_TransmissionScheduleComputed) isTelemetryWrapper_Wrapped() {} + +func (*TelemetryWrapper_TransmissionShouldAcceptFinalizedReportComputed) isTelemetryWrapper_Wrapped() { +} + +func (*TelemetryWrapper_TransmissionShouldTransmitAcceptedReportComputed) isTelemetryWrapper_Wrapped() { +} + +func (*TelemetryWrapper_EpochStarted) isTelemetryWrapper_Wrapped() {} + type TelemetryMessageReceived struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -557,6 +615,306 @@ func (x *TelemetryRoundStarted) GetTime() uint64 { return 0 } +type TelemetryTransmissionScheduleComputed struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ConfigDigest []byte `protobuf:"bytes,1,opt,name=config_digest,json=configDigest,proto3" json:"config_digest,omitempty"` + Epoch uint64 `protobuf:"varint,2,opt,name=epoch,proto3" json:"epoch,omitempty"` + Round uint64 `protobuf:"varint,3,opt,name=round,proto3" json:"round,omitempty"` + UnixTimeNanoseconds uint64 `protobuf:"varint,4,opt,name=unix_time_nanoseconds,json=unixTimeNanoseconds,proto3" json:"unix_time_nanoseconds,omitempty"` + ScheduleDelayNanosecondsPerNode map[uint64]uint64 `protobuf:"bytes,5,rep,name=schedule_delay_nanoseconds_per_node,json=scheduleDelayNanosecondsPerNode,proto3" json:"schedule_delay_nanoseconds_per_node,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *TelemetryTransmissionScheduleComputed) Reset() { + *x = TelemetryTransmissionScheduleComputed{} + if protoimpl.UnsafeEnabled { + mi := &file_offchainreporting2_telemetry_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TelemetryTransmissionScheduleComputed) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TelemetryTransmissionScheduleComputed) ProtoMessage() {} + +func (x *TelemetryTransmissionScheduleComputed) ProtoReflect() protoreflect.Message { + mi := &file_offchainreporting2_telemetry_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TelemetryTransmissionScheduleComputed.ProtoReflect.Descriptor instead. +func (*TelemetryTransmissionScheduleComputed) Descriptor() ([]byte, []int) { + return file_offchainreporting2_telemetry_proto_rawDescGZIP(), []int{7} +} + +func (x *TelemetryTransmissionScheduleComputed) GetConfigDigest() []byte { + if x != nil { + return x.ConfigDigest + } + return nil +} + +func (x *TelemetryTransmissionScheduleComputed) GetEpoch() uint64 { + if x != nil { + return x.Epoch + } + return 0 +} + +func (x *TelemetryTransmissionScheduleComputed) GetRound() uint64 { + if x != nil { + return x.Round + } + return 0 +} + +func (x *TelemetryTransmissionScheduleComputed) GetUnixTimeNanoseconds() uint64 { + if x != nil { + return x.UnixTimeNanoseconds + } + return 0 +} + +func (x *TelemetryTransmissionScheduleComputed) GetScheduleDelayNanosecondsPerNode() map[uint64]uint64 { + if x != nil { + return x.ScheduleDelayNanosecondsPerNode + } + return nil +} + +type TelemetryTransmissionShouldAcceptFinalizedReportComputed struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ConfigDigest []byte `protobuf:"bytes,1,opt,name=config_digest,json=configDigest,proto3" json:"config_digest,omitempty"` + Epoch uint64 `protobuf:"varint,2,opt,name=epoch,proto3" json:"epoch,omitempty"` + Round uint64 `protobuf:"varint,3,opt,name=round,proto3" json:"round,omitempty"` + Result bool `protobuf:"varint,4,opt,name=result,proto3" json:"result,omitempty"` + Ok bool `protobuf:"varint,5,opt,name=ok,proto3" json:"ok,omitempty"` // Did the ReportingPlugin method return successfully? +} + +func (x *TelemetryTransmissionShouldAcceptFinalizedReportComputed) Reset() { + *x = TelemetryTransmissionShouldAcceptFinalizedReportComputed{} + if protoimpl.UnsafeEnabled { + mi := &file_offchainreporting2_telemetry_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TelemetryTransmissionShouldAcceptFinalizedReportComputed) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TelemetryTransmissionShouldAcceptFinalizedReportComputed) ProtoMessage() {} + +func (x *TelemetryTransmissionShouldAcceptFinalizedReportComputed) ProtoReflect() protoreflect.Message { + mi := &file_offchainreporting2_telemetry_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TelemetryTransmissionShouldAcceptFinalizedReportComputed.ProtoReflect.Descriptor instead. +func (*TelemetryTransmissionShouldAcceptFinalizedReportComputed) Descriptor() ([]byte, []int) { + return file_offchainreporting2_telemetry_proto_rawDescGZIP(), []int{8} +} + +func (x *TelemetryTransmissionShouldAcceptFinalizedReportComputed) GetConfigDigest() []byte { + if x != nil { + return x.ConfigDigest + } + return nil +} + +func (x *TelemetryTransmissionShouldAcceptFinalizedReportComputed) GetEpoch() uint64 { + if x != nil { + return x.Epoch + } + return 0 +} + +func (x *TelemetryTransmissionShouldAcceptFinalizedReportComputed) GetRound() uint64 { + if x != nil { + return x.Round + } + return 0 +} + +func (x *TelemetryTransmissionShouldAcceptFinalizedReportComputed) GetResult() bool { + if x != nil { + return x.Result + } + return false +} + +func (x *TelemetryTransmissionShouldAcceptFinalizedReportComputed) GetOk() bool { + if x != nil { + return x.Ok + } + return false +} + +type TelemetryTransmissionShouldTransmitAcceptedReportComputed struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ConfigDigest []byte `protobuf:"bytes,1,opt,name=config_digest,json=configDigest,proto3" json:"config_digest,omitempty"` + Epoch uint64 `protobuf:"varint,2,opt,name=epoch,proto3" json:"epoch,omitempty"` + Round uint64 `protobuf:"varint,3,opt,name=round,proto3" json:"round,omitempty"` + Result bool `protobuf:"varint,4,opt,name=result,proto3" json:"result,omitempty"` + Ok bool `protobuf:"varint,5,opt,name=ok,proto3" json:"ok,omitempty"` // Did the ReportingPlugin method return successfully? +} + +func (x *TelemetryTransmissionShouldTransmitAcceptedReportComputed) Reset() { + *x = TelemetryTransmissionShouldTransmitAcceptedReportComputed{} + if protoimpl.UnsafeEnabled { + mi := &file_offchainreporting2_telemetry_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TelemetryTransmissionShouldTransmitAcceptedReportComputed) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TelemetryTransmissionShouldTransmitAcceptedReportComputed) ProtoMessage() {} + +func (x *TelemetryTransmissionShouldTransmitAcceptedReportComputed) ProtoReflect() protoreflect.Message { + mi := &file_offchainreporting2_telemetry_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TelemetryTransmissionShouldTransmitAcceptedReportComputed.ProtoReflect.Descriptor instead. +func (*TelemetryTransmissionShouldTransmitAcceptedReportComputed) Descriptor() ([]byte, []int) { + return file_offchainreporting2_telemetry_proto_rawDescGZIP(), []int{9} +} + +func (x *TelemetryTransmissionShouldTransmitAcceptedReportComputed) GetConfigDigest() []byte { + if x != nil { + return x.ConfigDigest + } + return nil +} + +func (x *TelemetryTransmissionShouldTransmitAcceptedReportComputed) GetEpoch() uint64 { + if x != nil { + return x.Epoch + } + return 0 +} + +func (x *TelemetryTransmissionShouldTransmitAcceptedReportComputed) GetRound() uint64 { + if x != nil { + return x.Round + } + return 0 +} + +func (x *TelemetryTransmissionShouldTransmitAcceptedReportComputed) GetResult() bool { + if x != nil { + return x.Result + } + return false +} + +func (x *TelemetryTransmissionShouldTransmitAcceptedReportComputed) GetOk() bool { + if x != nil { + return x.Ok + } + return false +} + +type TelemetryEpochStarted struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ConfigDigest []byte `protobuf:"bytes,1,opt,name=config_digest,json=configDigest,proto3" json:"config_digest,omitempty"` + Epoch uint64 `protobuf:"varint,2,opt,name=epoch,proto3" json:"epoch,omitempty"` + Leader uint64 `protobuf:"varint,3,opt,name=leader,proto3" json:"leader,omitempty"` +} + +func (x *TelemetryEpochStarted) Reset() { + *x = TelemetryEpochStarted{} + if protoimpl.UnsafeEnabled { + mi := &file_offchainreporting2_telemetry_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TelemetryEpochStarted) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TelemetryEpochStarted) ProtoMessage() {} + +func (x *TelemetryEpochStarted) ProtoReflect() protoreflect.Message { + mi := &file_offchainreporting2_telemetry_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TelemetryEpochStarted.ProtoReflect.Descriptor instead. +func (*TelemetryEpochStarted) Descriptor() ([]byte, []int) { + return file_offchainreporting2_telemetry_proto_rawDescGZIP(), []int{10} +} + +func (x *TelemetryEpochStarted) GetConfigDigest() []byte { + if x != nil { + return x.ConfigDigest + } + return nil +} + +func (x *TelemetryEpochStarted) GetEpoch() uint64 { + if x != nil { + return x.Epoch + } + return 0 +} + +func (x *TelemetryEpochStarted) GetLeader() uint64 { + if x != nil { + return x.Leader + } + return 0 +} + var File_offchainreporting2_telemetry_proto protoreflect.FileDescriptor var file_offchainreporting2_telemetry_proto_rawDesc = []byte{ @@ -565,7 +923,7 @@ var file_offchainreporting2_telemetry_proto_rawDesc = []byte{ 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x1a, 0x21, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x5f, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8f, 0x04, 0x0a, 0x10, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe8, 0x08, 0x0a, 0x10, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x59, 0x0a, 0x10, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x66, 0x66, @@ -594,73 +952,168 @@ var file_offchainreporting2_telemetry_proto_rawDesc = []byte{ 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x2e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x48, 0x00, - 0x52, 0x0c, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x32, - 0x0a, 0x15, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, - 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x75, - 0x6e, 0x69, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x22, 0x8d, 0x01, - 0x0a, 0x18, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, - 0x34, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, + 0x52, 0x0c, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x81, + 0x01, 0x0a, 0x1e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, + 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x2e, 0x54, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, + 0x65, 0x64, 0x48, 0x00, 0x52, 0x1c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, + 0x65, 0x64, 0x12, 0xbd, 0x01, 0x0a, 0x34, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, + 0x74, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x4c, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x2e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x6f, 0x75, + 0x6c, 0x64, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x48, + 0x00, 0x52, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, + 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x46, 0x69, 0x6e, 0x61, 0x6c, + 0x69, 0x7a, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, + 0x65, 0x64, 0x12, 0xc0, 0x01, 0x0a, 0x35, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x6d, 0x69, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x2e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, + 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x6f, + 0x75, 0x6c, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, + 0x74, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, + 0x64, 0x48, 0x00, 0x52, 0x30, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x53, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6d, + 0x70, 0x75, 0x74, 0x65, 0x64, 0x12, 0x50, 0x0a, 0x0d, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, - 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, - 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x22, 0x9d, 0x01, - 0x0a, 0x19, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x12, 0x34, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, - 0x67, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, - 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x22, 0xb4, 0x01, - 0x0a, 0x14, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x03, 0x6d, - 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x2e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x52, 0x03, 0x6d, 0x73, - 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, - 0x6d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, - 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x72, 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, - 0x72, 0x79, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x6f, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7a, 0x0a, 0x15, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, - 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x2e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, - 0x72, 0x79, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x6f, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x53, 0x65, 0x72, 0x69, 0x61, - 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x14, 0x69, 0x6e, 0x76, 0x61, + 0x32, 0x2e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x45, 0x70, 0x6f, 0x63, 0x68, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x75, 0x6e, 0x69, 0x78, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x78, 0x54, 0x69, 0x6d, 0x65, + 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x22, 0x8d, 0x01, 0x0a, 0x18, 0x54, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, + 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x22, 0x9d, 0x01, 0x0a, 0x19, 0x54, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x72, 0x6f, 0x61, 0x64, + 0x63, 0x61, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x03, 0x6d, 0x73, 0x67, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, + 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x6d, 0x73, + 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x22, 0xb4, 0x01, 0x0a, 0x14, 0x54, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x6e, 0x74, 0x12, + 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, + 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4d, 0x73, + 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0xac, 0x01, + 0x0a, 0x1b, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x41, 0x73, 0x73, 0x65, 0x72, + 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7a, 0x0a, + 0x15, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x6f, + 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, + 0x32, 0x2e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x41, 0x73, 0x73, 0x65, 0x72, + 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x48, 0x00, 0x52, 0x14, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x53, 0x65, 0x72, 0x69, + 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x76, 0x69, 0x6f, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x95, 0x01, 0x0a, + 0x2f, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, + 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x42, 0x0b, 0x0a, 0x09, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x04, 0x08, - 0x01, 0x10, 0x02, 0x22, 0x95, 0x01, 0x0a, 0x2f, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, - 0x79, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, - 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, - 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x22, 0x94, 0x01, 0x0a, 0x15, - 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, + 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x64, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x73, + 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x65, + 0x6e, 0x64, 0x65, 0x72, 0x22, 0x94, 0x01, 0x0a, 0x15, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, + 0x72, 0x79, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x23, + 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, + 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xaf, 0x03, 0x0a, 0x25, + 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6d, + 0x70, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x74, 0x69, - 0x6d, 0x65, 0x42, 0x11, 0x5a, 0x0f, 0x2e, 0x3b, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x4e, + 0x61, 0x6e, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0xac, 0x01, 0x0a, 0x23, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, + 0x6e, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6e, 0x6f, + 0x64, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x5e, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x2e, 0x54, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x75, + 0x74, 0x65, 0x64, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x61, + 0x79, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x50, 0x65, 0x72, 0x4e, + 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x73, 0x50, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x1a, 0x52, 0x0a, 0x24, 0x53, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x50, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb3, 0x01, + 0x0a, 0x38, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x41, 0x63, 0x63, + 0x65, 0x70, 0x74, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x02, 0x6f, 0x6b, 0x22, 0xb4, 0x01, 0x0a, 0x39, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, + 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x6f, + 0x75, 0x6c, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, + 0x74, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, + 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, + 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x72, 0x6f, 0x75, + 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x6a, 0x0a, 0x15, 0x54, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x16, + 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, + 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x42, 0x11, 0x5a, 0x0f, 0x2e, 0x3b, 0x73, 0x65, 0x72, 0x69, + 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -675,32 +1128,42 @@ func file_offchainreporting2_telemetry_proto_rawDescGZIP() []byte { return file_offchainreporting2_telemetry_proto_rawDescData } -var file_offchainreporting2_telemetry_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_offchainreporting2_telemetry_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_offchainreporting2_telemetry_proto_goTypes = []interface{}{ - (*TelemetryWrapper)(nil), // 0: offchainreporting2.TelemetryWrapper - (*TelemetryMessageReceived)(nil), // 1: offchainreporting2.TelemetryMessageReceived - (*TelemetryMessageBroadcast)(nil), // 2: offchainreporting2.TelemetryMessageBroadcast - (*TelemetryMessageSent)(nil), // 3: offchainreporting2.TelemetryMessageSent - (*TelemetryAssertionViolation)(nil), // 4: offchainreporting2.TelemetryAssertionViolation - (*TelemetryAssertionViolationInvalidSerialization)(nil), // 5: offchainreporting2.TelemetryAssertionViolationInvalidSerialization - (*TelemetryRoundStarted)(nil), // 6: offchainreporting2.TelemetryRoundStarted - (*MessageWrapper)(nil), // 7: offchainreporting2.MessageWrapper + (*TelemetryWrapper)(nil), // 0: offchainreporting2.TelemetryWrapper + (*TelemetryMessageReceived)(nil), // 1: offchainreporting2.TelemetryMessageReceived + (*TelemetryMessageBroadcast)(nil), // 2: offchainreporting2.TelemetryMessageBroadcast + (*TelemetryMessageSent)(nil), // 3: offchainreporting2.TelemetryMessageSent + (*TelemetryAssertionViolation)(nil), // 4: offchainreporting2.TelemetryAssertionViolation + (*TelemetryAssertionViolationInvalidSerialization)(nil), // 5: offchainreporting2.TelemetryAssertionViolationInvalidSerialization + (*TelemetryRoundStarted)(nil), // 6: offchainreporting2.TelemetryRoundStarted + (*TelemetryTransmissionScheduleComputed)(nil), // 7: offchainreporting2.TelemetryTransmissionScheduleComputed + (*TelemetryTransmissionShouldAcceptFinalizedReportComputed)(nil), // 8: offchainreporting2.TelemetryTransmissionShouldAcceptFinalizedReportComputed + (*TelemetryTransmissionShouldTransmitAcceptedReportComputed)(nil), // 9: offchainreporting2.TelemetryTransmissionShouldTransmitAcceptedReportComputed + (*TelemetryEpochStarted)(nil), // 10: offchainreporting2.TelemetryEpochStarted + nil, // 11: offchainreporting2.TelemetryTransmissionScheduleComputed.ScheduleDelayNanosecondsPerNodeEntry + (*MessageWrapper)(nil), // 12: offchainreporting2.MessageWrapper } var file_offchainreporting2_telemetry_proto_depIdxs = []int32{ - 1, // 0: offchainreporting2.TelemetryWrapper.message_received:type_name -> offchainreporting2.TelemetryMessageReceived - 2, // 1: offchainreporting2.TelemetryWrapper.message_broadcast:type_name -> offchainreporting2.TelemetryMessageBroadcast - 3, // 2: offchainreporting2.TelemetryWrapper.message_sent:type_name -> offchainreporting2.TelemetryMessageSent - 4, // 3: offchainreporting2.TelemetryWrapper.assertion_violation:type_name -> offchainreporting2.TelemetryAssertionViolation - 6, // 4: offchainreporting2.TelemetryWrapper.round_started:type_name -> offchainreporting2.TelemetryRoundStarted - 7, // 5: offchainreporting2.TelemetryMessageReceived.msg:type_name -> offchainreporting2.MessageWrapper - 7, // 6: offchainreporting2.TelemetryMessageBroadcast.msg:type_name -> offchainreporting2.MessageWrapper - 7, // 7: offchainreporting2.TelemetryMessageSent.msg:type_name -> offchainreporting2.MessageWrapper - 5, // 8: offchainreporting2.TelemetryAssertionViolation.invalid_serialization:type_name -> offchainreporting2.TelemetryAssertionViolationInvalidSerialization - 9, // [9:9] is the sub-list for method output_type - 9, // [9:9] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name + 1, // 0: offchainreporting2.TelemetryWrapper.message_received:type_name -> offchainreporting2.TelemetryMessageReceived + 2, // 1: offchainreporting2.TelemetryWrapper.message_broadcast:type_name -> offchainreporting2.TelemetryMessageBroadcast + 3, // 2: offchainreporting2.TelemetryWrapper.message_sent:type_name -> offchainreporting2.TelemetryMessageSent + 4, // 3: offchainreporting2.TelemetryWrapper.assertion_violation:type_name -> offchainreporting2.TelemetryAssertionViolation + 6, // 4: offchainreporting2.TelemetryWrapper.round_started:type_name -> offchainreporting2.TelemetryRoundStarted + 7, // 5: offchainreporting2.TelemetryWrapper.transmission_schedule_computed:type_name -> offchainreporting2.TelemetryTransmissionScheduleComputed + 8, // 6: offchainreporting2.TelemetryWrapper.transmission_should_accept_finalized_report_computed:type_name -> offchainreporting2.TelemetryTransmissionShouldAcceptFinalizedReportComputed + 9, // 7: offchainreporting2.TelemetryWrapper.transmission_should_transmit_accepted_report_computed:type_name -> offchainreporting2.TelemetryTransmissionShouldTransmitAcceptedReportComputed + 10, // 8: offchainreporting2.TelemetryWrapper.epoch_started:type_name -> offchainreporting2.TelemetryEpochStarted + 12, // 9: offchainreporting2.TelemetryMessageReceived.msg:type_name -> offchainreporting2.MessageWrapper + 12, // 10: offchainreporting2.TelemetryMessageBroadcast.msg:type_name -> offchainreporting2.MessageWrapper + 12, // 11: offchainreporting2.TelemetryMessageSent.msg:type_name -> offchainreporting2.MessageWrapper + 5, // 12: offchainreporting2.TelemetryAssertionViolation.invalid_serialization:type_name -> offchainreporting2.TelemetryAssertionViolationInvalidSerialization + 11, // 13: offchainreporting2.TelemetryTransmissionScheduleComputed.schedule_delay_nanoseconds_per_node:type_name -> offchainreporting2.TelemetryTransmissionScheduleComputed.ScheduleDelayNanosecondsPerNodeEntry + 14, // [14:14] is the sub-list for method output_type + 14, // [14:14] is the sub-list for method input_type + 14, // [14:14] is the sub-list for extension type_name + 14, // [14:14] is the sub-list for extension extendee + 0, // [0:14] is the sub-list for field type_name } func init() { file_offchainreporting2_telemetry_proto_init() } @@ -794,6 +1257,54 @@ func file_offchainreporting2_telemetry_proto_init() { return nil } } + file_offchainreporting2_telemetry_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TelemetryTransmissionScheduleComputed); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_offchainreporting2_telemetry_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TelemetryTransmissionShouldAcceptFinalizedReportComputed); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_offchainreporting2_telemetry_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TelemetryTransmissionShouldTransmitAcceptedReportComputed); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_offchainreporting2_telemetry_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TelemetryEpochStarted); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_offchainreporting2_telemetry_proto_msgTypes[0].OneofWrappers = []interface{}{ (*TelemetryWrapper_MessageReceived)(nil), @@ -801,6 +1312,10 @@ func file_offchainreporting2_telemetry_proto_init() { (*TelemetryWrapper_MessageSent)(nil), (*TelemetryWrapper_AssertionViolation)(nil), (*TelemetryWrapper_RoundStarted)(nil), + (*TelemetryWrapper_TransmissionScheduleComputed)(nil), + (*TelemetryWrapper_TransmissionShouldAcceptFinalizedReportComputed)(nil), + (*TelemetryWrapper_TransmissionShouldTransmitAcceptedReportComputed)(nil), + (*TelemetryWrapper_EpochStarted)(nil), } file_offchainreporting2_telemetry_proto_msgTypes[4].OneofWrappers = []interface{}{ (*TelemetryAssertionViolation_InvalidSerialization)(nil), @@ -811,7 +1326,7 @@ func file_offchainreporting2_telemetry_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_offchainreporting2_telemetry_proto_rawDesc, NumEnums: 0, - NumMessages: 7, + NumMessages: 12, NumExtensions: 0, NumServices: 0, }, diff --git a/offchainreporting2plus/internal/ocr3/protocol/message.go b/offchainreporting2plus/internal/ocr3/protocol/message.go index 287d872a..0b238431 100644 --- a/offchainreporting2plus/internal/ocr3/protocol/message.go +++ b/offchainreporting2plus/internal/ocr3/protocol/message.go @@ -241,7 +241,6 @@ func (msg MessageEpochStart[RI]) CheckSize(n int, f int, limits ocr3types.Report return false } } - //nolint:gosimple if len(msg.Signature31) > ed25519.SignatureSize { return false } @@ -264,15 +263,22 @@ func (msg MessageEpochStart[RI]) epoch() uint64 { } type MessageRoundStart[RI any] struct { - Epoch uint64 - SeqNr uint64 - Query types.Query + Epoch uint64 + SeqNr uint64 + Query types.Query + Signature31 RoundStartSignature31 } var _ MessageToOutcomeGeneration[struct{}] = (*MessageRoundStart[struct{}])(nil) func (msg MessageRoundStart[RI]) CheckSize(n int, f int, limits ocr3types.ReportingPluginLimits, maxReportSigLen int) bool { - return len(msg.Query) <= limits.MaxQueryLength + if len(msg.Query) > limits.MaxQueryLength { + return false + } + if len(msg.Signature31) > ed25519.SignatureSize { + return false + } + return true } func (msg MessageRoundStart[RI]) process(o *oracleState[RI], sender commontypes.OracleID) { @@ -321,6 +327,7 @@ type MessageProposal[RI any] struct { Epoch uint64 SeqNr uint64 AttributedSignedObservations []AttributedSignedObservation + Signature31 ProposalSignature31 } var _ MessageToOutcomeGeneration[struct{}] = MessageProposal[struct{}]{} @@ -337,6 +344,9 @@ func (msg MessageProposal[RI]) CheckSize(n int, f int, limits ocr3types.Reportin return false } } + if len(msg.Signature31) > ed25519.SignatureSize { + return false + } return true } diff --git a/offchainreporting2plus/internal/ocr3/protocol/oracle.go b/offchainreporting2plus/internal/ocr3/protocol/oracle.go index 5a19e80a..83fe68b0 100644 --- a/offchainreporting2plus/internal/ocr3/protocol/oracle.go +++ b/offchainreporting2plus/internal/ocr3/protocol/oracle.go @@ -233,6 +233,7 @@ func (o *oracleState[RI]) run() { o.localConfig, o.logger, o.reportingPlugin, + o.telemetrySender, ) }) diff --git a/offchainreporting2plus/internal/ocr3/protocol/outcome_generation_follower.go b/offchainreporting2plus/internal/ocr3/protocol/outcome_generation_follower.go index 40f92f51..6e568a72 100644 --- a/offchainreporting2plus/internal/ocr3/protocol/outcome_generation_follower.go +++ b/offchainreporting2plus/internal/ocr3/protocol/outcome_generation_follower.go @@ -866,7 +866,7 @@ func (outgen *outcomeGenerationState[RI]) commit(commit CertifiedCommit) { // Updates and persists cert if it is greater than the current cert. // Returns false if the cert could not be persisted, in which case the round should be aborted. func (outgen *outcomeGenerationState[RI]) persistAndUpdateCertIfGreater(cert CertifiedPrepareOrCommit) (ok bool) { - if outgen.followerState.cert.Timestamp().Less31(cert.Timestamp()) { + if outgen.followerState.cert.Timestamp().Less(cert.Timestamp()) { ctx, cancel := context.WithTimeout(outgen.ctx, outgen.localConfig.DatabaseTimeout) defer cancel() if err := outgen.database.WriteCert(ctx, outgen.config.ConfigDigest, cert); err != nil { diff --git a/offchainreporting2plus/internal/ocr3/protocol/outcome_generation_leader.go b/offchainreporting2plus/internal/ocr3/protocol/outcome_generation_leader.go index bd09055f..e49503cf 100644 --- a/offchainreporting2plus/internal/ocr3/protocol/outcome_generation_leader.go +++ b/offchainreporting2plus/internal/ocr3/protocol/outcome_generation_leader.go @@ -100,7 +100,7 @@ func (outgen *outcomeGenerationState[RI]) messageEpochStartRequest(msg MessageEp } if maxSender != nil { maxTimestamp := outgen.leaderState.epochStartRequests[*maxSender].message.HighestCertified.Timestamp() - if !maxTimestamp.Less31(epochStartRequest.message.HighestCertified.Timestamp()) { + if !maxTimestamp.Less(epochStartRequest.message.HighestCertified.Timestamp()) { continue } } @@ -278,6 +278,21 @@ func (outgen *outcomeGenerationState[RI]) eventComputedQuery(ev EventComputedQue return } + roundStartSignature31, err := MakeRoundStartSignature31( + outgen.ID(), + outgen.sharedState.committedSeqNr+1, + ev.Query, + outgen.offchainKeyring.OffchainSign, + ) + if err != nil { + outgen.logger.Error("MakeRoundStartSignature31 returned error", commontypes.LogFields{ + "error": err, + "seqNr": outgen.sharedState.seqNr, + "committedSeqNr": outgen.sharedState.committedSeqNr, + }) + return + } + outgen.leaderState.query = ev.Query outgen.leaderState.observationPool.ReapCompleted(outgen.sharedState.committedSeqNr) @@ -292,6 +307,7 @@ func (outgen *outcomeGenerationState[RI]) eventComputedQuery(ev EventComputedQue outgen.sharedState.e, outgen.sharedState.committedSeqNr + 1, ev.Query, + roundStartSignature31, }) } @@ -565,6 +581,7 @@ func (outgen *outcomeGenerationState[RI]) eventTGraceTimeout() { outgen.sharedState.e, outgen.sharedState.seqNr, asos, + nil, }) outgen.leaderState.observationPool.ReapCompleted(outgen.sharedState.seqNr) diff --git a/offchainreporting2plus/internal/ocr3/protocol/pacemaker.go b/offchainreporting2plus/internal/ocr3/protocol/pacemaker.go index a30b815f..85a3b311 100644 --- a/offchainreporting2plus/internal/ocr3/protocol/pacemaker.go +++ b/offchainreporting2plus/internal/ocr3/protocol/pacemaker.go @@ -204,6 +204,8 @@ func (pace *pacemakerState[RI]) eventTResendTimeout() { func (pace *pacemakerState[RI]) eventTProgressTimeout() { pace.logger.Debug("TProgress fired", commontypes.LogFields{ "deltaProgress": pace.config.DeltaProgress.String(), + "e": pace.e, + "l": pace.l, }) pace.eventNewEpochRequest() } @@ -309,6 +311,7 @@ func (pace *pacemakerState[RI]) messageNewEpochWish(msg MessageNewEpochWish[RI], } pace.metrics.epoch.Set(float64(pace.e)) pace.metrics.leader.Set(float64(pace.l)) + pace.telemetrySender.EpochStarted(pace.config.ConfigDigest, uint32(pace.e), pace.l) pace.tProgress = time.After(pace.config.DeltaProgress) // restart timer T_{progress} pace.notifyOutcomeGenerationOfNewEpoch = true // invoke event newEpochStart(e, l) diff --git a/offchainreporting2plus/internal/ocr3/protocol/signed_data.go b/offchainreporting2plus/internal/ocr3/protocol/signed_data.go index f969f264..78334be5 100644 --- a/offchainreporting2plus/internal/ocr3/protocol/signed_data.go +++ b/offchainreporting2plus/internal/ocr3/protocol/signed_data.go @@ -269,17 +269,13 @@ type HighestCertifiedTimestamp struct { } func (t HighestCertifiedTimestamp) Less(t2 HighestCertifiedTimestamp) bool { - return t.SeqNr < t2.SeqNr || t.SeqNr == t2.SeqNr && !t.CommittedElsePrepared && t2.CommittedElsePrepared -} - -func (t HighestCertifiedTimestamp) Less31(t2 HighestCertifiedTimestamp) bool { return t.SeqNr < t2.SeqNr || t.SeqNr == t2.SeqNr && !t.CommittedElsePrepared && t2.CommittedElsePrepared || t.SeqNr == t2.SeqNr && t.CommittedElsePrepared == t2.CommittedElsePrepared && t.Epoch < t2.Epoch } func (t HighestCertifiedTimestamp) Equal(t2 HighestCertifiedTimestamp) bool { - return t.SeqNr == t2.SeqNr && t.CommittedElsePrepared == t2.CommittedElsePrepared + return t.SeqNr == t2.SeqNr && t.CommittedElsePrepared == t2.CommittedElsePrepared && t.Epoch == t2.Epoch } const signedHighestCertifiedTimestampDomainSeparator = "ocr3 SignedHighestCertifiedTimestamp" @@ -320,9 +316,10 @@ func (shct *SignedHighestCertifiedTimestamp) Verify(ogid OutcomeGenerationID, pu } ok := ed25519.Verify(pk, signedHighestCertifiedTimestampMsg(ogid, shct.HighestCertifiedTimestamp), shct.Signature) + ok2 := ed25519.Verify(pk, signedHighestCertifiedTimestamp31Msg(ogid, shct.HighestCertifiedTimestamp), shct.Signature31) - if !ok { - return fmt.Errorf("SignedHighestCertifiedTimestamp signature failed to verify") + if !ok || !ok2 { + return fmt.Errorf("SignedHighestCertifiedTimestamp signature failed to verify (ok: %v, ok2: %v)", ok, ok2) } return nil @@ -428,6 +425,8 @@ func (qc *EpochStartProof) Verify( return nil } +type CertifiedPrepareOrCommitDigest [32]byte + type CertifiedPrepareOrCommit interface { isCertifiedPrepareOrCommit() Epoch() uint64 @@ -439,7 +438,7 @@ type CertifiedPrepareOrCommit interface { byzQuorumSize int, ) error CheckSize(n int, f int, limits ocr3types.ReportingPluginLimits, maxReportSigLen int) bool - SignatureMsg(ogid OutcomeGenerationID) []byte + Digest() CertifiedPrepareOrCommitDigest } var _ CertifiedPrepareOrCommit = &CertifiedPrepare{} @@ -515,8 +514,35 @@ func (hc *CertifiedPrepare) CheckSize(n int, f int, limits ocr3types.ReportingPl return true } -func (hc *CertifiedPrepare) SignatureMsg(ogid OutcomeGenerationID) []byte { - return prepareSignatureMsg(ogid, hc.SeqNr, hc.OutcomeInputsDigest, MakeOutcomeDigest(hc.Outcome)) +// domain separation from other variants of CertifiedPrepareOrCommit +const certifiedPrepareDigestDomainSeparator = "ocr3 CertifiedPrepareDigest" + +func (hc *CertifiedPrepare) Digest() CertifiedPrepareOrCommitDigest { + h := sha256.New() + + _, _ = h.Write([]byte(certifiedPrepareDigestDomainSeparator)) + + _ = binary.Write(h, binary.BigEndian, hc.PrepareEpoch) + + _ = binary.Write(h, binary.BigEndian, hc.SeqNr) + + _, _ = h.Write(hc.OutcomeInputsDigest[:]) + + _ = binary.Write(h, binary.BigEndian, uint64(len(hc.Outcome))) + _, _ = h.Write(hc.Outcome) + + _ = binary.Write(h, binary.BigEndian, uint64(len(hc.PrepareQuorumCertificate))) + for _, aps := range hc.PrepareQuorumCertificate { + + _ = binary.Write(h, binary.BigEndian, uint64(len(aps.Signature))) + _, _ = h.Write(aps.Signature) + + _ = binary.Write(h, binary.BigEndian, uint64(aps.Signer)) + } + + var result CertifiedPrepareOrCommitDigest + h.Sum(result[:0]) + return result } var _ CertifiedPrepareOrCommit = &CertifiedCommit{} @@ -602,23 +628,79 @@ func (hc *CertifiedCommit) CheckSize(n int, f int, limits ocr3types.ReportingPlu return true } -func (hc *CertifiedCommit) SignatureMsg(ogid OutcomeGenerationID) []byte { - return commitSignatureMsg(ogid, hc.SeqNr, MakeOutcomeDigest(hc.Outcome)) +// domain separation from other variants of CertifiedPrepareOrCommit +const certifiedCommitDigestDomainSeparator = "ocr3 CertifiedCommitDigest" + +func (hc *CertifiedCommit) Digest() CertifiedPrepareOrCommitDigest { + h := sha256.New() + + _, _ = h.Write([]byte(certifiedCommitDigestDomainSeparator)) + + _ = binary.Write(h, binary.BigEndian, hc.CommitEpoch) + + _ = binary.Write(h, binary.BigEndian, hc.SeqNr) + + _ = binary.Write(h, binary.BigEndian, uint64(len(hc.Outcome))) + _, _ = h.Write(hc.Outcome) + + _ = binary.Write(h, binary.BigEndian, uint64(len(hc.CommitQuorumCertificate))) + for _, acs := range hc.CommitQuorumCertificate { + + _ = binary.Write(h, binary.BigEndian, uint64(len(acs.Signature))) + _, _ = h.Write(acs.Signature) + + _ = binary.Write(h, binary.BigEndian, uint64(acs.Signer)) + } + + var result CertifiedPrepareOrCommitDigest + h.Sum(result[:0]) + return result } -const epochStartProofSignatureDomainSeparator = "ocr3 EpochStartProofSignature" +const epochStartSignatureDomainSeparator = "ocr3 EpochStartSignature" + +type EpochStartSignature31 []byte -func epochStartProofSignatureMsg(ogid OutcomeGenerationID, esp EpochStartProof) []byte { +func MakeEpochStartSignature31( + ogid OutcomeGenerationID, + epochStartProof EpochStartProof, + signer func(msg []byte) ([]byte, error), +) (EpochStartSignature31, error) { + return signer(epochStartSignatureMsg(ogid, epochStartProof)) +} + +func (sig EpochStartSignature31) Verify( + ogid OutcomeGenerationID, + epochStartProof EpochStartProof, + publicKey types.OffchainPublicKey, +) error { + pk := ed25519.PublicKey(publicKey[:]) + + if len(pk) != ed25519.PublicKeySize { + return fmt.Errorf("ed25519 public key size mismatch, expected %v but got %v", ed25519.PublicKeySize, len(pk)) + } + + ok := ed25519.Verify(pk, epochStartSignatureMsg(ogid, epochStartProof), sig) + if !ok { + return fmt.Errorf("EpochStartSignature31 failed to verify") + } + + return nil +} + +func epochStartSignatureMsg(ogid OutcomeGenerationID, esp EpochStartProof) []byte { h := sha256.New() - _, _ = h.Write([]byte(epochStartProofSignatureDomainSeparator)) + _, _ = h.Write([]byte(epochStartSignatureDomainSeparator)) _, _ = h.Write(ogid.ConfigDigest[:]) _ = binary.Write(h, binary.BigEndian, ogid.Epoch) - highestCertifiedEnc := esp.HighestCertified.SignatureMsg(ogid) - _ = binary.Write(h, binary.BigEndian, uint64(len(highestCertifiedEnc))) - _, _ = h.Write(highestCertifiedEnc) + var highestCertifiedDigest CertifiedPrepareOrCommitDigest + if esp.HighestCertified != nil { + highestCertifiedDigest = esp.HighestCertified.Digest() + } + _, _ = h.Write(highestCertifiedDigest[:]) _ = binary.Write(h, binary.BigEndian, uint64(len(esp.HighestCertifiedProof))) for _, ashct := range esp.HighestCertifiedProof { @@ -644,12 +726,116 @@ func epochStartProofSignatureMsg(ogid OutcomeGenerationID, esp EpochStartProof) return ocr3DomainSeparatedSum(h) } -type EpochStartSignature31 []byte +const roundStartSignatureDomainSeparator = "ocr3 RoundStartSignature" -func MakeEpochStartSignature31( +type RoundStartSignature31 []byte + +func MakeRoundStartSignature31( ogid OutcomeGenerationID, - epochStartProof EpochStartProof, + seqNr uint64, + query types.Query, signer func(msg []byte) ([]byte, error), -) (EpochStartSignature31, error) { - return signer(epochStartProofSignatureMsg(ogid, epochStartProof)) +) (RoundStartSignature31, error) { + return signer(roundStartSignatureMsg(ogid, seqNr, query)) +} + +func (sig RoundStartSignature31) Verify( + ogid OutcomeGenerationID, + seqNr uint64, + query types.Query, + publicKey types.OffchainPublicKey, +) error { + pk := ed25519.PublicKey(publicKey[:]) + + if len(pk) != ed25519.PublicKeySize { + return fmt.Errorf("ed25519 public key size mismatch, expected %v but got %v", ed25519.PublicKeySize, len(pk)) + } + + ok := ed25519.Verify(pk, roundStartSignatureMsg(ogid, seqNr, query), sig) + if !ok { + return fmt.Errorf("RoundStartSignature31 failed to verify") + } + return nil +} + +func roundStartSignatureMsg( + ogid OutcomeGenerationID, + seqNr uint64, + query types.Query, +) []byte { + h := sha256.New() + + _, _ = h.Write([]byte(roundStartSignatureDomainSeparator)) + + _, _ = h.Write(ogid.ConfigDigest[:]) + _ = binary.Write(h, binary.BigEndian, ogid.Epoch) + + _ = binary.Write(h, binary.BigEndian, seqNr) + + _ = binary.Write(h, binary.BigEndian, uint64(len(query))) + _, _ = h.Write(query) + + return ocr3DomainSeparatedSum(h) +} + +const proposalSignatureDomainSeparator = "ocr3 ProposalSignature" + +type ProposalSignature31 []byte + +func MakeProposalSignature31( + ogid OutcomeGenerationID, + seqNr uint64, + attributedSignedObservations []AttributedSignedObservation, + signer func(msg []byte) ([]byte, error), +) (ProposalSignature31, error) { + return signer(proposalSignatureMsg(ogid, seqNr, attributedSignedObservations)) +} + +func (sig ProposalSignature31) Verify( + ogid OutcomeGenerationID, + seqNr uint64, + attributedSignedObservations []AttributedSignedObservation, + publicKey types.OffchainPublicKey, +) error { + pk := ed25519.PublicKey(publicKey[:]) + + if len(pk) != ed25519.PublicKeySize { + return fmt.Errorf("ed25519 public key size mismatch, expected %v but got %v", ed25519.PublicKeySize, len(pk)) + } + + ok := ed25519.Verify(pk, proposalSignatureMsg(ogid, seqNr, attributedSignedObservations), sig) + if !ok { + return fmt.Errorf("ProposalSignature31 failed to verify") + } + + return nil +} + +func proposalSignatureMsg( + ogid OutcomeGenerationID, + seqNr uint64, + attributedSignedObservations []AttributedSignedObservation, +) []byte { + h := sha256.New() + + _, _ = h.Write([]byte(proposalSignatureDomainSeparator)) + + _, _ = h.Write(ogid.ConfigDigest[:]) + _ = binary.Write(h, binary.BigEndian, ogid.Epoch) + + _ = binary.Write(h, binary.BigEndian, seqNr) + + _ = binary.Write(h, binary.BigEndian, uint64(len(attributedSignedObservations))) + for _, aso := range attributedSignedObservations { + + _ = binary.Write(h, binary.BigEndian, uint64(len(aso.SignedObservation.Observation))) + _, _ = h.Write(aso.SignedObservation.Observation) + + _ = binary.Write(h, binary.BigEndian, uint64(len(aso.SignedObservation.Signature))) + _, _ = h.Write(aso.SignedObservation.Signature) + + _ = binary.Write(h, binary.BigEndian, uint64(aso.Observer)) + } + + return ocr3DomainSeparatedSum(h) } diff --git a/offchainreporting2plus/internal/ocr3/protocol/telemetry.go b/offchainreporting2plus/internal/ocr3/protocol/telemetry.go index d38f6a4e..5cb46c9f 100644 --- a/offchainreporting2plus/internal/ocr3/protocol/telemetry.go +++ b/offchainreporting2plus/internal/ocr3/protocol/telemetry.go @@ -1,11 +1,19 @@ package protocol import ( + "time" + "github.com/smartcontractkit/libocr/commontypes" "github.com/smartcontractkit/libocr/offchainreporting2plus/types" ) type TelemetrySender interface { + EpochStarted( + configDigest types.ConfigDigest, + epoch uint32, + leader commontypes.OracleID, + ) + RoundStarted( configDigest types.ConfigDigest, epoch uint64, @@ -13,4 +21,30 @@ type TelemetrySender interface { round uint64, leader commontypes.OracleID, ) + + TransmissionScheduleComputed( + configDigest types.ConfigDigest, + seqNr uint64, + index int, + now time.Time, + isOverride bool, + schedule map[commontypes.OracleID]time.Duration, + ok bool, + ) + + TransmissionShouldAcceptAttestedReportComputed( + configDigest types.ConfigDigest, + seqNr uint64, + index int, + result bool, + ok bool, + ) + + TransmissionShouldTransmitAcceptedReportComputed( + configDigest types.ConfigDigest, + seqNr uint64, + index int, + result bool, + ok bool, + ) } diff --git a/offchainreporting2plus/internal/ocr3/protocol/transmission.go b/offchainreporting2plus/internal/ocr3/protocol/transmission.go index 44522c4e..10d164b1 100644 --- a/offchainreporting2plus/internal/ocr3/protocol/transmission.go +++ b/offchainreporting2plus/internal/ocr3/protocol/transmission.go @@ -5,7 +5,6 @@ import ( "crypto/hmac" "crypto/sha256" "encoding/binary" - "slices" "time" "github.com/smartcontractkit/libocr/commontypes" @@ -30,6 +29,7 @@ func RunTransmission[RI any]( localConfig types.LocalConfig, logger loghelper.LoggerWithContext, reportingPlugin ocr3types.ReportingPlugin[RI], + telemetrySender TelemetrySender, ) { sched := scheduler.NewScheduler[EventAttestedReport[RI]]() defer sched.Close() @@ -45,6 +45,7 @@ func RunTransmission[RI any]( localConfig, logger.MakeUpdated(commontypes.LogFields{"proto": "transmission"}), reportingPlugin, + telemetrySender, sched, } @@ -62,6 +63,7 @@ type transmissionState[RI any] struct { localConfig types.LocalConfig logger loghelper.LoggerWithContext reportingPlugin ocr3types.ReportingPlugin[RI] + telemetrySender TelemetrySender scheduler *scheduler.Scheduler[EventAttestedReport[RI]] } @@ -101,18 +103,27 @@ func (t *transmissionState[RI]) eventAttestedReport(ev EventAttestedReport[RI]) } func (t *transmissionState[RI]) backgroundEventAttestedReport(ctx context.Context, start time.Time, ev EventAttestedReport[RI]) { - var delay time.Duration - { - delayMaybe := t.transmitDelay(ev.SeqNr, ev.Index, ev.TransmissionScheduleOverride) - if delayMaybe == nil { - t.logger.Debug("dropping EventAttestedReport because we're not included in transmission schedule", commontypes.LogFields{ - "seqNr": ev.SeqNr, - "index": ev.Index, - "transmissionScheduleOverride": ev.TransmissionScheduleOverride != nil, - }) - return - } - delay = *delayMaybe + delays, ok := t.transmitDelays(ev.SeqNr, ev.Index, ev.TransmissionScheduleOverride) + t.telemetrySender.TransmissionScheduleComputed( + t.config.ConfigDigest, + ev.SeqNr, + ev.Index, + start, + ev.TransmissionScheduleOverride != nil, + delays, + ok, + ) + if !ok { + return + } + delay, ok := delays[t.id] + if !ok { + t.logger.Debug("dropping EventAttestedReport because we're not included in transmission schedule", commontypes.LogFields{ + "seqNr": ev.SeqNr, + "index": ev.Index, + "transmissionScheduleOverride": ev.TransmissionScheduleOverride != nil, + }) + return } shouldAccept, ok := callPlugin[bool]( @@ -132,6 +143,7 @@ func (t *transmissionState[RI]) backgroundEventAttestedReport(ctx context.Contex ) }, ) + t.telemetrySender.TransmissionShouldAcceptAttestedReportComputed(t.config.ConfigDigest, ev.SeqNr, ev.Index, shouldAccept, ok) if !ok { return } @@ -177,6 +189,7 @@ func (t *transmissionState[RI]) backgroundScheduled(ctx context.Context, ev Even ) }, ) + t.telemetrySender.TransmissionShouldTransmitAcceptedReportComputed(t.config.ConfigDigest, ev.SeqNr, ev.Index, shouldTransmit, ok) if !ok { return } @@ -246,42 +259,85 @@ func (t *transmissionState[RI]) transmitPermutationKey(seqNr uint64, index int) return key } -func (t *transmissionState[RI]) transmitDelayFromOverride(seqNr uint64, index int, transmissionScheduleOverride ocr3types.TransmissionSchedule) *time.Duration { +func (t *transmissionState[RI]) transmitDelaysFromOverride(seqNr uint64, index int, transmissionScheduleOverride ocr3types.TransmissionSchedule) (delays map[commontypes.OracleID]time.Duration, ok bool) { if len(transmissionScheduleOverride.TransmissionDelays) != len(transmissionScheduleOverride.Transmitters) { - t.logger.Error("invalid TransmissionScheduleOverride, cannot compute delay", commontypes.LogFields{ + t.logger.Error("invalid TransmissionScheduleOverride, cannot compute delay, lengths do not match", commontypes.LogFields{ "seqNr": seqNr, "index": index, "transmissionScheduleOverride": transmissionScheduleOverride, }) - return nil + return nil, false + } + + for _, oid := range transmissionScheduleOverride.Transmitters { + if !(0 <= int(oid) && int(oid) < t.config.N()) { + t.logger.Error("invalid TransmissionScheduleOverride, cannot compute delay, oracle id out of bounds", commontypes.LogFields{ + "seqNr": seqNr, + "index": index, + "transmissionScheduleOverride": transmissionScheduleOverride, + }) + return nil, false + } } - oracleIndex := slices.Index(transmissionScheduleOverride.Transmitters, t.id) - if oracleIndex < 0 { - return nil + // Permutation from index of oracle in transmissionScheduleOverride.Transmitters to transmission order index. + pi := permutation.Permutation(len(transmissionScheduleOverride.Transmitters), t.transmitPermutationKey(seqNr, index)) + + result := make(map[commontypes.OracleID]time.Duration, len(transmissionScheduleOverride.Transmitters)) + + for transmitterIndex, oid := range transmissionScheduleOverride.Transmitters { + if _, ok := result[oid]; ok { + t.logger.Error("invalid TransmissionScheduleOverride, cannot compute delay, duplicate oracle id", commontypes.LogFields{ + "seqNr": seqNr, + "index": index, + "transmissionScheduleOverride": transmissionScheduleOverride, + }) + return nil, false + } + result[oid] = transmissionScheduleOverride.TransmissionDelays[pi[transmitterIndex]] } - pi := permutation.Permutation(len(transmissionScheduleOverride.TransmissionDelays), t.transmitPermutationKey(seqNr, index)) - delay := transmissionScheduleOverride.TransmissionDelays[pi[oracleIndex]] - return &delay + + return result, true } -func (t *transmissionState[RI]) transmitDelayDefault(seqNr uint64, index int) *time.Duration { - pi := permutation.Permutation(t.config.N(), t.transmitPermutationKey(seqNr, index)) - sum := 0 - for i, s := range t.config.S { - sum += s - if pi[t.id] < sum { - result := time.Duration(i) * t.config.DeltaStage - return &result +func (t *transmissionState[RI]) transmitDelaysDefault(seqNr uint64, index int) map[commontypes.OracleID]time.Duration { + // Permutation from transmission order index to oracle id + piInv := make([]int, t.config.N()) + { + // Permutation from oracle id to transmission order index. The + // permutations are structured in this "inverted" way for historical + // compatibility + pi := permutation.Permutation(t.config.N(), t.transmitPermutationKey(seqNr, index)) + for i := range pi { + piInv[pi[i]] = i + } + } + + result := make(map[commontypes.OracleID]time.Duration, t.config.N()) + + accumulatedStageSize := 0 + for stageIdx, stageSize := range t.config.S { + // i is the index of the oracle sorted by transmission order + for i := accumulatedStageSize; i < accumulatedStageSize+stageSize; i++ { + if i >= len(piInv) { + // Index is larger than index of the last oracle. This happens + // when sum(S) > N. + break + } + oracleId := commontypes.OracleID(piInv[i]) + result[oracleId] = time.Duration(stageIdx) * t.config.DeltaStage } + + accumulatedStageSize += stageSize } - return nil + + return result } -func (t *transmissionState[RI]) transmitDelay(seqNr uint64, index int, transmissionScheduleOverride *ocr3types.TransmissionSchedule) *time.Duration { +func (t *transmissionState[RI]) transmitDelays(seqNr uint64, index int, transmissionScheduleOverride *ocr3types.TransmissionSchedule) (delays map[commontypes.OracleID]time.Duration, ok bool) { if transmissionScheduleOverride != nil { - return t.transmitDelayFromOverride(seqNr, index, *transmissionScheduleOverride) + return t.transmitDelaysFromOverride(seqNr, index, *transmissionScheduleOverride) } else { - return t.transmitDelayDefault(seqNr, index) + return t.transmitDelaysDefault(seqNr, index), true } } diff --git a/offchainreporting2plus/internal/ocr3/serialization/offchainreporting3_messages.pb.go b/offchainreporting2plus/internal/ocr3/serialization/offchainreporting3_messages.pb.go index f4f7ae3e..edff6000 100644 --- a/offchainreporting2plus/internal/ocr3/serialization/offchainreporting3_messages.pb.go +++ b/offchainreporting2plus/internal/ocr3/serialization/offchainreporting3_messages.pb.go @@ -405,9 +405,10 @@ type MessageRoundStart struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` - SeqNr uint64 `protobuf:"varint,2,opt,name=seq_nr,json=seqNr,proto3" json:"seq_nr,omitempty"` - Query []byte `protobuf:"bytes,3,opt,name=query,proto3" json:"query,omitempty"` + Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` + SeqNr uint64 `protobuf:"varint,2,opt,name=seq_nr,json=seqNr,proto3" json:"seq_nr,omitempty"` + Query []byte `protobuf:"bytes,3,opt,name=query,proto3" json:"query,omitempty"` + Signature31 []byte `protobuf:"bytes,4,opt,name=signature31,proto3" json:"signature31,omitempty"` } func (x *MessageRoundStart) Reset() { @@ -463,6 +464,13 @@ func (x *MessageRoundStart) GetQuery() []byte { return nil } +func (x *MessageRoundStart) GetSignature31() []byte { + if x != nil { + return x.Signature31 + } + return nil +} + type MessageObservation struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -534,6 +542,7 @@ type MessageProposal struct { Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` SeqNr uint64 `protobuf:"varint,2,opt,name=seq_nr,json=seqNr,proto3" json:"seq_nr,omitempty"` AttributedSignedObservations []*AttributedSignedObservation `protobuf:"bytes,3,rep,name=attributed_signed_observations,json=attributedSignedObservations,proto3" json:"attributed_signed_observations,omitempty"` + Signature31 []byte `protobuf:"bytes,4,opt,name=signature31,proto3" json:"signature31,omitempty"` } func (x *MessageProposal) Reset() { @@ -589,6 +598,13 @@ func (x *MessageProposal) GetAttributedSignedObservations() []*AttributedSignedO return nil } +func (x *MessageProposal) GetSignature31() []byte { + if x != nil { + return x.Signature31 + } + return nil +} + type MessagePrepare struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1655,177 +1671,181 @@ var file_offchainreporting3_messages_proto_rawDesc = []byte{ 0x66, 0x52, 0x0f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x33, 0x31, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x33, 0x31, 0x22, 0x56, 0x0a, 0x11, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x72, 0x65, 0x33, 0x31, 0x22, 0x78, 0x0a, 0x11, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x97, 0x01, 0x0a, - 0x12, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, - 0x5f, 0x6e, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x72, - 0x12, 0x54, 0x0a, 0x12, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x73, 0x65, 0x72, - 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, - 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, - 0x33, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4f, 0x62, 0x73, 0x65, 0x72, - 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb5, 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, - 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, - 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x72, 0x12, 0x75, 0x0a, 0x1e, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x73, - 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2f, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x53, - 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x1c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x53, 0x69, 0x67, 0x6e, - 0x65, 0x64, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x5b, - 0x0a, 0x0e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, + 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x33, 0x31, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x33, 0x31, 0x22, 0x97, + 0x01, 0x0a, 0x12, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x15, 0x0a, 0x06, 0x73, + 0x65, 0x71, 0x5f, 0x6e, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, + 0x4e, 0x72, 0x12, 0x54, 0x0a, 0x12, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x73, + 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, + 0x6e, 0x67, 0x33, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4f, 0x62, 0x73, + 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd7, 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, + 0x63, 0x68, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x72, 0x12, 0x75, 0x0a, 0x1e, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x6f, + 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2f, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x64, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x1c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x53, 0x69, + 0x67, 0x6e, 0x65, 0x64, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x33, 0x31, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x33, 0x31, 0x22, 0x5b, 0x0a, 0x0e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x72, 0x65, + 0x70, 0x61, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, + 0x71, 0x5f, 0x6e, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, + 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, + 0x5a, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x5a, 0x0a, 0x0d, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x5d, 0x0a, 0x17, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x72, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0x36, 0x0a, 0x1d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x6e, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x72, 0x22, 0x68, - 0x0a, 0x16, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x4e, 0x0a, 0x10, 0x63, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x0f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, 0xe3, 0x01, 0x0a, 0x0f, 0x45, 0x70, 0x6f, - 0x63, 0x68, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x59, 0x0a, 0x11, - 0x68, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x4f, 0x72, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x10, 0x68, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x75, 0x0a, 0x17, 0x68, 0x69, 0x67, 0x68, 0x65, - 0x73, 0x74, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x6f, - 0x6f, 0x66, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x48, 0x69, - 0x67, 0x68, 0x65, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x15, 0x68, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0xb0, - 0x01, 0x0a, 0x18, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x50, 0x72, 0x65, 0x70, - 0x61, 0x72, 0x65, 0x4f, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x40, 0x0a, 0x07, 0x70, - 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, + 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x5d, 0x0a, 0x17, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x72, 0x12, 0x2b, 0x0a, + 0x11, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0x36, 0x0a, 0x1d, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x73, + 0x65, 0x71, 0x5f, 0x6e, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, + 0x4e, 0x72, 0x22, 0x68, 0x0a, 0x16, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x65, 0x72, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x4e, 0x0a, 0x10, + 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x43, 0x65, 0x72, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x0f, 0x63, 0x65, 0x72, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, 0xe3, 0x01, 0x0a, + 0x0f, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x12, 0x59, 0x0a, 0x11, 0x68, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x65, 0x72, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x66, + 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, + 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, + 0x65, 0x4f, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x10, 0x68, 0x69, 0x67, 0x68, 0x65, + 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x75, 0x0a, 0x17, 0x68, + 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, + 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, - 0x33, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x50, 0x72, 0x65, 0x70, 0x61, - 0x72, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x12, 0x3d, 0x0a, - 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x33, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x53, 0x69, 0x67, 0x6e, + 0x65, 0x64, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x15, 0x68, 0x69, 0x67, + 0x68, 0x65, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x22, 0xb0, 0x01, 0x0a, 0x18, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, + 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x4f, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, + 0x40, 0x0a, 0x07, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x50, + 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, + 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x42, 0x13, 0x0a, 0x11, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x72, 0x5f, 0x63, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, 0x8a, 0x02, 0x0a, 0x10, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, + 0x69, 0x65, 0x64, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, + 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0c, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, + 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x05, 0x73, 0x65, 0x71, 0x4e, 0x72, 0x12, 0x32, 0x0a, 0x15, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, + 0x65, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x13, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x49, 0x6e, + 0x70, 0x75, 0x74, 0x73, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x75, + 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6f, 0x75, 0x74, + 0x63, 0x6f, 0x6d, 0x65, 0x12, 0x6c, 0x0a, 0x1a, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f, + 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x18, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, + 0x65, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x22, 0xd0, 0x01, 0x0a, 0x0f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, + 0x5f, 0x6e, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x72, + 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x12, 0x69, 0x0a, 0x19, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x63, 0x65, 0x72, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, - 0x67, 0x33, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x42, 0x13, 0x0a, 0x11, - 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x22, 0x8a, 0x02, 0x0a, 0x10, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x50, - 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, - 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x70, - 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x15, 0x0a, 0x06, 0x73, - 0x65, 0x71, 0x5f, 0x6e, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, - 0x4e, 0x72, 0x12, 0x32, 0x0a, 0x15, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x5f, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x73, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x13, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, - 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, - 0x12, 0x6c, 0x0a, 0x1a, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x71, 0x75, 0x6f, 0x72, - 0x75, 0x6d, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x64, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x52, 0x18, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x51, 0x75, 0x6f, - 0x72, 0x75, 0x6d, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x22, 0xd0, - 0x01, 0x0a, 0x0f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x72, 0x12, 0x18, 0x0a, 0x07, - 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6f, - 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x12, 0x69, 0x0a, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x5f, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x66, 0x66, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x22, 0x80, 0x01, 0x0a, 0x19, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x05, 0x73, 0x65, 0x71, 0x4e, 0x72, 0x12, 0x36, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6c, 0x73, 0x65, 0x5f, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x64, 0x45, 0x6c, 0x73, 0x65, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, - 0x70, 0x6f, 0x63, 0x68, 0x22, 0xc6, 0x01, 0x0a, 0x29, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x12, 0x80, 0x01, 0x0a, 0x22, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x68, 0x69, - 0x67, 0x68, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x33, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x48, 0x69, 0x67, 0x68, 0x65, - 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x1f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x48, 0x69, 0x67, 0x68, - 0x65, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x22, 0xd0, 0x01, - 0x0a, 0x1f, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x12, 0x6d, 0x0a, 0x1b, 0x68, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x48, 0x69, 0x67, 0x68, + 0x67, 0x33, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x17, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x22, 0x80, 0x01, 0x0a, 0x19, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, + 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x72, 0x12, 0x36, 0x0a, 0x17, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6c, 0x73, 0x65, 0x5f, 0x70, 0x72, 0x65, + 0x70, 0x61, 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x63, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x45, 0x6c, 0x73, 0x65, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, + 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x22, 0xc6, 0x01, 0x0a, 0x29, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x48, 0x69, 0x67, + 0x68, 0x65, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x80, 0x01, 0x0a, 0x22, 0x73, 0x69, 0x67, 0x6e, 0x65, + 0x64, 0x5f, 0x68, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, + 0x69, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x48, + 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x1f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, + 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x67, + 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, + 0x72, 0x22, 0xd0, 0x01, 0x0a, 0x1f, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x19, 0x68, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x20, - 0x0a, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x33, 0x31, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x33, 0x31, - 0x22, 0x8f, 0x01, 0x0a, 0x1b, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x53, - 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x54, 0x0a, 0x12, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x73, 0x65, 0x72, - 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, - 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, - 0x33, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4f, 0x62, 0x73, 0x65, 0x72, - 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x22, 0x53, 0x0a, 0x11, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4f, 0x62, 0x73, 0x65, - 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x62, 0x73, 0x65, 0x72, - 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x6f, 0x62, - 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x52, 0x0a, 0x1a, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x64, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 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, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x22, 0x51, 0x0a, 0x19, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 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, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x42, 0x11, - 0x5a, 0x0f, 0x2e, 0x3b, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x6d, 0x0a, 0x1b, 0x68, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, + 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x66, 0x66, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, + 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x19, 0x68, 0x69, 0x67, 0x68, 0x65, + 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x33, + 0x31, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x31, 0x22, 0x8f, 0x01, 0x0a, 0x1b, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x12, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x6f, + 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4f, 0x62, 0x73, 0x65, + 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4f, + 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x62, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6f, 0x62, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x53, 0x0a, 0x11, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, + 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6f, + 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0b, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x52, 0x0a, 0x1a, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 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, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x22, + 0x51, 0x0a, 0x19, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 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, 0x16, 0x0a, 0x06, 0x73, 0x69, + 0x67, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, + 0x65, 0x72, 0x42, 0x11, 0x5a, 0x0f, 0x2e, 0x3b, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/offchainreporting2plus/internal/ocr3/serialization/offchainreporting3_telemetry.pb.go b/offchainreporting2plus/internal/ocr3/serialization/offchainreporting3_telemetry.pb.go index e0be7a67..e983bf8f 100644 --- a/offchainreporting2plus/internal/ocr3/serialization/offchainreporting3_telemetry.pb.go +++ b/offchainreporting2plus/internal/ocr3/serialization/offchainreporting3_telemetry.pb.go @@ -32,6 +32,10 @@ type TelemetryWrapper struct { // *TelemetryWrapper_MessageSent // *TelemetryWrapper_AssertionViolation // *TelemetryWrapper_RoundStarted + // *TelemetryWrapper_TransmissionScheduleComputed + // *TelemetryWrapper_TransmissionShouldAcceptAttestedReportComputed + // *TelemetryWrapper_TransmissionShouldTransmitAcceptedReportComputed + // *TelemetryWrapper_EpochStarted Wrapped isTelemetryWrapper_Wrapped `protobuf_oneof:"wrapped"` UnixTimeNanoseconds int64 `protobuf:"varint,6,opt,name=unix_time_nanoseconds,json=unixTimeNanoseconds,proto3" json:"unix_time_nanoseconds,omitempty"` } @@ -110,6 +114,34 @@ func (x *TelemetryWrapper) GetRoundStarted() *TelemetryRoundStarted { return nil } +func (x *TelemetryWrapper) GetTransmissionScheduleComputed() *TelemetryTransmissionScheduleComputed { + if x, ok := x.GetWrapped().(*TelemetryWrapper_TransmissionScheduleComputed); ok { + return x.TransmissionScheduleComputed + } + return nil +} + +func (x *TelemetryWrapper) GetTransmissionShouldAcceptAttestedReportComputed() *TelemetryTransmissionShouldAcceptAttestedReportComputed { + if x, ok := x.GetWrapped().(*TelemetryWrapper_TransmissionShouldAcceptAttestedReportComputed); ok { + return x.TransmissionShouldAcceptAttestedReportComputed + } + return nil +} + +func (x *TelemetryWrapper) GetTransmissionShouldTransmitAcceptedReportComputed() *TelemetryTransmissionShouldTransmitAcceptedReportComputed { + if x, ok := x.GetWrapped().(*TelemetryWrapper_TransmissionShouldTransmitAcceptedReportComputed); ok { + return x.TransmissionShouldTransmitAcceptedReportComputed + } + return nil +} + +func (x *TelemetryWrapper) GetEpochStarted() *TelemetryEpochStarted { + if x, ok := x.GetWrapped().(*TelemetryWrapper_EpochStarted); ok { + return x.EpochStarted + } + return nil +} + func (x *TelemetryWrapper) GetUnixTimeNanoseconds() int64 { if x != nil { return x.UnixTimeNanoseconds @@ -141,6 +173,22 @@ type TelemetryWrapper_RoundStarted struct { RoundStarted *TelemetryRoundStarted `protobuf:"bytes,5,opt,name=round_started,json=roundStarted,proto3,oneof"` } +type TelemetryWrapper_TransmissionScheduleComputed struct { + TransmissionScheduleComputed *TelemetryTransmissionScheduleComputed `protobuf:"bytes,7,opt,name=transmission_schedule_computed,json=transmissionScheduleComputed,proto3,oneof"` +} + +type TelemetryWrapper_TransmissionShouldAcceptAttestedReportComputed struct { + TransmissionShouldAcceptAttestedReportComputed *TelemetryTransmissionShouldAcceptAttestedReportComputed `protobuf:"bytes,8,opt,name=transmission_should_accept_attested_report_computed,json=transmissionShouldAcceptAttestedReportComputed,proto3,oneof"` +} + +type TelemetryWrapper_TransmissionShouldTransmitAcceptedReportComputed struct { + TransmissionShouldTransmitAcceptedReportComputed *TelemetryTransmissionShouldTransmitAcceptedReportComputed `protobuf:"bytes,9,opt,name=transmission_should_transmit_accepted_report_computed,json=transmissionShouldTransmitAcceptedReportComputed,proto3,oneof"` +} + +type TelemetryWrapper_EpochStarted struct { + EpochStarted *TelemetryEpochStarted `protobuf:"bytes,10,opt,name=epoch_started,json=epochStarted,proto3,oneof"` +} + func (*TelemetryWrapper_MessageReceived) isTelemetryWrapper_Wrapped() {} func (*TelemetryWrapper_MessageBroadcast) isTelemetryWrapper_Wrapped() {} @@ -151,6 +199,16 @@ func (*TelemetryWrapper_AssertionViolation) isTelemetryWrapper_Wrapped() {} func (*TelemetryWrapper_RoundStarted) isTelemetryWrapper_Wrapped() {} +func (*TelemetryWrapper_TransmissionScheduleComputed) isTelemetryWrapper_Wrapped() {} + +func (*TelemetryWrapper_TransmissionShouldAcceptAttestedReportComputed) isTelemetryWrapper_Wrapped() { +} + +func (*TelemetryWrapper_TransmissionShouldTransmitAcceptedReportComputed) isTelemetryWrapper_Wrapped() { +} + +func (*TelemetryWrapper_EpochStarted) isTelemetryWrapper_Wrapped() {} + type TelemetryMessageReceived struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -565,6 +623,346 @@ func (x *TelemetryRoundStarted) GetSeqNr() uint64 { return 0 } +type TelemetryTransmissionScheduleComputed struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ConfigDigest []byte `protobuf:"bytes,1,opt,name=config_digest,json=configDigest,proto3" json:"config_digest,omitempty"` + Epoch uint64 `protobuf:"varint,2,opt,name=epoch,proto3" json:"epoch,omitempty"` + SeqNr uint64 `protobuf:"varint,3,opt,name=seq_nr,json=seqNr,proto3" json:"seq_nr,omitempty"` + Index uint64 `protobuf:"varint,4,opt,name=index,proto3" json:"index,omitempty"` + UnixTimeNanoseconds uint64 `protobuf:"varint,5,opt,name=unix_time_nanoseconds,json=unixTimeNanoseconds,proto3" json:"unix_time_nanoseconds,omitempty"` + IsOverride bool `protobuf:"varint,6,opt,name=is_override,json=isOverride,proto3" json:"is_override,omitempty"` + ScheduleDelayNanosecondsPerNode map[uint64]uint64 `protobuf:"bytes,7,rep,name=schedule_delay_nanoseconds_per_node,json=scheduleDelayNanosecondsPerNode,proto3" json:"schedule_delay_nanoseconds_per_node,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + Ok bool `protobuf:"varint,8,opt,name=ok,proto3" json:"ok,omitempty"` // Was the schedule computed successfully? +} + +func (x *TelemetryTransmissionScheduleComputed) Reset() { + *x = TelemetryTransmissionScheduleComputed{} + if protoimpl.UnsafeEnabled { + mi := &file_offchainreporting3_telemetry_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TelemetryTransmissionScheduleComputed) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TelemetryTransmissionScheduleComputed) ProtoMessage() {} + +func (x *TelemetryTransmissionScheduleComputed) ProtoReflect() protoreflect.Message { + mi := &file_offchainreporting3_telemetry_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TelemetryTransmissionScheduleComputed.ProtoReflect.Descriptor instead. +func (*TelemetryTransmissionScheduleComputed) Descriptor() ([]byte, []int) { + return file_offchainreporting3_telemetry_proto_rawDescGZIP(), []int{7} +} + +func (x *TelemetryTransmissionScheduleComputed) GetConfigDigest() []byte { + if x != nil { + return x.ConfigDigest + } + return nil +} + +func (x *TelemetryTransmissionScheduleComputed) GetEpoch() uint64 { + if x != nil { + return x.Epoch + } + return 0 +} + +func (x *TelemetryTransmissionScheduleComputed) GetSeqNr() uint64 { + if x != nil { + return x.SeqNr + } + return 0 +} + +func (x *TelemetryTransmissionScheduleComputed) GetIndex() uint64 { + if x != nil { + return x.Index + } + return 0 +} + +func (x *TelemetryTransmissionScheduleComputed) GetUnixTimeNanoseconds() uint64 { + if x != nil { + return x.UnixTimeNanoseconds + } + return 0 +} + +func (x *TelemetryTransmissionScheduleComputed) GetIsOverride() bool { + if x != nil { + return x.IsOverride + } + return false +} + +func (x *TelemetryTransmissionScheduleComputed) GetScheduleDelayNanosecondsPerNode() map[uint64]uint64 { + if x != nil { + return x.ScheduleDelayNanosecondsPerNode + } + return nil +} + +func (x *TelemetryTransmissionScheduleComputed) GetOk() bool { + if x != nil { + return x.Ok + } + return false +} + +type TelemetryTransmissionShouldAcceptAttestedReportComputed struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ConfigDigest []byte `protobuf:"bytes,1,opt,name=config_digest,json=configDigest,proto3" json:"config_digest,omitempty"` + Epoch uint64 `protobuf:"varint,2,opt,name=epoch,proto3" json:"epoch,omitempty"` + SeqNr uint64 `protobuf:"varint,3,opt,name=seq_nr,json=seqNr,proto3" json:"seq_nr,omitempty"` + Index uint64 `protobuf:"varint,4,opt,name=index,proto3" json:"index,omitempty"` + Result bool `protobuf:"varint,5,opt,name=result,proto3" json:"result,omitempty"` + Ok bool `protobuf:"varint,6,opt,name=ok,proto3" json:"ok,omitempty"` // Did the ReportingPlugin method return successfully? +} + +func (x *TelemetryTransmissionShouldAcceptAttestedReportComputed) Reset() { + *x = TelemetryTransmissionShouldAcceptAttestedReportComputed{} + if protoimpl.UnsafeEnabled { + mi := &file_offchainreporting3_telemetry_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TelemetryTransmissionShouldAcceptAttestedReportComputed) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TelemetryTransmissionShouldAcceptAttestedReportComputed) ProtoMessage() {} + +func (x *TelemetryTransmissionShouldAcceptAttestedReportComputed) ProtoReflect() protoreflect.Message { + mi := &file_offchainreporting3_telemetry_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TelemetryTransmissionShouldAcceptAttestedReportComputed.ProtoReflect.Descriptor instead. +func (*TelemetryTransmissionShouldAcceptAttestedReportComputed) Descriptor() ([]byte, []int) { + return file_offchainreporting3_telemetry_proto_rawDescGZIP(), []int{8} +} + +func (x *TelemetryTransmissionShouldAcceptAttestedReportComputed) GetConfigDigest() []byte { + if x != nil { + return x.ConfigDigest + } + return nil +} + +func (x *TelemetryTransmissionShouldAcceptAttestedReportComputed) GetEpoch() uint64 { + if x != nil { + return x.Epoch + } + return 0 +} + +func (x *TelemetryTransmissionShouldAcceptAttestedReportComputed) GetSeqNr() uint64 { + if x != nil { + return x.SeqNr + } + return 0 +} + +func (x *TelemetryTransmissionShouldAcceptAttestedReportComputed) GetIndex() uint64 { + if x != nil { + return x.Index + } + return 0 +} + +func (x *TelemetryTransmissionShouldAcceptAttestedReportComputed) GetResult() bool { + if x != nil { + return x.Result + } + return false +} + +func (x *TelemetryTransmissionShouldAcceptAttestedReportComputed) GetOk() bool { + if x != nil { + return x.Ok + } + return false +} + +type TelemetryTransmissionShouldTransmitAcceptedReportComputed struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ConfigDigest []byte `protobuf:"bytes,1,opt,name=config_digest,json=configDigest,proto3" json:"config_digest,omitempty"` + Epoch uint64 `protobuf:"varint,2,opt,name=epoch,proto3" json:"epoch,omitempty"` + SeqNr uint64 `protobuf:"varint,3,opt,name=seq_nr,json=seqNr,proto3" json:"seq_nr,omitempty"` + Index uint64 `protobuf:"varint,4,opt,name=index,proto3" json:"index,omitempty"` + Result bool `protobuf:"varint,5,opt,name=result,proto3" json:"result,omitempty"` + Ok bool `protobuf:"varint,6,opt,name=ok,proto3" json:"ok,omitempty"` // Did the ReportingPlugin method return successfully? +} + +func (x *TelemetryTransmissionShouldTransmitAcceptedReportComputed) Reset() { + *x = TelemetryTransmissionShouldTransmitAcceptedReportComputed{} + if protoimpl.UnsafeEnabled { + mi := &file_offchainreporting3_telemetry_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TelemetryTransmissionShouldTransmitAcceptedReportComputed) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TelemetryTransmissionShouldTransmitAcceptedReportComputed) ProtoMessage() {} + +func (x *TelemetryTransmissionShouldTransmitAcceptedReportComputed) ProtoReflect() protoreflect.Message { + mi := &file_offchainreporting3_telemetry_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TelemetryTransmissionShouldTransmitAcceptedReportComputed.ProtoReflect.Descriptor instead. +func (*TelemetryTransmissionShouldTransmitAcceptedReportComputed) Descriptor() ([]byte, []int) { + return file_offchainreporting3_telemetry_proto_rawDescGZIP(), []int{9} +} + +func (x *TelemetryTransmissionShouldTransmitAcceptedReportComputed) GetConfigDigest() []byte { + if x != nil { + return x.ConfigDigest + } + return nil +} + +func (x *TelemetryTransmissionShouldTransmitAcceptedReportComputed) GetEpoch() uint64 { + if x != nil { + return x.Epoch + } + return 0 +} + +func (x *TelemetryTransmissionShouldTransmitAcceptedReportComputed) GetSeqNr() uint64 { + if x != nil { + return x.SeqNr + } + return 0 +} + +func (x *TelemetryTransmissionShouldTransmitAcceptedReportComputed) GetIndex() uint64 { + if x != nil { + return x.Index + } + return 0 +} + +func (x *TelemetryTransmissionShouldTransmitAcceptedReportComputed) GetResult() bool { + if x != nil { + return x.Result + } + return false +} + +func (x *TelemetryTransmissionShouldTransmitAcceptedReportComputed) GetOk() bool { + if x != nil { + return x.Ok + } + return false +} + +type TelemetryEpochStarted struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ConfigDigest []byte `protobuf:"bytes,1,opt,name=config_digest,json=configDigest,proto3" json:"config_digest,omitempty"` + Epoch uint64 `protobuf:"varint,2,opt,name=epoch,proto3" json:"epoch,omitempty"` + Leader uint64 `protobuf:"varint,3,opt,name=leader,proto3" json:"leader,omitempty"` +} + +func (x *TelemetryEpochStarted) Reset() { + *x = TelemetryEpochStarted{} + if protoimpl.UnsafeEnabled { + mi := &file_offchainreporting3_telemetry_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TelemetryEpochStarted) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TelemetryEpochStarted) ProtoMessage() {} + +func (x *TelemetryEpochStarted) ProtoReflect() protoreflect.Message { + mi := &file_offchainreporting3_telemetry_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TelemetryEpochStarted.ProtoReflect.Descriptor instead. +func (*TelemetryEpochStarted) Descriptor() ([]byte, []int) { + return file_offchainreporting3_telemetry_proto_rawDescGZIP(), []int{10} +} + +func (x *TelemetryEpochStarted) GetConfigDigest() []byte { + if x != nil { + return x.ConfigDigest + } + return nil +} + +func (x *TelemetryEpochStarted) GetEpoch() uint64 { + if x != nil { + return x.Epoch + } + return 0 +} + +func (x *TelemetryEpochStarted) GetLeader() uint64 { + if x != nil { + return x.Leader + } + return 0 +} + var File_offchainreporting3_telemetry_proto protoreflect.FileDescriptor var file_offchainreporting3_telemetry_proto_rawDesc = []byte{ @@ -573,7 +971,7 @@ var file_offchainreporting3_telemetry_proto_rawDesc = []byte{ 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x1a, 0x21, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x5f, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8f, 0x04, 0x0a, 0x10, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe5, 0x08, 0x0a, 0x10, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x59, 0x0a, 0x10, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x66, 0x66, @@ -602,75 +1000,176 @@ var file_offchainreporting3_telemetry_proto_rawDesc = []byte{ 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x48, 0x00, - 0x52, 0x0c, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x32, - 0x0a, 0x15, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, - 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x75, - 0x6e, 0x69, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x22, 0x8d, 0x01, - 0x0a, 0x18, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, - 0x34, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, - 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, - 0x33, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, - 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x22, 0x9d, 0x01, - 0x0a, 0x19, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, + 0x52, 0x0c, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x81, + 0x01, 0x0a, 0x1e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, + 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x54, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, + 0x65, 0x64, 0x48, 0x00, 0x52, 0x1c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, + 0x65, 0x64, 0x12, 0xba, 0x01, 0x0a, 0x33, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, + 0x74, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x4b, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x6f, 0x75, 0x6c, + 0x64, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x6f, + 0x75, 0x6c, 0x64, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x12, + 0xc0, 0x01, 0x0a, 0x35, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, + 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x4d, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x6f, 0x75, 0x6c, 0x64, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x48, 0x00, + 0x52, 0x30, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x68, + 0x6f, 0x75, 0x6c, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x41, 0x63, 0x63, 0x65, + 0x70, 0x74, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, + 0x65, 0x64, 0x12, 0x50, 0x0a, 0x0d, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x66, 0x66, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x54, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x4e, 0x61, 0x6e, + 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x77, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x22, 0x8d, 0x01, 0x0a, 0x18, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, + 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, + 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x22, 0x9d, 0x01, 0x0a, 0x19, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, + 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, + 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x25, 0x0a, 0x0e, + 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, + 0x4d, 0x73, 0x67, 0x22, 0xb4, 0x01, 0x0a, 0x14, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, + 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x12, 0x34, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, + 0x6e, 0x67, 0x33, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x69, 0x61, + 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x12, 0x1a, + 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x54, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7a, 0x0a, 0x15, 0x69, 0x6e, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x6f, 0x66, 0x66, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x54, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x14, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x95, 0x01, 0x0a, 0x2f, 0x54, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, + 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, + 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, + 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x69, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, + 0x72, 0x22, 0xab, 0x01, 0x0a, 0x15, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x52, + 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x12, 0x34, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, - 0x67, 0x33, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, - 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x22, 0xb4, 0x01, - 0x0a, 0x14, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x03, 0x6d, - 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x52, 0x03, 0x6d, 0x73, - 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, - 0x6d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, - 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x72, 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, - 0x72, 0x79, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x6f, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7a, 0x0a, 0x15, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, - 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, - 0x72, 0x79, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x6f, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x53, 0x65, 0x72, 0x69, 0x61, - 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x14, 0x69, 0x6e, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x42, 0x0b, 0x0a, 0x09, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x04, 0x08, - 0x01, 0x10, 0x02, 0x22, 0x95, 0x01, 0x0a, 0x2f, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, - 0x79, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, - 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, - 0x4d, 0x73, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x22, 0xab, 0x01, 0x0a, 0x15, - 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, + 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, + 0x6e, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x72, 0x22, + 0xf7, 0x03, 0x0a, 0x25, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, + 0x70, 0x6f, 0x63, 0x68, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x72, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x12, 0x32, 0x0a, 0x15, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6e, + 0x61, 0x6e, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x13, 0x75, 0x6e, 0x69, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x6f, 0x76, 0x65, 0x72, + 0x72, 0x69, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x4f, 0x76, + 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0xac, 0x01, 0x0a, 0x23, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x5e, 0x2e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x72, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x33, 0x2e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x74, 0x72, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x2e, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6e, + 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x50, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x44, 0x65, + 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x50, 0x65, + 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x1a, 0x52, 0x0a, 0x24, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x73, 0x50, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc9, 0x01, 0x0a, 0x37, 0x54, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x41, + 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6d, + 0x70, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, - 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x74, 0x69, - 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x72, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x72, 0x42, 0x11, 0x5a, 0x0f, 0x2e, 0x3b, 0x73, - 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x12, 0x15, 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0xcb, 0x01, 0x0a, 0x39, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x74, 0x72, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, + 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x41, 0x63, 0x63, + 0x65, 0x70, 0x74, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x75, + 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x15, + 0x0a, 0x06, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, + 0x73, 0x65, 0x71, 0x4e, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x02, 0x6f, 0x6b, 0x22, 0x6a, 0x0a, 0x15, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, + 0x45, 0x70, 0x6f, 0x63, 0x68, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x42, + 0x11, 0x5a, 0x0f, 0x2e, 0x3b, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -685,32 +1184,42 @@ func file_offchainreporting3_telemetry_proto_rawDescGZIP() []byte { return file_offchainreporting3_telemetry_proto_rawDescData } -var file_offchainreporting3_telemetry_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_offchainreporting3_telemetry_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_offchainreporting3_telemetry_proto_goTypes = []interface{}{ - (*TelemetryWrapper)(nil), // 0: offchainreporting3.TelemetryWrapper - (*TelemetryMessageReceived)(nil), // 1: offchainreporting3.TelemetryMessageReceived - (*TelemetryMessageBroadcast)(nil), // 2: offchainreporting3.TelemetryMessageBroadcast - (*TelemetryMessageSent)(nil), // 3: offchainreporting3.TelemetryMessageSent - (*TelemetryAssertionViolation)(nil), // 4: offchainreporting3.TelemetryAssertionViolation - (*TelemetryAssertionViolationInvalidSerialization)(nil), // 5: offchainreporting3.TelemetryAssertionViolationInvalidSerialization - (*TelemetryRoundStarted)(nil), // 6: offchainreporting3.TelemetryRoundStarted - (*MessageWrapper)(nil), // 7: offchainreporting3.MessageWrapper + (*TelemetryWrapper)(nil), // 0: offchainreporting3.TelemetryWrapper + (*TelemetryMessageReceived)(nil), // 1: offchainreporting3.TelemetryMessageReceived + (*TelemetryMessageBroadcast)(nil), // 2: offchainreporting3.TelemetryMessageBroadcast + (*TelemetryMessageSent)(nil), // 3: offchainreporting3.TelemetryMessageSent + (*TelemetryAssertionViolation)(nil), // 4: offchainreporting3.TelemetryAssertionViolation + (*TelemetryAssertionViolationInvalidSerialization)(nil), // 5: offchainreporting3.TelemetryAssertionViolationInvalidSerialization + (*TelemetryRoundStarted)(nil), // 6: offchainreporting3.TelemetryRoundStarted + (*TelemetryTransmissionScheduleComputed)(nil), // 7: offchainreporting3.TelemetryTransmissionScheduleComputed + (*TelemetryTransmissionShouldAcceptAttestedReportComputed)(nil), // 8: offchainreporting3.TelemetryTransmissionShouldAcceptAttestedReportComputed + (*TelemetryTransmissionShouldTransmitAcceptedReportComputed)(nil), // 9: offchainreporting3.TelemetryTransmissionShouldTransmitAcceptedReportComputed + (*TelemetryEpochStarted)(nil), // 10: offchainreporting3.TelemetryEpochStarted + nil, // 11: offchainreporting3.TelemetryTransmissionScheduleComputed.ScheduleDelayNanosecondsPerNodeEntry + (*MessageWrapper)(nil), // 12: offchainreporting3.MessageWrapper } var file_offchainreporting3_telemetry_proto_depIdxs = []int32{ - 1, // 0: offchainreporting3.TelemetryWrapper.message_received:type_name -> offchainreporting3.TelemetryMessageReceived - 2, // 1: offchainreporting3.TelemetryWrapper.message_broadcast:type_name -> offchainreporting3.TelemetryMessageBroadcast - 3, // 2: offchainreporting3.TelemetryWrapper.message_sent:type_name -> offchainreporting3.TelemetryMessageSent - 4, // 3: offchainreporting3.TelemetryWrapper.assertion_violation:type_name -> offchainreporting3.TelemetryAssertionViolation - 6, // 4: offchainreporting3.TelemetryWrapper.round_started:type_name -> offchainreporting3.TelemetryRoundStarted - 7, // 5: offchainreporting3.TelemetryMessageReceived.msg:type_name -> offchainreporting3.MessageWrapper - 7, // 6: offchainreporting3.TelemetryMessageBroadcast.msg:type_name -> offchainreporting3.MessageWrapper - 7, // 7: offchainreporting3.TelemetryMessageSent.msg:type_name -> offchainreporting3.MessageWrapper - 5, // 8: offchainreporting3.TelemetryAssertionViolation.invalid_serialization:type_name -> offchainreporting3.TelemetryAssertionViolationInvalidSerialization - 9, // [9:9] is the sub-list for method output_type - 9, // [9:9] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name + 1, // 0: offchainreporting3.TelemetryWrapper.message_received:type_name -> offchainreporting3.TelemetryMessageReceived + 2, // 1: offchainreporting3.TelemetryWrapper.message_broadcast:type_name -> offchainreporting3.TelemetryMessageBroadcast + 3, // 2: offchainreporting3.TelemetryWrapper.message_sent:type_name -> offchainreporting3.TelemetryMessageSent + 4, // 3: offchainreporting3.TelemetryWrapper.assertion_violation:type_name -> offchainreporting3.TelemetryAssertionViolation + 6, // 4: offchainreporting3.TelemetryWrapper.round_started:type_name -> offchainreporting3.TelemetryRoundStarted + 7, // 5: offchainreporting3.TelemetryWrapper.transmission_schedule_computed:type_name -> offchainreporting3.TelemetryTransmissionScheduleComputed + 8, // 6: offchainreporting3.TelemetryWrapper.transmission_should_accept_attested_report_computed:type_name -> offchainreporting3.TelemetryTransmissionShouldAcceptAttestedReportComputed + 9, // 7: offchainreporting3.TelemetryWrapper.transmission_should_transmit_accepted_report_computed:type_name -> offchainreporting3.TelemetryTransmissionShouldTransmitAcceptedReportComputed + 10, // 8: offchainreporting3.TelemetryWrapper.epoch_started:type_name -> offchainreporting3.TelemetryEpochStarted + 12, // 9: offchainreporting3.TelemetryMessageReceived.msg:type_name -> offchainreporting3.MessageWrapper + 12, // 10: offchainreporting3.TelemetryMessageBroadcast.msg:type_name -> offchainreporting3.MessageWrapper + 12, // 11: offchainreporting3.TelemetryMessageSent.msg:type_name -> offchainreporting3.MessageWrapper + 5, // 12: offchainreporting3.TelemetryAssertionViolation.invalid_serialization:type_name -> offchainreporting3.TelemetryAssertionViolationInvalidSerialization + 11, // 13: offchainreporting3.TelemetryTransmissionScheduleComputed.schedule_delay_nanoseconds_per_node:type_name -> offchainreporting3.TelemetryTransmissionScheduleComputed.ScheduleDelayNanosecondsPerNodeEntry + 14, // [14:14] is the sub-list for method output_type + 14, // [14:14] is the sub-list for method input_type + 14, // [14:14] is the sub-list for extension type_name + 14, // [14:14] is the sub-list for extension extendee + 0, // [0:14] is the sub-list for field type_name } func init() { file_offchainreporting3_telemetry_proto_init() } @@ -804,6 +1313,54 @@ func file_offchainreporting3_telemetry_proto_init() { return nil } } + file_offchainreporting3_telemetry_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TelemetryTransmissionScheduleComputed); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_offchainreporting3_telemetry_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TelemetryTransmissionShouldAcceptAttestedReportComputed); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_offchainreporting3_telemetry_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TelemetryTransmissionShouldTransmitAcceptedReportComputed); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_offchainreporting3_telemetry_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TelemetryEpochStarted); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_offchainreporting3_telemetry_proto_msgTypes[0].OneofWrappers = []interface{}{ (*TelemetryWrapper_MessageReceived)(nil), @@ -811,6 +1368,10 @@ func file_offchainreporting3_telemetry_proto_init() { (*TelemetryWrapper_MessageSent)(nil), (*TelemetryWrapper_AssertionViolation)(nil), (*TelemetryWrapper_RoundStarted)(nil), + (*TelemetryWrapper_TransmissionScheduleComputed)(nil), + (*TelemetryWrapper_TransmissionShouldAcceptAttestedReportComputed)(nil), + (*TelemetryWrapper_TransmissionShouldTransmitAcceptedReportComputed)(nil), + (*TelemetryWrapper_EpochStarted)(nil), } file_offchainreporting3_telemetry_proto_msgTypes[4].OneofWrappers = []interface{}{ (*TelemetryAssertionViolation_InvalidSerialization)(nil), @@ -821,7 +1382,7 @@ func file_offchainreporting3_telemetry_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_offchainreporting3_telemetry_proto_rawDesc, NumEnums: 0, - NumMessages: 7, + NumMessages: 12, NumExtensions: 0, NumServices: 0, }, diff --git a/offchainreporting2plus/internal/ocr3/serialization/serialization.go b/offchainreporting2plus/internal/ocr3/serialization/serialization.go index 95eea53f..338aa884 100644 --- a/offchainreporting2plus/internal/ocr3/serialization/serialization.go +++ b/offchainreporting2plus/internal/ocr3/serialization/serialization.go @@ -142,6 +142,7 @@ func (tpm *toProtoMessage[RI]) messageWrapper(m protocol.Message[RI]) (*MessageW uint64(v.Epoch), v.SeqNr, v.Query, + v.Signature31, } msgWrapper.Msg = &MessageWrapper_MessageRoundStart{pm} case protocol.MessageObservation[RI]: @@ -171,6 +172,7 @@ func (tpm *toProtoMessage[RI]) messageWrapper(m protocol.Message[RI]) (*MessageW uint64(v.Epoch), v.SeqNr, pbasos, + v.Signature31, } msgWrapper.Msg = &MessageWrapper_MessageProposal{pm} case protocol.MessagePrepare[RI]: @@ -482,6 +484,7 @@ func (fpm *fromProtoMessage[RI]) messageProposal(m *MessageProposal) (protocol.M m.Epoch, m.SeqNr, asos, + m.Signature31, }, nil } @@ -647,6 +650,7 @@ func (fpm *fromProtoMessage[RI]) messageRoundStart(m *MessageRoundStart) (protoc m.Epoch, m.SeqNr, m.Query, + m.Signature31, }, nil } diff --git a/offchainreporting2plus/internal/shim/ocr2_telemetry_sender.go b/offchainreporting2plus/internal/shim/ocr2_telemetry_sender.go index 97789b7f..60e98994 100644 --- a/offchainreporting2plus/internal/shim/ocr2_telemetry_sender.go +++ b/offchainreporting2plus/internal/shim/ocr2_telemetry_sender.go @@ -10,13 +10,14 @@ import ( ) type OCR2TelemetrySender struct { - chTelemetry chan<- *serialization.TelemetryWrapper - logger commontypes.Logger - taper loghelper.LogarithmicTaper + chTelemetry chan<- *serialization.TelemetryWrapper + logger commontypes.Logger + taper loghelper.LogarithmicTaper + enableTransmissionTelemetry bool } -func NewOCR2TelemetrySender(chTelemetry chan<- *serialization.TelemetryWrapper, logger commontypes.Logger) *OCR2TelemetrySender { - return &OCR2TelemetrySender{chTelemetry, logger, loghelper.LogarithmicTaper{}} +func NewOCR2TelemetrySender(chTelemetry chan<- *serialization.TelemetryWrapper, logger commontypes.Logger, enableTransmissionTelemetry bool) *OCR2TelemetrySender { + return &OCR2TelemetrySender{chTelemetry, logger, loghelper.LogarithmicTaper{}, enableTransmissionTelemetry} } func (ts *OCR2TelemetrySender) send(t *serialization.TelemetryWrapper) { @@ -36,21 +37,107 @@ func (ts *OCR2TelemetrySender) send(t *serialization.TelemetryWrapper) { } } -func (ts *OCR2TelemetrySender) RoundStarted( +func (ts *OCR2TelemetrySender) EpochStarted( configDigest types.ConfigDigest, epoch uint32, - round uint8, leader commontypes.OracleID, ) { t := time.Now().UnixNano() ts.send(&serialization.TelemetryWrapper{ - Wrapped: &serialization.TelemetryWrapper_RoundStarted{&serialization.TelemetryRoundStarted{ + Wrapped: &serialization.TelemetryWrapper_EpochStarted{&serialization.TelemetryEpochStarted{ ConfigDigest: configDigest[:], Epoch: uint64(epoch), - Round: uint64(round), + Leader: uint64(leader), + }}, + UnixTimeNanoseconds: t, + }) +} + +func (ts *OCR2TelemetrySender) RoundStarted( + reportTimestamp types.ReportTimestamp, + leader commontypes.OracleID, +) { + t := time.Now().UnixNano() + ts.send(&serialization.TelemetryWrapper{ + Wrapped: &serialization.TelemetryWrapper_RoundStarted{&serialization.TelemetryRoundStarted{ + ConfigDigest: reportTimestamp.ConfigDigest[:], + Epoch: uint64(reportTimestamp.Epoch), + Round: uint64(reportTimestamp.Round), Leader: uint64(leader), Time: uint64(t), }}, UnixTimeNanoseconds: t, }) } + +func (ts *OCR2TelemetrySender) TransmissionScheduleComputed( + reportTimestamp types.ReportTimestamp, + now time.Time, + schedule map[commontypes.OracleID]time.Duration, +) { + if !ts.enableTransmissionTelemetry { + return + } + + t := time.Now().UnixNano() + + scheduleDelayNanosecondsPerNode := make(map[uint64]uint64, len(schedule)) + for oracle, delay := range schedule { + scheduleDelayNanosecondsPerNode[uint64(oracle)] = uint64(delay.Nanoseconds()) + } + + ts.send(&serialization.TelemetryWrapper{ + Wrapped: &serialization.TelemetryWrapper_TransmissionScheduleComputed{&serialization.TelemetryTransmissionScheduleComputed{ + ConfigDigest: reportTimestamp.ConfigDigest[:], + Epoch: uint64(reportTimestamp.Epoch), + Round: uint64(reportTimestamp.Round), + UnixTimeNanoseconds: uint64(now.UnixNano()), + ScheduleDelayNanosecondsPerNode: scheduleDelayNanosecondsPerNode, + }}, + UnixTimeNanoseconds: t, + }) +} + +func (ts *OCR2TelemetrySender) TransmissionShouldAcceptFinalizedReportComputed( + reportTimestamp types.ReportTimestamp, + result bool, + ok bool, +) { + if !ts.enableTransmissionTelemetry { + return + } + + t := time.Now().UnixNano() + ts.send(&serialization.TelemetryWrapper{ + Wrapped: &serialization.TelemetryWrapper_TransmissionShouldAcceptFinalizedReportComputed{&serialization.TelemetryTransmissionShouldAcceptFinalizedReportComputed{ + ConfigDigest: reportTimestamp.ConfigDigest[:], + Epoch: uint64(reportTimestamp.Epoch), + Round: uint64(reportTimestamp.Round), + Result: result, + Ok: ok, + }}, + UnixTimeNanoseconds: t, + }) +} + +func (ts *OCR2TelemetrySender) TransmissionShouldTransmitAcceptedReportComputed( + reportTimestamp types.ReportTimestamp, + result bool, + ok bool, +) { + if !ts.enableTransmissionTelemetry { + return + } + + t := time.Now().UnixNano() + ts.send(&serialization.TelemetryWrapper{ + Wrapped: &serialization.TelemetryWrapper_TransmissionShouldTransmitAcceptedReportComputed{&serialization.TelemetryTransmissionShouldTransmitAcceptedReportComputed{ + ConfigDigest: reportTimestamp.ConfigDigest[:], + Epoch: uint64(reportTimestamp.Epoch), + Round: uint64(reportTimestamp.Round), + Result: result, + Ok: ok, + }}, + UnixTimeNanoseconds: t, + }) +} diff --git a/offchainreporting2plus/internal/shim/ocr3_telemetry_sender.go b/offchainreporting2plus/internal/shim/ocr3_telemetry_sender.go index 6a8dd0a7..7d92fe65 100644 --- a/offchainreporting2plus/internal/shim/ocr3_telemetry_sender.go +++ b/offchainreporting2plus/internal/shim/ocr3_telemetry_sender.go @@ -10,13 +10,14 @@ import ( ) type OCR3TelemetrySender struct { - chTelemetry chan<- *serialization.TelemetryWrapper - logger commontypes.Logger - taper loghelper.LogarithmicTaper + chTelemetry chan<- *serialization.TelemetryWrapper + logger commontypes.Logger + taper loghelper.LogarithmicTaper + enableTransmissionTelemetry bool } -func NewOCR3TelemetrySender(chTelemetry chan<- *serialization.TelemetryWrapper, logger commontypes.Logger) *OCR3TelemetrySender { - return &OCR3TelemetrySender{chTelemetry, logger, loghelper.LogarithmicTaper{}} +func NewOCR3TelemetrySender(chTelemetry chan<- *serialization.TelemetryWrapper, logger commontypes.Logger, enableTransmissionTelemetry bool) *OCR3TelemetrySender { + return &OCR3TelemetrySender{chTelemetry, logger, loghelper.LogarithmicTaper{}, enableTransmissionTelemetry} } func (ts *OCR3TelemetrySender) send(t *serialization.TelemetryWrapper) { @@ -36,6 +37,22 @@ func (ts *OCR3TelemetrySender) send(t *serialization.TelemetryWrapper) { } } +func (ts *OCR3TelemetrySender) EpochStarted( + configDigest types.ConfigDigest, + epoch uint32, + leader commontypes.OracleID, +) { + t := time.Now().UnixNano() + ts.send(&serialization.TelemetryWrapper{ + Wrapped: &serialization.TelemetryWrapper_EpochStarted{&serialization.TelemetryEpochStarted{ + ConfigDigest: configDigest[:], + Epoch: uint64(epoch), + Leader: uint64(leader), + }}, + UnixTimeNanoseconds: t, + }) +} + func (ts *OCR3TelemetrySender) RoundStarted( configDigest types.ConfigDigest, epoch uint64, @@ -56,3 +73,80 @@ func (ts *OCR3TelemetrySender) RoundStarted( UnixTimeNanoseconds: t, }) } + +func (ts *OCR3TelemetrySender) TransmissionScheduleComputed( + configDigest types.ConfigDigest, + seqNr uint64, + index int, + now time.Time, + isOverride bool, + schedule map[commontypes.OracleID]time.Duration, + ok bool, +) { + if !ts.enableTransmissionTelemetry { + return + } + scheduleDelayNanosecondsPerNode := make(map[uint64]uint64, len(schedule)) + for oracle, delay := range schedule { + scheduleDelayNanosecondsPerNode[uint64(oracle)] = uint64(delay.Nanoseconds()) + } + t := time.Now().UnixNano() + ts.send(&serialization.TelemetryWrapper{ + Wrapped: &serialization.TelemetryWrapper_TransmissionScheduleComputed{&serialization.TelemetryTransmissionScheduleComputed{ + ConfigDigest: configDigest[:], + SeqNr: seqNr, + Index: uint64(index), + UnixTimeNanoseconds: uint64(now.UnixNano()), + IsOverride: isOverride, + ScheduleDelayNanosecondsPerNode: scheduleDelayNanosecondsPerNode, + Ok: ok, + }}, + UnixTimeNanoseconds: t, + }) +} + +func (ts *OCR3TelemetrySender) TransmissionShouldAcceptAttestedReportComputed( + configDigest types.ConfigDigest, + seqNr uint64, + index int, + result bool, + ok bool, +) { + if !ts.enableTransmissionTelemetry { + return + } + t := time.Now().UnixNano() + ts.send(&serialization.TelemetryWrapper{ + Wrapped: &serialization.TelemetryWrapper_TransmissionShouldAcceptAttestedReportComputed{&serialization.TelemetryTransmissionShouldAcceptAttestedReportComputed{ + ConfigDigest: configDigest[:], + SeqNr: seqNr, + Index: uint64(index), + Result: result, + Ok: ok, + }}, + UnixTimeNanoseconds: t, + }) +} + +func (ts *OCR3TelemetrySender) TransmissionShouldTransmitAcceptedReportComputed( + configDigest types.ConfigDigest, + seqNr uint64, + index int, + result bool, + ok bool, +) { + if !ts.enableTransmissionTelemetry { + return + } + t := time.Now().UnixNano() + ts.send(&serialization.TelemetryWrapper{ + Wrapped: &serialization.TelemetryWrapper_TransmissionShouldTransmitAcceptedReportComputed{&serialization.TelemetryTransmissionShouldTransmitAcceptedReportComputed{ + ConfigDigest: configDigest[:], + SeqNr: seqNr, + Index: uint64(index), + Result: result, + Ok: ok, + }}, + UnixTimeNanoseconds: t, + }) +} diff --git a/offchainreporting2plus/types/local_config.go b/offchainreporting2plus/types/local_config.go index 81576b87..05801a1c 100644 --- a/offchainreporting2plus/types/local_config.go +++ b/offchainreporting2plus/types/local_config.go @@ -77,6 +77,11 @@ type LocalConfig struct { // validation will be done on this value. MinOCR2MaxDurationQuery time.Duration + // If this is set, transmission telemetry will be sent in OCR protocol + // versions that support it. This feature is gated behind this variable + // to not cause a sudden increase in telemetry traffic. + EnableTransmissionTelemetry bool + // DANGER, this turns off all kinds of sanity checks. May be useful for testing. // Set this to EnableDangerousDevelopmentMode to turn on dev mode. DevelopmentMode string diff --git a/ragep2p/internal/mtls/common.go b/ragep2p/internal/mtls/common.go index 14c9f67f..d89d9000 100644 --- a/ragep2p/internal/mtls/common.go +++ b/ragep2p/internal/mtls/common.go @@ -19,8 +19,7 @@ func NewMinimalX509CertFromKeyring(keyring types.PeerKeyring) (tls.Certificate, } // x509 args are of type any, even though crypto.Signer is required - var signer crypto.Signer //nolint:gosimple - signer = &peerKeyringCryptoSignerAdapter{keyring} + var signer crypto.Signer = &peerKeyringCryptoSignerAdapter{keyring} encodedCert, err := x509.CreateCertificate(rand.Reader, &template, &template, signer.Public(), signer) if err != nil {