
先明确审计对象
区块链审计方法相关术语如何理解,首先取决于检查对象。智能合约审计关注代码是否符合预期、敏感操作是否受权限约束;链上记录核验关注交易的收录情况及其是否符合协议规则。两者提供的证据不同,不能相互替代。
静态分析、动态分析与模糊测试
静态分析不直接执行合约,而是检查代码结构和可能的执行路径;动态分析通过运行代码观察行为。模糊测试属于动态分析,利用大量生成的输入寻找异常。单元测试则围绕具体功能和预设用例检查结果。

这些方法适合互补使用。例如,某个功能在正常输入下通过测试,仍需要检查边界输入和不同调用顺序。测试通过所支持的结论,应限于实际覆盖的条件。

不变量与形式化验证
不变量是预期在规定状态或操作边界上始终成立的性质。性质测试围绕这类规则寻找反例;形式化验证则用数学方法证明模型符合形式化规格。
形式化验证适合检验可以精确定义的安全性质。理解其结论时,要同时查看证明的性质、模型和假设:证明某项约束成立,并不表示所有业务规则或外部依赖都已得到验证。
访问控制与独立审查
访问控制规定谁能执行敏感操作。所有者模式、按角色授权和多签管理是不同的权限安排;权限分散的效果取决于具体配置。独立审计增加外部检查,漏洞赏金鼓励发现并报告问题,两者都不能保证发现全部缺陷。
审查权限时,关键问题是授权关系是否符合设计,以及权限变更后原有约束是否仍然有效。
哈希、默克尔证明与UTXO
比特币开发文档中的哈希用于标识和连接数据;默克尔证明可用于核验交易被某个区块收录。UTXO指未花费交易输出,是判断普通交易输入能否被花费的基础。区块高度表示位置,分叉时同一高度可能对应不同区块。
这些术语适用于理解账本证据。交易收录证明回答的是交易与区块的关系,无法单独证明交易背后的业务真实,也无法说明相关应用没有漏洞。
常见问题:怎样理解“已通过审计”
应把它理解为针对特定对象和范围开展过检查。阅读结论时,需要对应代码版本、检查方法、已发现问题及修复情况。代码安全检查与账本规则核验各有边界,将结论对应到实际检查对象,才能避免扩大解释。