ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

tokens的OnChainCheck原理揭秘:如何通过RPC实时比对链上decimals与symbol防造假币

2026/8/27 16:42:53 拓冰建站 浏览量
tokens的OnChainCheck原理揭秘:如何通过RPC实时比对链上decimals与symbol防造假币 tokens的OnChainCheck原理揭秘如何通过RPC实时比对链上decimals与symbol防造假币【免费下载链接】tokensEthereum token definitions项目地址: https://gitcode.com/gh_mirrors/tokens1/tokenstokens 是以太坊官方生态的ERC-20 代币定义库收录了 eth、bsc、avax、arb 等十余条链的代币 JSON 定义文件。它内置的OnChainCheck链上校验机制会通过RPC 实时调用代币合约把文件里填写的decimals小数位和symbol代币符号与链上真实返回值逐一比对——任何对不上号、张冠李戴的假代币定义都会在入库前被直接拦下。本文带你彻底看懂这套防造假币校验的完整原理。一、为什么需要链上核验伪造代币的手段并不新鲜骗子只要复制一个热门代币的合约地址规则写一份decimals 错误、symbol 相似的代币定义就可能误导钱包或余额工具展示错误的资产信息。仅靠人工审核 JSON 文件无法保证纸面数据与链上事实一致。tokens 的做法是让程序直接问合约本身——合约是链上唯一不可撒谎的权威来源。校验目标校验方式拦截的造假行为decimalsRPC 读取合约返回值比对小数位填错导致余额/转账金额计算错误symbolRPC 读取合约返回值比对仿冒代币符号混淆用户视觉合约地址ERC-55 校验和 文件名一致性检查篡改地址指向钓鱼合约二、OnChainCheck 的完整校验流程整个机制由两个核心模块协作完成入口OnChainCheck.kt负责定位待校验文件并确定所属网络执行器TokenChecker.kt真正执行本地格式检查与 RPC 链上比对第一步定位文件确定所属网络OnChainCheck.kt接收一个参数fileToCheck待检查的代币 JSON 路径确认它位于tokens/目录下的某个网络子目录后通过目录名换算出ChainId例如eth→ 1、bsc→ 56、avax→ 43114再调用核心的checkTokenFile并把onChainCheck开关置为true。网络目录与 ChainId 的对应关系定义在 Main.kt 的networkMapping中覆盖 eth、bsc、etc、ella、sonic、arb、avax、zks 等 16 个网络仓库中的tokens/目录结构与之一一对应。第二步本地格式快检不上链也先查一遍checkTokenFile在发起任何 RPC 请求之前先做一轮静态体检快速淘汰不合规文件必填字段齐全name、symbol、address、decimals一个不能少字段清单定义在 Constant.kt地址合法必须是合法地址且通过ERC-55 混合大小写校验和验证跨链场景还校验 EIP-1191 校验和文件名必须等于地址.json防止文件名与内容各说各话类型严格decimals必须是数字、symbol必须是字符串历史上甚至有专门的 CorrectDecimals.kt 脚本批量修复把小数位写成字符串的旧数据第三步RPC 实时比对与链上真相对账 这是防造假币的核心一步。代码根据目录名取到对应链的 RPC 端点getRPC会从链列表数据源中选出链 ID 匹配且可用的一条 RPC然后用ERC20RPCConnector连接代币合约调用合约的decimals()与 JSON 中填写的decimals比对调用合约的symbol()与 JSON 中填写的symbol比对任何一方不一致立即抛出异常例如 decimals reported from contract 18 do not match decimals in json 6该代币文件将被拒绝入库。第四步重试容错与合理豁免链上查询走的是公网 RPC可能超时或抖动。TokenChecker.kt内置了retryIO重试机制最多 7 次间隔从 100ms 起按 2 倍指数退避上限约 100 秒有效避免RPC 抽风造成的误杀。同时项目保留了两个豁免开关见 Token.kt 数据模型invalid_erc20_decimals: true— 该代币合约的 decimals 确实不符合标准跳过小数位比对invalid_erc20_symbol: true— 同上跳过符号比对这样既守住标准代币必须链上对账的底线又给历史遗留的非标准代币留了合规通道。仓库根目录还维护了onChainCheck.lst强制链上校验清单与onChainIgnore.lst豁免清单两个地址名单由 CI 流程引用。三、如何本地运行 OnChainCheck想亲自体验这套校验只需三步获取代码git clone https://gitcode.com/gh_mirrors/tokens1/tokens运行校验在项目根目录执行./gradlew onChainCheck -PfileToChecktokens/eth/0x6B175474E89094C44Da98b954EedeAC495271d0F.json任务定义在 build.gradle 的onChainCheck任务中可换成任意代币文件看结果控制台输出checking ...表示开始比对无异常即代表文件与链上一致若 decimals 或 symbol 对不上会立即报出具体差异而日常全量构建由Main.kt负责遍历所有网络目录、逐一执行格式检查最后把各链代币聚合输出到build/output下的 full 与 minified 清单供 MEW、MyCrypto、TREZOR、WallETH 等下游钱包与工具直接使用。四、这套机制为什么值得借鉴OnChainCheck 的设计给出了一个通用的防造假币思路可以概括为三层防线结构层必填字段 地址校验和 文件名强一致先淘汰形不正的定义事实层通过 RPC 实时比对 decimals 与 symbol让链上事实成为最终裁判工程层指数退避重试 白名单豁免 CI 清单管理保证校验既严格又稳定对于任何做代币列表、资产聚合或 DeFi 数据服务的项目不要相信提交者要相信合约正是这套机制最核心的一句话。五、关键文件速查文件作用src/main/kotlin/org/ethereum/lists/tokens/OnChainCheck.kt链上校验入口定位文件与网络src/main/kotlin/org/ethereum/lists/tokens/TokenChecker.kt格式检查、RPC 比对、重试逻辑src/main/kotlin/org/ethereum/lists/tokens/Main.kt全量构建、网络映射、清单聚合src/main/kotlin/org/ethereum/lists/tokens/Constant.kt必填/可选字段与公共常量src/main/kotlin/org/ethereum/lists/tokens/model/Token.kt代币数据模型含豁免字段onChainCheck.lst/onChainIgnore.lst强制校验与豁免地址名单tokens/各网络代币 JSON 定义目录掌握 OnChainCheck 的原理后你就能理解为什么 tokens 库中的每一条代币记录都经得起链上验证——这也正是它被众多主流钱包选作数据源的原因。【免费下载链接】tokensEthereum token definitions项目地址: https://gitcode.com/gh_mirrors/tokens1/tokens创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考