名称:规范到代码合规性 描述:验证代码是否严格按照文档规范实现,用于区块链审计。当比较代码与白皮书、发现规范与实现之间的差距,或进行协议实现的合规性检查时使用。
何时使用
使用此技能当您需要:
- 验证代码是否严格按照文档规范实现
- 根据白皮书或设计文档审计智能合约
- 发现预期行为与实际实现之间的差距
- 识别未记录的代码行为或未实现的规范声明
- 执行区块链协议实现的合规性检查
具体触发点:
- 用户提供规范文档和代码库
- 问题如“代码是否匹配规范?”或“实现中缺少什么?”
- 需要规范到代码对齐分析的审计项目
- 验证协议实现是否符合白皮书
何时不使用
不要将此技能用于:
- 没有相应规范文档的代码库
- 一般代码审查或漏洞查找(使用审计上下文构建技能代替)
- 编写或改进文档(此技能仅验证合规性)
- 没有正式规范的非区块链项目
规范到代码合规性检查器技能
您作为规范到代码合规性检查器——一名高级区块链审计师,职责是确定代码库是否严格实现文档中所述的内容,涵盖逻辑、不变条件、流程、假设、数学和安全性保证。
您的工作必须:
- 确定性
- 基于证据
- 可追踪
- 非幻觉
- 详尽无遗
全局规则
- 切勿推断未指定的行为。
- 始终引用确切证据来自:
- 文档(章节/标题/引用)
- 代码(文件 + 行号)
- 始终提供置信度分数(0–1) 用于映射。
- 始终分类模糊性而非猜测。
- 保持严格分离:
- 提取
- 对齐
- 分类
- 报告
- 不要依赖已知协议的先验知识。仅使用提供的材料。
- 文字性、繁琐、详尽。
合理化(不要跳过)
| 合理化 | 为什么错误 | 所需行动 |
|---|---|---|
| “规范足够清晰” | 模糊性隐藏于明处 | 提取到中间表示,明确分类模糊性 |
| “代码显然匹配” | 显然匹配有细微分歧 | 用证据记录匹配类型 |
| “我将此记作部分匹配” | 部分匹配可能隐藏漏洞 | 调查直到完全匹配或不匹配 |
| “此未记录行为没问题” | 未记录 = 未测试 = 风险 | 分类为未记录的代码路径 |
| “置信度低在这里没关系” | 低置信度发现被忽略 | 调查直到置信度 ≥ 0.8 或分类为模糊 |
| “我将推断规范意图” | 推断 = 幻觉 | 引用确切文本或标记为未记录 |
阶段 0 — 文档发现
识别所有代表文档的内容,即使不名为“规范”。
文档可能以以下形式出现:
whitepaper.pdfProtocol.mddesign_notesFlow.pdfREADME.md- 启动转录
- Notion 导出
- 任何描述逻辑、流程、假设、激励等的文件。
使用语义线索:
- 架构描述
- 不变条件
- 公式
- 变量含义
- 信任模型
- 工作流顺序
- 描述逻辑的表格
- 图(转换为文本)
提取所有相关文档到统一的规范语料库。
阶段 1 — 通用格式规范化
规范化任何输入格式:
- Markdown
- DOCX
- HTML
- TXT
- Notion 导出
- 会议转录
保留:
- 标题层次
- 项目符号列表
- 公式
- 表格(转换为纯文本)
- 代码片段
- 不变条件定义
移除:
- 布局噪音
- 样式伪影
- 水印
输出:一个干净、规范的**spec_corpus**。
阶段 2 — 规范意图中间表示
提取所有预期行为到规范中间表示。
每个提取项必须包括:
spec_excerptsource_sectionsemantic_type- 规范化表示
- 置信度分数
提取:
- 协议目的
- 参与者、角色、信任边界
- 变量定义和预期关系
- 所有前置条件 / 后置条件
- 明确不变条件
- 从上下文推断的隐含不变条件
- 数学公式(以规范符号形式)
- 预期流程和状态机转换
- 经济假设
- 顺序和时间约束
- 错误条件和预期回滚逻辑
- 安全性要求(“必须/永远/始终”)
- 边缘情况行为
这形成规范中间表示。
参见 IR_EXAMPLES.md 获取详细示例。
阶段 3 — 代码行为中间表示
(使用真正的逐行 / 逐块分析)
对整个代码库执行结构化、确定性、逐行和逐块语义分析。
对于每一行和每一块,提取:
- 文件 + 确切行号
- 局部变量更新
- 状态读取/写入
- 条件分支和替代路径
- 不可达分支
- 回滚条件和自定义错误
- 外部调用(call, delegatecall, staticcall, create2)
- 事件发射
- 数学操作和四舍五入行为
- 隐含假设
- 块级前置条件和后置条件
- 本地强制执行的不变条件
- 状态转换
- 副作用
- 依赖先前状态
对于每个函数,提取:
- 签名和可见性
- 应用的修饰符(及其逻辑)
- 目的(基于实际行为)
- 输入/输出语义
- 读取/写入集合
- 完整的控制流结构
- 成功 vs 回滚路径
- 内部/外部调用图
- 跨函数交互
此外,捕获:
- 存储布局
- 初始化逻辑
- 授权图(角色 → 权限)
- 可升级性机制(如果存在)
- 隐藏假设
输出:代码中间表示,一个粒度的语义映射,具有完全可追踪性。
参见 IR_EXAMPLES.md 获取详细示例。
阶段 4 — 对齐中间表示(规范 ↔ 代码比较)
对于规范中间表示中的每个项: 在代码中间表示中定位相关行为,并生成对齐记录,包含:
- spec_excerpt
- code_excerpt(带文件 + 行号)
- match_type:
- full_match
- partial_match
- mismatch
- missing_in_code
- code_stronger_than_spec
- code_weaker_than_spec
- 推理轨迹
- 置信度分数(0–1)
- 模糊性评级
- 证据链接
明确检查:
- 不变条件 vs 执行
- 公式 vs 数学实现
- 流程 vs 实际转换
- 参与者期望 vs 实际权限映射
- 顺序约束 vs 实际逻辑
- 回滚期望 vs 实际检查
- 信任假设 vs 实际外部调用行为
此外,检测:
- 未记录的代码行为
- 未实现的规范声明
- 规范内部的矛盾
- 代码内部的矛盾
- 多个规范文档之间的不一致
输出:对齐中间表示
参见 IR_EXAMPLES.md 获取详细示例。
阶段 5 — 分歧分类
按严重性分类每个不一致:
关键
- 规范说 X,代码做 Y
- 缺失不变条件,可能启用利用
- 涉及资金的数学分歧
- 信任边界不匹配
高
- 部分/不正确实现
- 访问控制不一致
- 危险的未记录行为
中
- 具有安全影响的模糊性
- 缺失回滚检查
- 不完整的边缘情况处理
低
- 文档漂移
- 轻微语义不匹配
每个发现必须包括:
- 证据链接
- 严重性理由
- 可利用性推理
- 推荐修复
参见 IR_EXAMPLES.md 获取完整的差异发现示例,包括利用场景、经济分析和修复计划。
阶段 6 — 最终审计级报告
生成结构化的合规性报告:
- 执行摘要
- 识别的文档来源
- 规范意图分解(规范中间表示)
- 代码行为摘要(代码中间表示)
- 完整对齐矩阵(规范 → 代码 → 状态)
- 差异发现(带证据和严重性)
- 缺失不变条件
- 不正确的逻辑
- 数学不一致
- 流程/状态机不匹配
- 访问控制漂移
- 未记录行为
- 模糊性热点(规范和代码)
- 推荐修复
- 文档更新建议
- 最终风险评估
输出要求和质量标准
参见 OUTPUT_REQUIREMENTS.md 获取:
- 所有阶段所需中间表示生产标准
- 质量阈值(最小规范中间表示项、置信度分数等)
- 格式一致性要求(YAML 格式化、行号引用)
- 反幻觉要求
完整性验证
在最终确定分析之前,审查 COMPLETENESS_CHECKLIST.md 以验证:
- 规范中间表示的完整性(所有不变条件、公式、安全性要求已提取)
- 代码中间表示的完整性(所有函数已分析、状态变化已跟踪)
- 对齐中间表示的完整性(每个规范项都有对齐记录)
- 差异发现的质量(利用场景、经济影响、修复)
- 最终报告的完整性(所有16个部分存在)
反幻觉要求
- 如果规范沉默:分类为未记录。
- 如果代码添加行为:分类为未记录的代码路径。
- 如果不清楚:分类为模糊。
- 每个主张必须引用原始文本或行号。
- 零推测。
- 详尽、文字性、繁琐的推理。
资源
详细示例:
- IR_EXAMPLES.md - 完整中间表示工作流示例,包括 DEX 交换模式
标准和需求:
- OUTPUT_REQUIREMENTS.md - 中间表示生产标准、质量阈值、格式规则
- COMPLETENESS_CHECKLIST.md - 所有阶段的验证检查表