加密资产法/等级 V · 项目开发与发行/5.3 推广与法律责任/课程 5
智能合约审计及其所能带来的好处
代码审计实际上涵盖哪些内容、“已审计”为何不能作为保证、谁可以信赖该报告,以及关于审计的声明如何为项目带来责任。
本内容为教育性质,不构成法律、税务或投资建议。加密资产相关法律因国家和州而异,且经常变化。采取行动前,请向您所在地的合格律师或税务顾问核实现行规定。
精简路径
法律允许的最省钱、税负最低、最简单、最私密的做法,按优先顺序排列。每一步都注明所依据的规则,以及保持合法所需满足的条件。
- 在区块浏览器上公布经过验证的源代码以及已审查的提交哈希值。这样做是免费的,并且使任何审计声明都可被核查,但该声明必须与已部署且未经升级的代码相符。
- 如果您使用“已审计”一词,请附上完整报告并列出仍未解决的发现事项。根据《联邦贸易委员会法》第5条、规则10b-5或MiCA第7条,省略严重的未解决发现事项可能构成误导。
- 规模较小的项目可以将审查范围严格限定于已部署的合约,并增设公开的漏洞赏金计划。报告中的免责声明限定了其证明的范围,因此您只能主张该报告所涵盖的内容。
- 根据Bily案(1992年加州判例),审计机构仅对其客户负有普通过失责任,因此买方很少能从审计师处获得赔偿;项目方仍需为其自身的声明承担责任。
- 犹他州的DAO需要对其公开代码进行安全审查才能获得法律认可。只有当您选择采用该法律架构时,才需为此项审查编列预算。
材料一份已发布的智能合约安全审查报告,其中包含免责声明部分,例如 Trail of Bits 于 2023 年 5 月发布的 FraxGov 报告。区块浏览器上已部署合约的经过验证的源代码及地址Bily诉Arthur Young & Co.案,3 Cal. 4th 370(1992),关于审计师对第三方的责任
好奇
- 如果经过审计的合同被黑客攻击,买家可以起诉审计师吗?
- 审计会涵盖在链上实际运行的代码吗?
- 一个项目仅仅因为声称自己经过过审计,就会陷入法律纠纷吗?
探索
- 智能合约审计是由外部机构对项目代码的特定版本进行的安全审查,费用由该项目承担。该审查会生成一份报告,按严重程度列出发现的问题,并通常会包含项目的修复方案。这一术语借自财务审计,但两者性质不同:其范围、时间和方法均由审查方与项目方之间的私人合同确定。买家通常只能看到公开的报告。储备金证明报告(某些交易所也将其称为审计)是另一回事(见第4.1.6课)。
- 该报告本身也指出了其局限性。例如,Trail of Bits在2023年5月对FraxGov的评估中提到:相关工作是依据任务要求来开展的,评估工作有时间限制,且依赖于客户提供的信息;此外,评估结果“不应被视为完整的安全问题清单”。报告还指出自动化工具也存在局限。修复情况是通过代码版本的标识符来记录的,比如“在版本ed4e708中已解决”。因此,审计报告描述的是特定时间点的代码状况,而非之后部署或升级后的代码状态。
- 经过审计的代码仍可能出错。2023年3月13日,Euler Finance的借贷协议损失了约1.97亿美元。故障原因是名为“donateToReserves”的函数中缺少健康检查机制,该函数是为修复之前的问题而添加的,且本身也经过了审计。Euler方面表示,他们对该系统进行了远超常规次数的审计,并设立了100万美元的漏洞奖励计划。经过数周的协商,到2023年4月3日,攻击者最终归还了约2.4亿美元的资金。审计可以降低风险,但无法完全消除风险。
- 对于考虑起诉代码审查人员的买家而言,财务审计相关法律揭示了可能面临的障碍。在 Bily v. Arthur Young & Co.(1992)案中,加利福尼亚州最高法院裁定,审计师因一般过失所应承担的责任仅限于其客户。其他人只有在他们是审计师知晓的该报告的特定受益人时,才能以过失性虚假陈述为由提起诉讼;如果他们属于合理可预见的对象,则可以故意欺诈为由提起诉讼。阅读公开报告的代币买家通常需要的不仅仅是证明审查人员疏忽大意的证据。
- 该项目自己关于审计情况的描述其实存在更大风险。如果在未提及那些尚未解决的严重问题、或实际运行的是不同代码的情况下,仍声称该产品已经过审计或安全可靠,那这种说法具有误导性。如果该代币属于证券范畴,那么就可以依据美国证券交易委员会的第10b-5条规则或第12(a)(2)条的规定来主张相关权利(见课程5.3.2)。否则,根据《联邦贸易法》,任何“不公平或具有欺骗性的行为或做法”都是被禁止的(见课程5.1.7);在欧盟的MiCA法规中,第7条要求营销活动必须“公平、清晰且不具误导性”。自2024年1月1日起生效的犹他州DAO法案甚至规定,若要让某个DAO获得法律认可,就必须对其代码进行安全审查。
- 应将审计报告视为合同,而非荣誉象征。需查明是谁支付了费用、审计范围是什么、哪些问题已得到解决、哪些问题仅被“确认”但仍未解决,以及管理员是否可以通过特定权限升级或暂停该合约(参见第5.1.5课)。一个实用的验证方法:从报告中获取提交标识符(commit identifier),在区块浏览器中查看该已部署的合约,确认经过验证的代码确实与审计时的版本一致,且没有后续的升级版本取代了它。如果两者不一致,那么这份报告就无法反映实际使用的代码情况。
关键事实
- 智能合约审计是指审计师与项目方之间通过私有合同,对特定版本的代码进行的审查。
- Trail of Bits在2023年5月发布的FraxGov报告指出,其调查结果不应被视为安全问题的完整清单。
- 2023年3月13日,由于经审计的功能存在缺陷,欧拉金融损失了约1.97亿美元;这些资金已于2023年4月3日归还。
- 在 Bily 诉 Arthur Young & Co.(1992)案中,加利福尼亚州最高法院将审计师的普通过失责任限制在其客户范围内。
- 根据 Bily 案,第三方仅能在审计师知晓其为特定受益人的情况下以过失性虚假陈述为由起诉审计师,或者以故意欺诈为由起诉审计师。
- 犹他州的《去中心化自治组织法》于2024年1月1日生效,该法律要求DAO的公开代码必须经过安全审查。
练习 九、六、三、一
9收集列出你在代币或协议网站上看到的最多9项与安全性相关的声明,例如“已通过审计”、“安全可靠”、具体的审计机构名称或漏洞奖励计划(有些列表的条目较少)。
6归类将它们分为6组:附有相关报告的声明、无报告的声明、包含未解决严重问题的报告、针对旧版本代码的报告、漏洞奖励类声明,以及表述模糊的安全相关内容。
3提炼将这6类归为3类:可以通过已部署的代码进行验证的声明、只能部分验证的声明,以及完全无法验证的声明。
1凝结用一句话说明审计报告能告诉你关于当前链上运行代码的哪些信息,又有哪些信息是它无法告知你的。
事实核查
日期、数字及数据均依据下方列出的已发表资料进行核实。
- Trail of Bits: FraxGov Security Assessment (May 2023)
- Euler Finance: War & Peace, behind the scenes of Euler's $240M exploit recovery
- Bily v. Arthur Young & Co., 3 Cal. 4th 370 (1992), CourtListener
- 15 U.S.C. 45 (FTC Act s.5), Cornell LII
- Utah H.B. 357 (2023), Decentralized Autonomous Organizations Amendments
- Regulation (EU) 2023/1114 (MiCA), EUR-Lex