1
1
import { Icons } from '@masknet/icons'
2
2
import type { Plugin } from '@masknet/plugin-infra'
3
3
import { makeStyles , ShadowRootPopper } from '@masknet/theme'
4
+ import { GoPlusLabs } from '@masknet/web3-providers'
4
5
import { isValidAddress } from '@masknet/web3-shared-evm'
5
6
import { isValidAddress as isSolAddress } from '@masknet/web3-shared-solana'
6
7
import { useQuery } from '@tanstack/react-query'
7
8
import { Fragment , memo , useMemo } from 'react'
8
- import { EVM_ADDRESS , SOLANA_ADDRESS } from '../../constants.js'
9
+ import { EVM_ADDRESS , SecurityProvider , SOLANA_ADDRESS , TRON_ADDRESS } from '../../constants.js'
9
10
import { PluginScamRPC } from '../../messages.js'
11
+ import { isTronAddress } from '../../utils.js'
10
12
import { usePopoverControl } from './usePopoverControl.js'
11
13
import { WarningCard } from './WarningCard.js'
12
14
@@ -37,15 +39,26 @@ interface AddressTagProps {
37
39
const AddressTag = memo < AddressTagProps > ( function AddressTag ( { address, text } ) {
38
40
const { classes } = useStyles ( )
39
41
const { open, anchorEl, iconRef, onMouseEnter, onMouseLeave } = usePopoverControl ( )
40
- const { data : isScam } = useQuery ( {
42
+ const { data } = useQuery ( {
41
43
queryKey : [ 'detect-address' , address ] ,
42
- queryFn : ( ) => {
43
- if ( isValidAddress ( address ) ) return PluginScamRPC . checkAddress ( address )
44
- if ( isSolAddress ( address ) ) return false
45
- return false
44
+ queryFn : async ( ) => {
45
+ if ( isValidAddress ( address ) ) {
46
+ return { isScam : await PluginScamRPC . checkAddress ( address ) , provider : SecurityProvider . ScamSniffer }
47
+ }
48
+ if ( isSolAddress ( address ) )
49
+ return {
50
+ isScam : await GoPlusLabs . checkIfAddressIsScam ( 'solana' , address ) ,
51
+ provider : SecurityProvider . GoPlus ,
52
+ }
53
+ if ( isTronAddress ( address ) )
54
+ return {
55
+ isScam : GoPlusLabs . checkIfAddressIsScam ( 'tron' , address ) ,
56
+ provider : SecurityProvider . GoPlus ,
57
+ }
58
+ return { isScam : false , provider : null }
46
59
} ,
47
60
} )
48
- if ( ! isScam ) return text
61
+ if ( ! data ?. isScam ) return text
49
62
return (
50
63
< span className = { classes . text } >
51
64
< Icons . Danger
@@ -59,6 +72,7 @@ const AddressTag = memo<AddressTagProps>(function AddressTag({ address, text })
59
72
< ShadowRootPopper open = { open } anchorEl = { anchorEl } >
60
73
< WarningCard
61
74
address = { address }
75
+ securityProvider = { data . provider ! }
62
76
onMouseEnter = { onMouseEnter }
63
77
onMouseLeave = { onMouseLeave }
64
78
onClick = { ( e ) => e . stopPropagation ( ) }
@@ -77,7 +91,8 @@ export const TextModifier = memo<TextModifierProps>(function TextModifier({ fall
77
91
const addresses = useMemo ( ( ) => {
78
92
const evmAddresses = fullText . match ( EVM_ADDRESS ) || [ ]
79
93
const solAddresses = fullText . match ( SOLANA_ADDRESS ) || [ ]
80
- return [ ...evmAddresses , ...solAddresses ]
94
+ const tronAddresses = fullText . match ( TRON_ADDRESS ) || [ ]
95
+ return [ ...evmAddresses , ...solAddresses , ...tronAddresses ]
81
96
} , [ fullText ] )
82
97
83
98
const segments = useMemo ( ( ) => {
0 commit comments