private void Report(ReportType reportType, Address validator, long blockNumber, byte[] proof, object cause, CreateReportTransactionDelegate createReportTransactionDelegate) { try { if (_cache.AlreadyReported(reportType, validator, blockNumber, cause)) { if (_logger.IsDebug) { _logger.Debug($"Skipping report of {validator} at {blockNumber} with {cause} as its already reported."); } } else { if (!Validators.Contains(ValidatorContract.NodeAddress)) { if (_logger.IsTrace) { _logger.Trace($"Skipping reporting {reportType} misbehaviour (cause: {cause}) at block #{blockNumber} from {validator} as we are not validator"); } } else { if (_logger.IsTrace) { _logger.Trace($"Reporting {reportType} misbehaviour (cause: {cause}) at block #{blockNumber} from {validator}"); } var transaction = createReportTransactionDelegate(validator, blockNumber, proof); if (transaction != null) { var posdao = IsPosdao(blockNumber); var txSender = posdao ? _posdaoTxSender : _nonPosdaoTxSender; SendTransaction(reportType, txSender, transaction); if (_logger.IsWarn) { _logger.Warn($"Reported {reportType} validator {validator} misbehaviour (cause: {cause}) at block {blockNumber}"); } if (reportType == ReportType.Malicious) { Metrics.ReportedMaliciousMisbehaviour++; } else { Metrics.ReportedBenignMisbehaviour++; } } } } } catch (Exception e) { if (_logger.IsError) { _logger.Error($"Validator {validator} could not be reported on block {blockNumber} with cause {cause}", e); } } }
private void Report(string type, Address validator, long blockNumber, byte[] proof, string cause, CreateReportTransactionDelegate createReportTransactionDelegate) { try { if (!Validators.Contains(ValidatorContract.NodeAddress)) { if (_logger.IsTrace) { _logger.Trace($"Skipping reporting {type} misbehaviour (cause: {cause}) at block #{blockNumber} from {validator} as we are not validator"); } } else { if (_logger.IsTrace) { _logger.Trace($"Reporting {type} misbehaviour (cause: {cause}) at block #{blockNumber} from {validator}"); } var transaction = createReportTransactionDelegate(validator, blockNumber, proof); if (transaction != null) { var posdao = IsPosdao(blockNumber); var txSender = posdao ? _posdaoTxSender : _nonPosdaoTxSender; SendTransaction(txSender, transaction); if (_logger.IsWarn) { _logger.Warn($"Reported {type} validator {validator} misbehaviour (cause: {cause}) at block {blockNumber}"); } } } } catch (Exception e) { if (_logger.IsError) { _logger.Error($"Validator {validator} could not be reported on block {blockNumber} with cause {cause}", e); } } }