Beispiel #1
0
        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);
                }
            }
        }
Beispiel #2
0
        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);
                }
            }
        }