(ctx sdk.Context, blockTime time.Time, limit uint32)
| 185 | } |
| 186 | |
| 187 | func (k *keeper) processDiscrepancyTimeoutQueue(ctx sdk.Context, blockTime time.Time, limit uint32) error { |
| 188 | return k.processDueQueue(ctx, prefixQueueDiscrepancyTimeout, blockTime, limit, func(key []byte, timeout time.Time) error { |
| 189 | id, err := decodeIDQueueKey(key) |
| 190 | if err != nil { |
| 191 | return err |
| 192 | } |
| 193 | |
| 194 | discrepancy, found := k.GetDiscrepancy(ctx, id) |
| 195 | if !found || discrepancy.ResolutionStatus != vtypes.DiscrepancyStatusPending { |
| 196 | return nil |
| 197 | } |
| 198 | expectedTimeout := discrepancy.Timestamp.Add(k.GetParams(ctx).DiscrepancyResolutionTimeout) |
| 199 | if !expectedTimeout.Equal(timeout) { |
| 200 | return nil |
| 201 | } |
| 202 | |
| 203 | result := SettlementResult{ |
| 204 | FeeStatus: vtypes.FeeStatusReturnedToProvider, |
| 205 | DepositStatus: vtypes.DepositStatusSlashed, |
| 206 | } |
| 207 | if err = k.timeoutDiscrepancyAttestation(ctx, discrepancy.Provider, discrepancy.AuditorA, result); err != nil { |
| 208 | return err |
| 209 | } |
| 210 | if err = k.timeoutDiscrepancyAttestation(ctx, discrepancy.Provider, discrepancy.AuditorB, result); err != nil { |
| 211 | return err |
| 212 | } |
| 213 | |
| 214 | auditorA, err := sdk.AccAddressFromBech32(discrepancy.AuditorA) |
| 215 | if err != nil { |
| 216 | return err |
| 217 | } |
| 218 | auditorB, err := sdk.AccAddressFromBech32(discrepancy.AuditorB) |
| 219 | if err != nil { |
| 220 | return err |
| 221 | } |
| 222 | |
| 223 | discrepancy.ResolutionStatus = vtypes.DiscrepancyStatusTimedOut |
| 224 | discrepancy.FaultAttribution = vtypes.FaultAttributionInconclusive |
| 225 | k.SetDiscrepancy(ctx, discrepancy) |
| 226 | |
| 227 | if err = k.resolveDiscrepancyAuditorBond(ctx, auditorA, discrepancy.ID, false); err != nil { |
| 228 | return err |
| 229 | } |
| 230 | if err = k.resolveDiscrepancyAuditorBond(ctx, auditorB, discrepancy.ID, false); err != nil { |
| 231 | return err |
| 232 | } |
| 233 | return ctx.EventManager().EmitTypedEvent(&vtypes.EventDiscrepancyTimedOut{ |
| 234 | DiscrepancyID: discrepancy.ID, |
| 235 | AuditorA: discrepancy.AuditorA, |
| 236 | AuditorB: discrepancy.AuditorB, |
| 237 | }) |
| 238 | }) |
| 239 | } |
| 240 | |
| 241 | func (k *keeper) timeoutDiscrepancyAttestation(ctx sdk.Context, providerString, auditorString string, result SettlementResult) error { |
| 242 | provider, err := sdk.AccAddressFromBech32(providerString) |
no test coverage detected