예제 #1
0
 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);
     }
 }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        public static (bool IsSuspicious, SuspicionData Information) GetSuspicionData(MemoryPoolTransaction tx)
        {
            var susInfo = GetSuspicionDegree(tx);

            return(susInfo.SuspicionData != default, susInfo.SuspicionData);
        }