地址核查
USDT 黑名单查询:不用付费工具自己查地址有没有被冻结
isBlackListed 是 USDT 合约自带的只读函数,谁都能调,不花钱。难的不是查,是确认自己没查错——绝大多数地址都返回 false,操作填错了也返回 false。用一个已知被拉黑的地址做对照,你才知道差别在哪。以太坊和波场的对照样本不一样,这一点很多人栽在上面。
你可能正遇到两种情况之一:准备收一笔 USDT,想先确认对方地址有没有问题;或者钱已经到账,心里不踏实,想知道这笔 U 能不能正常转出去。
搜"黑U检测"会跳出一堆收费服务,几十到几百块查一次。但 USDT 合约本身就带着一个公开的只读函数,谁都能免费调用,输入地址就返回它是否已被发行方拉黑。这篇把查法从头讲一遍,包括怎么先做一次对照测试,确认自己没操作错。
冻结这件事是谁在做
先纠正一个常见误解:冻结 USDT 的不是链,不是你的钱包,也不是交易所。
USDT 是 Tether 公司发行的代币,同时部署在以太坊、波场等多条链上。每条链上都有一份独立的 USDT 合约,合约的管理权限在发行方手里。所谓"地址被冻结",准确说是发行方调用了合约里的拉黑函数,把某个地址加进合约自带的黑名单。进了这个名单,该地址上的 USDT 就转不出去。
链本身不管这件事。波场不会因为一个地址被拉黑就拒绝它的其他交易,该地址照样能转 TRX、能转别的代币,只有 USDT 动不了。
所以查询对象很明确:某条链上的 USDT 合约,有没有把这个地址标成黑名单。
两个主合约地址,你可以自己核对:
- 以太坊(ERC20):
0xdAC17F958D2ee523a2206206994597C13D831ec7 - 波场(TRC20):
TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t
合约里的那个函数叫 isBlackListed
把 TRC20 USDT 合约的接口列表拉出来,和黑名单相关的有这么几个:
| 函数 | 作用 | 谁能调用 |
|---|---|---|
isBlackListed(address) |
返回该地址是否在黑名单里 | 任何人,只读 |
getBlackListStatus(address) |
同上,另一个入口 | 任何人,只读 |
addBlackList(address) |
把地址加入黑名单 | 仅合约管理者 |
removeBlackList(address) |
把地址移出黑名单 | 仅合约管理者 |
destroyBlackFunds(address) |
销毁黑名单地址上的余额 | 仅合约管理者 |
关键在第一行。isBlackListed 是只读函数,不消耗手续费,不需要连钱包,不需要任何授权,任何人可以对任何地址调用。那些收费的检测服务,基础能力之一就是替你调这个函数。
顺带一个细节:addBlackList 的参数名在合约里字面写作 _evilUser。这是发行方自己写在代码里的命名,你在区块链浏览器的合约代码页可以直接看到。
在 Tronscan 上查 TRC20 地址
波场上的 USDT 用得最多,先说这条链。
- 打开 Tronscan,搜索框输入合约地址
TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t,进入合约页面。 - 找到
Contract标签页,下面有Read Contract这一栏。 - 在函数列表里找到
isBlackListed。 - 参数框填你要查的地址,点查询。
- 返回
true表示该地址已被拉黑,false表示当前不在黑名单里。
整个过程不需要登录,不需要连钱包,不花手续费。
在 Etherscan 上查 ERC20 地址
以太坊上流程一样:
- 打开 Etherscan,搜索
0xdAC17F958D2ee523a2206206994597C13D831ec7进入合约页。 - 点
Contract标签,再点Read Contract。 - 找到
isBlackListed,填入地址,点 Query。 - 同样返回 true 或 false。

函数名后面括号里那串就是调用编码,比如图里 decimals 后面的 0x313ce567。往下翻能找到 isBlackListed,它的编码是 0xe47d6060。
先做一次对照测试,确认自己没查错
这一步很多人跳过,但它能帮你避免一类很隐蔽的错误。
问题在于:绝大多数地址查出来都是 false。如果你操作方式有误,比如填错了输入框、点的是别的函数、地址复制时少了一位,返回的也可能是 false,而你会误以为"查过了,没问题"。
解决办法是先拿一个已知在黑名单里的地址试一次,确认你能查出 true,再去查你真正关心的地址。
以太坊上有个现成的样本,就是全零地址 0x0000000000000000000000000000000000000000,在以太坊 USDT 合约上查它,isBlackListed 返回 true。这个地址不牵涉任何人,拿来当对照很合适。
注意,这个样本只在以太坊上成立。同样查零地址,波场的 USDT 合约返回的是 false。所以如果你在 Tronscan 上查零地址得到 false,那是正常的,不代表你操作错了——别被这一步误导。
波场上该怎么找对照样本?直接拉合约最近的拉黑记录,随便取一个地址当样本。把下面这串粘进浏览器地址栏就行:
https://api.trongrid.io/v1/contracts/TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t/events?event_name=AddedBlackList&limit=5
返回的 JSON 长这样:

