@@ -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