本内容由德语机器翻译而成,尚未经母语人士审校。技术和监管术语以德语或英语版本为准。

智能合约风险:错误类别

合约实际在哪里失效——以及为什么“已审计”是关于某一时点的陈述,而不是一种属性。

本课未经专业审阅。它是为本平台撰写的,并依据所列证据写成;未进行过独立的专业审阅。

学习目标

  • 您能够说出主要的错误类别并加以区分。
  • 您能够说明审计报告证明了什么、没有证明什么。

检查预备知识

请在继续阅读之前,先自行回答这些问题。您犹豫的地方,正是本课的价值所在。

核心概念

事实

四个类别,其中只有一个是编程错误

第一,实现错误:代码没有做它应做的事。第二,访问错误:代码做了它应做的事,但却是为错误的一方。第三,经济错误:每个单独的函数都正确运行,但它们的组合却产生了对攻击者有利可图的操作序列。第四,依赖错误:自身代码无懈可击,但它所依赖的某个东西提供了错误的数值。审计主要针对前两类。

假设

审计是一个有范围的快照

审计报告针对的是一个指定的代码版本、一个指定的范围和一个时点。升级后运行的是另一套代码。范围之外的内容——通常是经济结构和依赖关系——未经检查。因此,有用的问题不是“有没有审计”,而是:哪个版本、什么范围、哪些发现,以及其中哪些此后已被更改?

解读

对审计的检验本身就是研究对象

智能合约审计市场尚且年轻,其形成过程如今已成为实证研究的对象。这并不意味着审计毫无价值——审计已被证明是有用的。这意味着其说服力本身就是一个可以提出的问题:由谁审计、采用什么方法、出于什么激励。

术语

访问控制
关于哪个地址可以调用哪个函数的规则。
经济型漏洞利用
一种仅以有利可图的顺序使用预定功能的攻击。
智能合约风险 见术语表
合约或其环境的实际作用与假设不同的风险。

模型

  1. 实现错误——在审计范围内

  2. 访问错误——在审计范围内

  3. 经济结构——仅在明确委托时

  4. 依赖关系(预言机、其他合约)——通常在范围之外

  5. 后续升级——原则上在范围之外

审计能做到什么——以及什么在其之外

计算示例

两个协议,都“已审计”

协议 A
针对当前版本的审计,范围:核心合约和经济机制
协议 B
两次升级之前的审计,范围:仅核心合约
对外表述
两者:“已审计”

同一个表述,两种截然不同的事实:对 B 而言,经过审计的代码不是正在运行的代码,而且经济结构从未在范围之内。

“已审计”在这里区分不了任何东西。

解读: 只有加上版本、范围和日期,这一表述才成为信息。缺少这三项,它就是营销。

提取练习

一个协议损失了资金,尽管每个单独的合约函数都正确运行。这属于哪种错误类别?
哪三项信息才使“已审计”具有意义?

基于真实数据的练习

请阅读关于智能合约的引导问题,并记录其中哪些可以从审计报告中得到回答——哪些必须来自链上状态。

分析框架第 4 维度 →

应用

您收到一份关于某协议的审计报告,您的机构计划投资该协议。您会对报告进行哪四项检查?

相关案例研究

机构视角解读

银行
该报告是否满足内部对外部审查的要求?
保险
四种错误类别中,哪一种能够以可承保的方式加以表述?

要点

证据