每条记录里 _user 就是一个刚被拉黑的地址。拿它去 Tronscan 上查 isBlackListed,应该返回 true。这个办法不依赖任何写死的地址,永远有效。
想批量查或者写进脚本
以太坊侧直接调用公开节点,不需要注册也不需要 API key:
curl -s -X POST https://ethereum-rpc.publicnode.com \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0xdAC17F958D2ee523a2206206994597C13D831ec7","data":"0xe47d6060000000000000000000000000ADDRESS"},"latest"]}'
把 ADDRESS 换成你要查的地址,去掉开头的 0x,保留 40 位十六进制。
其中 0xe47d6060 是 isBlackListed(address) 函数签名的前四个字节,后面跟 24 个 0 是把 20 字节地址补齐到 32 字节。
返回结果末位是 1 表示在黑名单里,末位是 0 表示不在。
波场侧用 TronGrid 的只读调用接口:
curl -s -X POST https://api.trongrid.io/wallet/triggerconstantcontract \
-H 'Content-Type: application/json' \
-d '{"owner_address":"TNUC9Qb1rRpS5CbWLmNMxXBjyFoydXjWFR","contract_address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t","function_selector":"isBlackListed(address)","parameter":"000000000000000000000000ADDRESS","visible":true}'
parameter 里填 24 个 0 加上目标地址的十六进制形式(波场地址需要先转成 hex,Tronscan 的地址页面上能看到对应的 hex 格式)。owner_address 填任意有效地址即可,只读调用不消耗任何资源。
返回的 constant_result 末位是 1 表示在黑名单里,0 表示不在。
要查多个地址,就把上面的请求放进循环,每次替换地址。两侧的接口都没有严格的频率限制,但批量跑的时候建议每次请求之间留一点间隔。
其他链上的 USDT 要用各自的合约地址查。BNB Chain、Polygon、Arbitrum 上都有 USDT,合约地址各不相同,黑名单也各自独立。合约地址的核对方法写在"假 USDT 怎么认"。
卡在某一步的话
函数列表里翻不到 isBlackListed
这份合约有四十多个函数,列表很长而且不是按字母排的。用浏览器的页面内查找(Ctrl+F / Cmd+F)搜函数名,比用眼睛找快得多。另外确认你点的是 Read Contract(只读)那一栏——写入那一栏里没有它。
页面上没有 Read Contract 这个标签
八成是进错页面了:你要打开的是合约地址的页面,不是某个普通钱包地址的页面。普通地址没有合约标签页。回去确认搜索框里填的是文中那两个合约地址之一。
查 USDC 的时候找不到函数
USDC 是代理合约,要点 Read as Proxy 而不是 Read Contract,而且它的函数名拼写也不一样(isBlacklisted,小写 l)。详见"USDC 黑名单怎么查"。
填了地址点查询,没反应或者报错
先检查地址有没有带上多余的空格或换行——从聊天软件复制过来经常会带。波场地址应该是 T 开头 34 位,以太坊是 0x 开头 42 位,长度对不上就是复制漏了。
返回的不是 true/false,是一串 0
那你多半是在用接口而不是网页界面。末位是 1 就是 true,末位是 0 就是 false,全零就是没被拉黑。
波场那边要不要填十六进制地址
网页界面上直接填 T 开头的地址就行;只有走 API 时才需要 hex 格式,在 Tronscan 的地址页面上能看到该地址对应的 hex 写法。
查错对象,比查错方法更常见
比操作卡住更常见的是查了不该查的那个地址,结果毫无意义却以为自己查过了。
要收款时,该查的是对方的付款地址,不是他给你看的任何其他地址,也不是你自己的收款地址。如果对方只肯给你一个"公司账户"或者拒绝说明从哪个地址转出,这本身就是信号。
已经收到钱之后,该查的是你自己的收款地址。这时候查对方地址意义不大了——钱已经在你这儿,你要确认的是自己这个地址现在什么状态。
查交易所给你的充值地址,基本没意义。那是交易所控制的地址,它不会被拉黑(真被拉黑是交易所的大事故)。你充进去的钱有没有问题,由交易所内部风控判断,和链上黑名单是两套系统,写在"黑U检测工具能查到什么"。
查错链等于没查。对方从波场转给你,你却在 Etherscan 上查——那是两份互不相干的合约,各有各的黑名单。先确认这笔转账走的是哪条链,再去对应的浏览器查。
查出 false,不等于这笔钱干净
这是全篇最需要记住的一句话。isBlackListed 返回 false,只说明一件很窄的事:此刻,发行方没有在这条链的这份合约上拉黑这个地址。
它不能告诉你以下任何一件事。
一是资金来源是否合法。钱可能来自案件,只是还没走到链上拉黑那一步。链上拉黑通常发生在执法机关介入之后,中间往往隔着不短的时间差。你今天查是 false,不代表下个月还是 false。
二是交易所会不会认。交易所有自己的风控系统和外部数据源,你充进去的 U 即使链上查是 false,也可能被交易所内部标记,导致充值受限或者提币时要求补充材料。
三是风控公司怎么评级。链上黑名单只有"在"和"不在"两个状态,而专业风控数据商会给出多档风险分,还会计算这个地址与已知涉案地址之间隔了几跳。这两套东西不是一回事,量级差很远。
四是别的链什么情况。每条链上的 USDT 是独立合约,各有独立的黑名单。在以太坊查出 false,不代表同一串地址在波场上也是 false。
归结成一句:链上黑名单是一个滞后的、最终态的信号。它为真的时候基本可以确定有问题,为假的时候什么都证明不了。
查出 true 之后怎么办
如果是你要收款的对方地址查出 true,答案很简单:别收。这个地址上的 USDT 转不出来,对方根本没办法完成这笔转账,坚持要你先付款的话,问题更大。
如果是你自己的地址查出 true,情况要复杂得多。先看"被冻结的 USDT 会不会归零"——余额被直接清零的事每隔几天就在发生,所以"先放着等解冻"不是一个选项。接下来该做什么,按"USDT 被冻结怎么办"里的清单走。
顺带说清一件容易混的事:地址为什么会被盯上、风控评分怎么算,是另一套机制,和链上黑名单没有从属关系。评分高不代表会被拉黑,这里查出 false 也不代表交易所会放行。两边都要看,但不能拿一边的结论去推另一边。