本内容由德语机器翻译而成,尚未经母语人士审校。技术和监管术语以德语或英语版本为准。
智能合约风险:错误类别
合约实际在哪里失效——以及为什么“已审计”是关于某一时点的陈述,而不是一种属性。
本课未经专业审阅。它是为本平台撰写的,并依据所列证据写成;未进行过独立的专业审阅。
学习目标
- 您能够说出主要的错误类别并加以区分。
- 您能够说明审计报告证明了什么、没有证明什么。
检查预备知识
请在继续阅读之前,先自行回答这些问题。您犹豫的地方,正是本课的价值所在。
- 代码审计检查什么,以什么为衡量标准?
- 合约能否没有错误却仍然损失资金?
- 升级后运行哪些代码,由谁决定?
核心概念
四个类别,其中只有一个是编程错误
第一,实现错误:代码没有做它应做的事。第二,访问错误:代码做了它应做的事,但却是为错误的一方。第三,经济错误:每个单独的函数都正确运行,但它们的组合却产生了对攻击者有利可图的操作序列。第四,依赖错误:自身代码无懈可击,但它所依赖的某个东西提供了错误的数值。审计主要针对前两类。
审计是一个有范围的快照
审计报告针对的是一个指定的代码版本、一个指定的范围和一个时点。升级后运行的是另一套代码。范围之外的内容——通常是经济结构和依赖关系——未经检查。因此,有用的问题不是“有没有审计”,而是:哪个版本、什么范围、哪些发现,以及其中哪些此后已被更改?
对审计的检验本身就是研究对象
智能合约审计市场尚且年轻,其形成过程如今已成为实证研究的对象。这并不意味着审计毫无价值——审计已被证明是有用的。这意味着其说服力本身就是一个可以提出的问题:由谁审计、采用什么方法、出于什么激励。
术语
- 访问控制
- 关于哪个地址可以调用哪个函数的规则。
- 经济型漏洞利用
- 一种仅以有利可图的顺序使用预定功能的攻击。
- 智能合约风险 见术语表
- 合约或其环境的实际作用与假设不同的风险。
模型
实现错误——在审计范围内
访问错误——在审计范围内
经济结构——仅在明确委托时
依赖关系(预言机、其他合约)——通常在范围之外
后续升级——原则上在范围之外
计算示例
两个协议,都“已审计”
- 协议 A
- 针对当前版本的审计,范围:核心合约和经济机制
- 协议 B
- 两次升级之前的审计,范围:仅核心合约
- 对外表述
- 两者:“已审计”
同一个表述,两种截然不同的事实:对 B 而言,经过审计的代码不是正在运行的代码,而且经济结构从未在范围之内。
“已审计”在这里区分不了任何东西。
解读: 只有加上版本、范围和日期,这一表述才成为信息。缺少这三项,它就是营销。
提取练习
基于真实数据的练习
请阅读关于智能合约的引导问题,并记录其中哪些可以从审计报告中得到回答——哪些必须来自链上状态。
分析框架第 4 维度 →应用
您收到一份关于某协议的审计报告,您的机构计划投资该协议。您会对报告进行哪四项检查?
相关案例研究
机构视角解读
- 银行
- 该报告是否满足内部对外部审查的要求?
- 保险
- 四种错误类别中,哪一种能够以可承保的方式加以表述?
要点
- 四种错误类别中只有一种是编程错误。
- 没有版本、范围和日期的“已审计”不构成信息。
- 存在审计是一项发现,而不是安全证明。
证据
- EVD-2026-0004
Annual Review of Financial Economics — Smart Contracts and Decentralized Finance
- EVD-2026-0005
Review of Accounting Studies (Springer) — Decentralized Finance (DeFi) assurance: early evidence