Skip to content

Commit 2be5f8d

Browse files
committed
feat: add Address type
1 parent bc765bf commit 2be5f8d

File tree

3 files changed

+45
-11
lines changed

3 files changed

+45
-11
lines changed

src/AElfScanServer.Worker.Core/Dtos/TransferEventDto.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ public enum TransferType
2929
public enum AddressClassification
3030
{
3131
Normal,
32-
Blacklist
32+
Blacklist,
33+
ToOnlyMonitored,
34+
LargeAmountOnly
3335
}
3436

3537
/// <summary>

src/AElfScanServer.Worker.Core/Options/TokenTransferMonitoringOptions.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,21 @@ public class TokenTransferMonitoringOptions
1919
/// </summary>
2020
public List<string> BlacklistAddresses { get; set; } = new();
2121

22+
/// <summary>
23+
/// Addresses that are only monitored when they are recipients (to addresses)
24+
/// </summary>
25+
public List<string> ToOnlyMonitoredAddresses { get; set; } = new();
26+
27+
/// <summary>
28+
/// Addresses that are only monitored for large amount transfers
29+
/// </summary>
30+
public List<string> LargeAmountOnlyAddresses { get; set; } = new();
31+
32+
2233
/// <summary>
2334
/// List of tokens to monitor
2435
/// </summary>
25-
public List<string> MonitoredTokens { get; set; } = new() { "ELF", "USDT", "BTC", "ETH" };
36+
public List<string> MonitoredTokens { get; set; } = new() { "ELF", "USDT" };
2637

2738
/// <summary>
2839
/// Scan configuration

src/AElfScanServer.Worker.Core/Service/TokenTransferMonitoringService.cs

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ public class TokenTransferMonitoringService : ITokenTransferMonitoringService, I
3737
private readonly Histogram<double> _transferEventsHistogram;
3838
private readonly Counter<long> _transferCountsCounter;
3939
private readonly HashSet<string> _blacklistAddresses;
40+
private readonly HashSet<string> _toOnlyMonitoredAddresses;
41+
private readonly HashSet<string> _largeAmountOnlyAddresses;
4042
private readonly IOptionsMonitor<TokenTransferMonitoringOptions> _optionsMonitor;
4143

4244
public TokenTransferMonitoringService(
@@ -59,10 +61,12 @@ public TokenTransferMonitoringService(
5961

6062
// Initialize address sets for fast lookup
6163
_blacklistAddresses = new HashSet<string>(_options.BlacklistAddresses, StringComparer.OrdinalIgnoreCase);
64+
_toOnlyMonitoredAddresses = new HashSet<string>(_options.ToOnlyMonitoredAddresses, StringComparer.OrdinalIgnoreCase);
65+
_largeAmountOnlyAddresses = new HashSet<string>(_options.LargeAmountOnlyAddresses, StringComparer.OrdinalIgnoreCase);
6266
// Initialize histogram with configured buckets
6367
_transferEventsHistogram = instrumentationProvider.Meter.CreateHistogram<double>(
64-
"aelf_transfer_events",
65-
"ms",
68+
"aelf_transfer_usd_value",
69+
"usd",
6670
"Token transfer events with amount distribution");
6771

6872
// Initialize counter for transfer counts
@@ -190,6 +194,10 @@ public async Task<List<TransferEventDto>> GetTransfersAsync(string chainId)
190194
transfer.UsdValue = Math.Round(transfer.Amount * price, CommonConstant.UsdValueDecimals);
191195
}
192196

197+
// Reclassify addresses with USD value context
198+
transfer.FromAddressType = ClassifyAddress(transfer.FromAddress, false, transfer.UsdValue);
199+
transfer.ToAddressType = ClassifyAddress(transfer.ToAddress, true, transfer.UsdValue);
200+
193201
// Add all transfers (filtering will be done in SendTransferMetrics)
194202
transfers.Add(transfer);
195203
}
@@ -336,7 +344,7 @@ public void SendTransferMetrics(TransferEventDto transfer)
336344
}
337345
else
338346
{
339-
_logger.LogDebug("Sent counter metrics only for transaction {TransactionId}, amount {Amount} {Symbol}, USD value {UsdValue} below histogram threshold",
347+
_logger.LogInformation("Sent counter metrics only for transaction {TransactionId}, amount {Amount} {Symbol}, USD value {UsdValue} below histogram threshold",
340348
transfer.TransactionId, transfer.Amount, transfer.Symbol, transfer.UsdValue);
341349
}
342350
}
@@ -360,16 +368,29 @@ private TransferEventDto ConvertToTransferEventDto(TokenTransferInfoDto dto)
360368
ToAddress = dto.To?.Address ?? "",
361369
Amount = dto.Quantity,
362370
Type = ParseTransferType(dto.Method),
363-
FromAddressType = ClassifyAddress(dto.From?.Address ?? ""),
364-
ToAddressType = ClassifyAddress(dto.To?.Address ?? "")
371+
FromAddressType = ClassifyAddress(dto.From?.Address ?? "", false, 0m),
372+
ToAddressType = ClassifyAddress(dto.To?.Address ?? "", true, 0m)
365373
};
366374
}
367375

368-
private AddressClassification ClassifyAddress(string address)
376+
private AddressClassification ClassifyAddress(string address, bool isToAddress = false, decimal usdValue = 0m)
369377
{
370-
return _blacklistAddresses.Contains(address)
371-
? AddressClassification.Blacklist
372-
: AddressClassification.Normal;
378+
if (string.IsNullOrEmpty(address))
379+
return AddressClassification.Normal;
380+
381+
// Check blacklist first (highest priority)
382+
if (_blacklistAddresses.Contains(address))
383+
return AddressClassification.Blacklist;
384+
385+
// Check ToOnlyMonitored addresses (only when it's a recipient address)
386+
if (isToAddress && _toOnlyMonitoredAddresses.Contains(address))
387+
return AddressClassification.ToOnlyMonitored;
388+
389+
// Check LargeAmountOnly addresses (only for large transfers)
390+
if (_largeAmountOnlyAddresses.Contains(address) )
391+
return AddressClassification.LargeAmountOnly;
392+
393+
return AddressClassification.Normal;
373394
}
374395

375396
private static TransferType ParseTransferType(string method)

0 commit comments

Comments
 (0)