
先明确“区块链2.0合约”的范围
本文将“区块链2.0合约”限定为以以太坊智能合约为代表的链上程序,不将其视为统一的软件版本。以下讨论适用于此类合约的一般安全与管理问题,不代表某个具体项目已经存在缺陷。
智能合约能够按照代码处理资产和数据,但自动执行不等于规则正确。需要分别关注:业务规则是否合理、代码是否准确实现规则,以及谁有权改变关键设置。

常见问题一:公开接口与操作权限混淆
以太坊智能合约安全文档强调访问控制、执行条件检查、测试和独立审查。其核心意义是:允许外部调用某个接口,并不意味着应允许所有调用者完成敏感操作。

排查权限问题时,不能只看函数是否公开,还要核对每项管理操作是否有相应授权。权限设计应与职责对应,避免普通业务权限同时包含不必要的管理能力。
常见问题二:管理员权力集中或交接失误
OpenZeppelin访问控制文档区分单一所有者与角色权限管理,并提醒开发者注意所有权转移、放弃所有权和默认管理员权限的风险。两步交接可以要求接收方确认,降低误转造成管理失效的可能。
单一所有者适合管理职责简单的系统;多种职责并存时,角色划分更便于表达权限边界。不过,角色名称不同不代表控制权真正分散:如果最终都由同一账户管理,关键账户风险仍然存在。
多签可以减少单个签名者独立执行敏感操作的能力,但不能替代合理的权限配置。放弃管理权也不应被简单理解为更安全,因为受限功能可能因此无法再被调用。
常见问题三:输入合法,却不符合业务状态
参数格式正确,并不说明操作在当前状态下有效。合约还需要检查调用身份、数值边界及状态条件,防止执行结果偏离预期规则。
输入检查与内部一致性检查承担不同职责。前者判断请求是否可以接受,后者关注程序必须始终保持的关系。异常回退可以阻止不满足条件的操作,但无法自动补全开发者遗漏的业务约束。
常见问题四:把测试通过当作没有漏洞
正常流程测试主要说明已覆盖的场景符合预期,不能代表所有边界条件都正确。防御性质量检查还应覆盖无权限请求被拒绝、异常输入得到处理,以及修复后原有功能不受影响等情况。
独立审查能够提供额外检查视角,但不是安全承诺。形式化验证也依赖明确的规格、模型与假设,只能证明其覆盖范围内的性质,不能据此宣称整个系统绝对无误。
常见问题五:上线前没有考虑维护边界
已部署代码通常不能像普通服务器程序一样直接修改。是否支持调整或升级,取决于具体架构及其授权安排;可升级也意味着需要额外审视升级权限。
因此,评估合约不应只问“有没有审计”,还应确认谁负责维护、权限如何交接、哪些功能无法修改,以及出现异常时有哪些事先设计的处理能力。这些问题共同决定了合约的实际管理边界。