地址风险评分是怎么打出来的:公开的只有一份名单
实测今天的美财政部名单:19,484 条记录里 109 条带币地址、共 1,075 行——其中一行根本不是地址,七行指向错误网络。评分能证明什么、不能证明什么。
2026 年 10 月 30 日,我把美国财政部的 OFAC 制裁名单文件拉了下来:29,271,441 字节,发布日 10 月 28 日,19,484 条记录。然后我数了一下,其中带加密货币地址的有多少条。答案是 109 条,占全名单的 0.56%。这 109 条里共有 1,075 行地址、1,058 个不重复字符串,横跨 20 个币种,从比特币到门罗,还有一条 Arbitrum 地址。你见过的每一个「地址风险评分」,都从这样一份文件开始。几乎没人告诉你的是:可核实的那一段有多短。
公开的那一半是一份名单,而且比你想象的小
这就是公开部分的全部,今早实测。比特币:534 行、65 个被列名主体,其中 209 个是 1 开头的 legacy 地址、178 个是 3 开头的 P2SH、146 个是 bc1 开头的 bech32,还有 1 行连自己的校验和都过不了。波场:266 行、40 个主体。以太坊:124 行、48 个主体。USDT:94 行、20 个主体。然后是莱特 14、门罗 11、BCH 7、Dash 5、Zcash 4、Solana 4、USDC 2、狗狗 2,以及 BTG、ETC、BSV、XVG、XRP、ARB、BSC、BNB 各 1 条。制裁项目的分布同样偏得厉害:534 行比特币里有 332 行挂在 CYBER2 下,波场分在 SDGT(167 行)和 FTO(131 行),而 11 行门罗只属于 4 个主体——PARSARAD 占 5 条、ISIL KHORASAN 3 条、SOUTHFRONT 2 条、KARASAVIDI 1 条。整个公开层就这些。不是评分,是名册。 (BCH 换 XMR 指南)
为什么门罗只有 11 行,比特币有 534 行
这不是官僚偏好,是图的算术。一个比特币地址值得上榜,因为它可以被聚类:把一个地址绑到某个人身上,共同输入启发式就会把与它共同花过币的地址一起拖出来,所以一个主体能覆盖几十行。整份名单里,每个比特币主体平均 8.2 行,每个门罗主体平均 2.75 行。而在门罗这边,一个被列出的地址只有在你已经从链外知道它时才有用:交易所的提币日志、被查扣的笔记本、论坛帖子、厂商自己的报告。环签名让一笔花费的输入无法归属,隐藏金额让价值流向根本读不出来。所以名册薄,不是因为门罗更干净,而是因为「名单上的一个名字」在这里变不成一个簇。
这份名单并不干净,其中两个错误特别要紧
11 行门罗里有 1 行根本不是门罗地址:64 个十六进制字符,5be5543ff734…e456c320,那是交易哈希的形状,不是钱包产出的 95 字符 base58 串。11 个里 10 个是真地址,而这第 11 个的意义在于:任何「先校验格式、再比对名单」的筛子会静默丢掉这一行,而且不会告诉你。第二个错误:94 行 USDT 里,79 行是波场地址(T 加 33 位)、8 行是以太坊(0x 加 40 位十六进制)、还有 7 行是比特币地址——1KUUJPky…、1CF46Rfb…、3LtcaPbC…,那是 USDT 还在 Omni Layer 上时的形态。按 ticker 而不是按网络打标签,这 7 行就指向了错误的网络。另外还有 14 个地址在不止一行里重复出现。这些都不算丑闻,任何一份靠手工维护、追着一个移动目标跑的名单,几年后都是这个样子。 (XMR 换 USDT 退出路线)
「评分」这个词真正活着的,是另外两层
商业风险评分通常被描述成三层输入:归属、暴露、行为。归属就是上面的聚类——哪些地址属于同一个行为体、这个行为体是谁。暴露是距离:你入金的币与某个已被标记的对象之间隔了几跳,并按金额与时间加权。行为是模式:每跳把 90% 往前推的「剥洋葱链」、入金前突然合并许多小额输入、正常商业里根本不出现的整数金额。三层里只有第一层有公开可下载的标准答案,而且它是二值的——在名单上或不在。另外两层产出的是 0 到 100 之间的一个数,阈值属于厂商配置,不属于法律。这也是最容易被误读的地方:高分不是指控,低分不是清白证明;两者都是别人的模型输出,而模型不给你看。
我们自己这一层实际在校验什么:实测
我把站内的地址校验器编译成纯 JavaScript,然后把名单上 1,075 行全部按名单标注的链跑了一遍。11 行门罗里 10 行通过,第 11 行就是那串 64 字符、根本不是地址的东西。534 行比特币通过 533 行。266 行波场全过,124 行以太坊全过,79 行波场 USDT 与 8 行以太坊 USDT 也全过。4 行 Zcash、4 行 Solana 都通过了形状检查。14 行莱特币按比特币格式跑是 0 通过,更糟的是在莱特币这条走廊上它压根不校验:校验器里没有 ltc 分支,遇到不认识的资产直接返回 ok 而不是去猜。所以算术很简单:一个被制裁的地址几乎总能走完我们的格式检查,因为校验和不是名单。真正的比对在上游那一层,可见的症状也不是弹窗,而是一笔卡在 confirming、同时有人在读报告的单子。 (SOL 换 XMR 指南)
筛查这一层,最后是算在价差里的
这些都不是免费的,账单就写在报价里。2026 年 10 月 30 日 14:03–14:04 UTC,在 74 条网络、513 个资产的目录上,USDT-TRC20 换门罗的价格是这样:100 个单位给 0.14949272 XMR,折 668.93 美元/XMR,而现货是 586.41,贵 14.1%。1,000 给 1.65779448,折 603.21,贵 2.9%。10,000 给 16.73603189,折 597.51,贵 1.9%。168,000(接近天花板)给 281.16413042,仍是 597.51。下限 19.316279,上限 167,896.433875——而 19 秒后同一个接口报出 168,360.583786,因为上限是从池子的实时额度推出来的,不是存下来的常数。注意这条曲线的意思:过了大约 10,000 个单位,加钱也买不到更好的汇率,说明你付的那部分价差是「每单固定」的。筛查就坐在这个固定项里,和入金网络费、池子自己的保证金一起。以上所有数字都是写作时点的快照,实时报价以页面为准。 (XMR 换 USDT 退出路线)
六项你能自己跑的检查,按这个顺序
1)去拉文件,别去读二手描述。文件在 sanctionslistservice.ofac.treas.gov 的 /api/PublicationPreview/exports/SDN.XML,今天是 29 MB。用完整地址 grep,注意大小写;前缀匹配基本抓不到有意义的命中。2)按链匹配,不按 ticker 匹配。那份文件里有 7 行 USDT 其实是比特币地址,只认波场的匹配器会静默跳过它们。3)先校验格式再比对,并且把「丢掉了一行」也记进日志——11 行门罗里有 1 行根本不是地址,静默丢弃和干净的零命中看起来一模一样。4)看制裁项目,不只看命中:比特币行上的 CYBER2 和波场行上的 SDGT 是两种完全不同的对话,而波场行挂在 FTO 下,是制裁问题而不是暗网市场问题。5)不要把「不在名单上」翻译成「低风险」。这份名单是二值的,只覆盖自己 0.56% 的记录;暴露评分是另一个产品、另一套输入,而两者都看不到门罗余额。6)留好你自己的收据:订单号、入金哈希、金额、时间戳。真有一天某个分数把你挡住了,这张收据是唯一能推动案子的东西,而任何客服事后都重建不出来。 (XMR 换 USDT 退出路线)
如果真有一个分数把你挡住了
评分里没有申诉窗口,因为没有一个可以申诉的对手方:这个数字由一家你与之没有合同的厂商产出,被一个你同样没有合同的池子消费。你能控制的是失败的形状。留住入金哈希、订单号,并确认退款地址是你自己掌握私钥的钱包、且与你发出的资产在同一条网络上——退款只回原资产、原网络,过期后往同一地址再发一笔,什么也修不好,只会多一笔无法解释的入账。如果你的生意依赖这一层,那就自己按固定节奏在发款前查名单,并把文件的发布日和结果记在一起。「我们筛查过了」这句话没有版本号就不是审计,只是回忆。 (转错网络如何找回)
诚实的总结比营销话术短得多:一个地址风险评分里你能核实的部分,就是一份 29 MB 的 XML,里面 1,075 行地址,其中一行根本不是地址、七行指向错误的网络;剩下的全是一个私有模型,你只收到输出,从不检查它。这不是无视评分的理由,而是「把干净当事实」应该改成「把干净当成别人下的一个断言」的理由。