private async Task AnalyzeTransaction(MemoryPoolTransaction t) { try { var(isSuspicious, susInfo) = MoneroTransactionIdentifier.GetSuspicionData(t); if (isSuspicious) { var message = MoneroTransactionIdentifier.GenerateMessage(susInfo); _logger.LogInformation(message); await _twitterPoster.PostAsync(message).ConfigureAwait(false); } } catch (Exception e) { Console.WriteLine(e); } }
private static ViolationData GetViolationData(MemoryPoolTransaction tx, MemoryPoolTransactionJsonDecoding json) { ViolationData vd = new(); if (tx.DoubleSpendSeen) { vd.IsDoubleSpend = true; } if (json.UnlockTime >= SuspicionThresholds.UnlockTime) { vd.UnlockTimeViolation = true; } if (json.RingSignature.Fee >= SuspicionThresholds.Fee) { vd.FeeViolation = true; } int bitCpunt = json.Extra.Count * 8; if (bitCpunt >= 500) { vd.NonDefaultExtraField = true; } return(vd); }
private static (SuspicionDegree Degree, SuspicionData SuspicionData) GetSuspicionDegree(MemoryPoolTransaction tx) { // Lets drill down into the information... var json = JsonSerializer.Deserialize <MemoryPoolTransactionJsonDecoding>(tx.AsJson, null); var vd = GetViolationData(tx, json); uint score = GetViolationScore(vd); var degree = SuspicionDegreeCalculator.GetSuspicionDegree(score); SuspicionData suspicionData = null; bool isSuspicious = IsSuspicious(degree); if (isSuspicious) { suspicionData = new SuspicionData(tx.TxHash, degree) { ViolationData = vd, UnlockTime = json.UnlockTime, Fee = json.RingSignature.Fee, } } ; return(degree, suspicionData); }
public static (bool IsSuspicious, SuspicionData Information) GetSuspicionData(MemoryPoolTransaction tx) { var susInfo = GetSuspicionDegree(tx); return(susInfo.SuspicionData != default, susInfo.SuspicionData); }