ODbeke/gen-repo-scan
GitHub: ODbeke/gen-repo-scan
基于 GenLayer 构建的去中心化链上代码审计协议,利用 AI 验证者网络检测 GitHub 仓库中暴露的凭据和密钥。
Stars: 0 | Forks: 0
# GenLayer Smart Repo 扫描器
一个基于 GenLayer 构建的去中心化链上安全审计协议。它利用 AI 验证者网络(通过 GenVM)扫描公开的 GitHub 代码库以及近期提交历史的 diff,以检测暴露的凭据、密钥、API token 和数据库连接 URI。
## 里程碑提交详情
- **项目名称:** GenLayer Smart Repo Scanner
- **开发者:** ODbeke
- **在线演示链接:** [https://gen-repo-scan.vercel.app/](https://gen-repo-scan.vercel.app/)
- **已部署合约地址 (StudioNet):** `0xDBFaC2b4027786bC423382288ABBfb442Da26a82`
- **提交类型:** 里程碑项目
通过利用 GenLayer 的 **Optimistic Democracy** 共识机制,多个验证者运行独立的大语言模型(LLM),并通过浏览器渲染在链下获取文件,从而就代码的安全状态达成链上的、去信任的共识。
## 核心功能
1. **AI 驱动的漏洞审计:** 超越了简单的正则表达式检查。AI 验证者能够理解代码语义,忽略安全的占位符值(如 `'YOUR_API_KEY'` 或 `'TODO'`),同时标记出真正的、硬编码的密钥。
2. **多文件与提交历史扫描:** 自动抓取仓库目录树以定位高风险文件(如 `.env`、`secret`、`config`、`.ts`、`.py`),并获取最新提交的 `.diff` URL 以扫描近期更改中添加或删除的密钥。
3. **对比式 Prompt 共识:** 配置 `gl.eq_principle.prompt_comparative` 从语义上对比验证者的 LLM 输出,确保共识机制对措辞或格式的细微差异具有鲁棒性,同时对安全裁决执行严格的判定标准。
4. **链上共识证明检查器:** 在 UI 中可视化展示验证者投票、签名、gas 费用和 leader 收据,并附带一个编码的 base64 输出作为共识的加密证明。
5. **故障安全 UI 警报:** 在数据获取失败时(例如私有仓库或无效的 URL)进行报告,以免用户被“安全(SECURE)”的假阴性报告所误导。
## 目录结构
```
├── contracts/
│ └── repo_scan.py # GenLayer Intelligent Contract (prompt_comparative, nondet fetches)
├── scripts/
│ └── deploy.py # Python script to compile and deploy to StudioNet
├── tests/
│ ├── conftest.py # Pytest bootstrap and path configurations
│ └── test_contract.py # Unit tests running in direct (mocked) mode
├── src/
│ ├── hooks/
│ │ └── useWallet.ts # React Web3 wallet connection hook (supports MetaMask + StudioNet)
│ ├── App.tsx # Main dashboard UI & contract integration
│ ├── index.css # Styling configuration (Tailwind V4)
│ └── main.tsx # Application entry point
├── gltest.config.yaml # Testing configurations mapping to StudioNet
├── package.json # Node.js frontend dependencies
├── tsconfig.json # TypeScript configuration
└── README.md # Documentation
```
## 设置与安装
### 前置条件
- **Python 3.12+**
- **Node.js 18+** & npm
- 一个配置了 **GenLayer StudioNet** 的 Web3 钱包(如 **MetaMask**)(Chain ID: `61999`,RPC: `https://studio.genlayer.com/api`)
### 1. Python 环境设置
安装 GenLayer 测试套件和 Python SDK 依赖项:
```
pip install genlayer-test python-dotenv eth-account
```
### 2. Node.js 前端设置
克隆仓库并安装 Node 依赖项:
```
npm install
```
## 运行单元测试
本项目包含为 `gltest` 编写的单元测试(以 Direct Mode 运行,该模式会 mock 网络获取和 LLM 输出,从而实现快速、免费的执行)。
使用 `pytest` 运行测试:
```
pytest tests/ -v
```
这些测试涵盖:
- 部署状态
- 对空 URL 的即时拒绝
- 对干净文件的正确识别(`SECURE`)
- 对凭据泄露的正确识别(`NOT SECURE`)
- 文件下载失败时错误的正确传播(`FETCH_FAILED`)
## 智能合约部署
将智能合约部署到 **GenLayer StudioNet**:
1. 在根目录下创建一个 `.env` 文件。
2. 添加您已注入资金的 StudioNet 私钥:
PRIVATE_KEY=0xyour_funded_private_key_here
3. 运行自动化部署脚本:
python scripts/deploy.py
4. 从终端复制打印出的 **CONTRACT ADDRESS**,并将其添加到前端的 `.env` 文件中:
VITE_CONTRACT_ADDRESS=0xdeployed_contract_address_here
## 在本地运行前端
启动 Vite 开发服务器:
```
npm run dev
```
在浏览器中打开 [http://localhost:3000](http://localhost:3000)。连接您的 MetaMask 钱包,切换到 **GenLayer StudioNet**,并粘贴一个 GitHub 仓库链接进行扫描!
验证前端生产环境构建是否成功:
```
npm run build
```
## 里程碑升级与更新日志
本项目在初始提交的基础上进行了大幅升级,以达到 GenLayer 里程碑审查的生产级标准。以下是详细的更改日志:
### 1. 架构重组
- 将代码库重组为专业的目录结构:`contracts/`(智能合约)、`tests/`(单元测试)和 `scripts/`(部署脚本)。
- 规范了文件命名:将合约文件名从 `contract.py` 重命名为 `repo_scan.py`。
- 添加了标准的 `.gitignore` 配置,以过滤 Python 编译产物、linter 文件和构建目录。
### 2. 智能合约升级(`contracts/repo_scan.py`)
- **语义共识(`prompt_comparative`):** 将死板的 `strict_eq` 检查替换为 `gl.eq_principle.prompt_comparative`。共识不再需要验证者之间输出二进制完全一致的 JSON 字符串(这经常因为 LLM 格式或空白的微小变化而失败),而是现在能够稳健地基于安全日志的语义一致性进行评估。
- **故障安全的 Web 处理:** 用稳健的错误边界取代了松散的网络下载方式。如果目标 URL 获取失败(例如私有仓库的 404 错误),合约将确定性地中止并记录 `FETCH_FAILED`,而不是静默扫描空文件并错误地将其声明为 `SECURE`。
- **已扫描目标审计日志:** 合约现在会在其 JSON payload 中返回成功获取的文件路径列表,允许客户端验证具体审计了哪些内容。
- **提交历史与 Diff 支持:** 添加了专门的 prompt 逻辑,允许验证者检查 git diff 文件(检测 `+` 新增内容以发现新密钥,并忽略 `-` 删除的内容)。
### 3. 前端升级(`src/App.tsx` & `src/hooks/useWallet.ts`)
- **多文件抓取:** 配置了前端,通过 GitHub REST API 动态查找仓库中风险最高的 2 个文件,并将它们与最新提交的 `.diff` URL 结合,作为逗号分隔的查询发送给合约。
- **共识收据检查器:** 构建了一个发光的玻璃拟态“共识证明(Consensus Proof)”查看模态框。该模态框显示原始的 base64 编码收据 payload,并解析出验证者签名、投票、使用的 gas 和 leader 输出。
- **改进的 UX 状态:** 为 `FETCH_FAILED` 错误添加了自定义渲染器,并在结果卡片中动态列出了已审计的目标。
### 4. 单元测试与自动化
- 创建了 `gltest.config.yaml` 和 `tests/conftest.py`,设置了路径注入和网络配置。
- 实现了一套包含 5 个 direct-mode 单元测试的测试套件(`tests/test_contract.py`),涵盖了干净扫描、漏洞审计、空字符串、下载失败和部署状态。
- 创建了 `scripts/deploy.py`,用于自动化的合约编译和 StudioNet 部署。
标签:GenLayer, LLM大语言模型, LLM应用, StruQ, Web3安全, 区块链共识, 安全规则引擎, 对称加密, 自动化审计, 自动化攻击, 逆向工具