gl0bal01/chainmap

GitHub: gl0bal01/chainmap

一个零后端、零构建步骤的纯客户端 EVM 资金流向图谱探索器,通过可视化方式辅助链上交易调查与区块链学习。

Stars: 0 | Forks: 0

# chainmap [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/gl0bal01/chainmap/actions/workflows/ci.yml) **English** · [Français](README.fr.md) 粘贴一个地址 → chainmap 将通过 Etherscan v2 API 获取其交易记录,并绘制一个 有向的**地址 → 地址**图,按你选择的深度进行广度优先扩展。然后它 在此之上叠加了调查工具:过滤器、边捆绑、合约调用解码、环路 检测、汇集/发散中心,以及每个节点的风险评分。 - **完全客户端运行** — 无后端、无构建步骤、无遥测。 - **你的 API key 和数据都保留在你的浏览器中。** 唯一会被联系的外部站点是 `api.etherscan.io`,这由严格的内容安全策略 (Content-Security-Policy) 强制执行。 - **英语 + 法语**,完全本地化。 - **237 个单元/集成测试** 覆盖了不依赖 DOM 的核心逻辑。 ![chainmap graph view](https://static.pigsec.cn/wp-content/uploads/repos/cas/f4/f4c5916f1453d48e4661088a218cbad49288536782d9d9edc06380c03fbf8802.png) ## 目录 - [快速开始](#quick-start) - [功能](#features) - [了解区块链的工作原理](#learn-how-blockchains-work) - [架构](#architecture) - [隐私、安全与道德](#privacy-security--ethics) - [开发与测试](#development--tests) - [支持的链](#supported-chains) ## 快速开始 零安装 — 它是原生的 ES modules。 ``` git clone https://github.com/gl0bal01/chainmap.git && cd chainmap python3 -m http.server 8000 # 打开 http://localhost:8000/ ``` **没有 API key?** 点击 **Demo mode** — 它会加载一个内置的示例调查,让你可以 立即探索所有功能。 **实时扫描:** 在 获取一个免费的 key → *API Keys*,将其粘贴到 UI 中, 选择一条链,粘贴一个地址,点击 **Start**。一个 key 即可跨所有受支持的链使用 (Etherscan v2 是一个统一的多链 endpoint)。 ## 功能 - **BFS 扩展** — 从一个根地址递归扩展到任何深度,具有每个地址的采样 大小限制、严格的安全上限,以及一个能真正中止正在进行的请求的 **Stop** 功能。 - **三大交易 (tx) 族** — 普通、内部以及 ERC-20/721/1155 token 转账,每种都有 一条不同颜色的边。 - **Calldata 解码** — 4-byte selector → 人类可读的方法名 + 解码后的主要参数,因此 `transfer()` 的真实接收者(隐藏在 calldata 中)会被展现出来。 - **降噪** — 金额/日期/零值/垃圾信息过滤器,以及边捆绑(将 多次 A→B 转账折叠为一个加权的箭头)。 - **调查图层** — 往返(环路)检测、汇集/发散中心、按时间着色、 已知地址标签,以及一个*可解释的*单节点风险评分。 - **链探测器** — 粘贴任何地址;它会在你扫描前告诉你链的类型 (或非 EVM)。 - **导出** — PNG、PDF 和 CSV(内置了采样说明)。支持保存/加载工作区。 - **设计上的诚实** — 使用大整数金额(绝不使用浮点数),剔除失败的交易 (txs), 并在各处体现采样状态。 ## 了解区块链的工作原理 chainmap 还可以作为一个**实践课程**。每一个区块链概念 — 账户、三大 交易族、基础单位与小数位、calldata、token 标准、BFS 图、 采样、失败的 txs、多链以及调查启发法 — 都映射到你可以在工具中*看到并操作*的事物,并包含 **8 个指导性实验**。 📚 **[完整课程 + 实验指南 → docs/LEARN.md](docs/LEARN.md)** · **[法语版 → docs/LEARN.fr.md](docs/LEARN.fr.md)** ## 架构 原生的 ES modules,**无打包工具**。设计原则是:**`graphStore` 是唯一的 事实来源。** 每一次状态变更都会通过它进行;它会发出事件;渲染层通过订阅将其镜像到 vis-network DataSets 中。过滤器/图层是覆盖在该镜像之上的*显示投影* (vis `DataView`s),因此即使视图被过滤,store 也始终持有完整的图以供 CSV/详情使用。 ``` BFS scan ──► graphStore (truth) ──emits events──► render/network ──► vis DataViews ──► canvas ▲ │ ▲ etherscanClient ui.js / main.js (composition root) filters · bundling · overlays ▲ rateLimiter ``` 对正确性要求极高的核心逻辑是**不依赖 DOM 的,并在 Node 中进行了单元测试** (`format`、 `etherscanClient`、`graphStore`、`scanner`、`display`、`roundTrips`、`riskScore`、…)。 DOM/vis 层 (`render/*`、`ui.js`) 非常轻量。请参阅 [`INTERFACES.md`](INTERFACES.md) 了解 固定的模块契约。 ## 隐私、安全与道德 - **除了对 `api.etherscan.io` 的调用外,不会有任何数据离开你的浏览器** — 没有后端、代理、 分析工具或第三方信标。你可以在 DevTools → Network 中进行验证。 - **本地内置的库** (`vis-network`、`jsPDF`) — 无 CDN — 使用 **SRI (Subresource Integrity)** 固定版本。 严格的 **CSP** 将 `script-src` 限制为 `'self'`,将 `connect-src` 限制为 Etherscan API。 - **任何不受信任的字符串都不会触及 `innerHTML`** — 别名和 API token 符号都被渲染为 DOM 文本节点;该分析在构造上就是无法被 XSS 利用的。 - **OSINT 道德:** 该图只是一个**样本**,而非证据。公共链数据是化名的, 而不是匿名的,并且并不总是看起来像表面那样(伪造的 token 名称、粉尘攻击、交易所 综合钱包)。明确你的局限性;在下结论之前要进行佐证。 ## 开发与测试 测试是**仅限开发使用的**(它们从不在生产环境中运行,也不是使用该应用程序所必需的)。 ``` bun install # dev deps only (happy-dom, playwright-core) bun test # 237 unit + integration tests ``` `bun test` 覆盖了不依赖 DOM 的模块(金额计算、去重 key、BFS 防护、失败 txs 过滤、环路检测、ABI 解码、风险评分、英/法文 key 对齐等),外加一个 happy-dom 集成测试,该测试针对模拟的 vis/fetch 驱动真实的 `main.js` 运行。CI 会在每次推送时运行该测试套件 以及供应商完整性检查(SRI + SHA-256)。 ## 支持的链 Ethereum · Sepolia (testnet) · BNB Chain · Polygon · Arbitrum One · Optimism · Base · Avalanche C-Chain · Fantom. 添加一条链 = 只需在 `src/config.js` 中添加一个条目。 ## 鸣谢 - 链探测器的区块链地址格式模式改编自 **[gl0bal01](https://github.com/gl0bal01)** 的 [`discord-osint-assistant`](https://github.com/gl0bal01/discord-osint-assistant)。 - 图形渲染由 [vis-network](https://github.com/visjs/vis-network) 提供; - PDF 导出由 [jsPDF](https://github.com/parallax/jsPDF) 提供。 - 感谢 OiY 提供的点子 ;) ## 许可证 [MIT](LICENSE)
标签:ESC4, OSINT, Web前端, 以太坊, 区块链, 数据可视化