
先明确讨论的适用范围
天使众筹和区块链技术需要注意哪些问题,可以先从资金是否由智能合约管理入手。本文讨论采用智能合约记录资金、执行拨付或退款规则的技术场景,不对具体众筹项目的真实性、法律性质或经营能力作判断。
区块链能够按代码执行已定义的条件,但链下项目是否完成约定事项,需要另有核验机制。若拨款依赖人工确认进度,就必须明确确认人的权限及错误确认后的处理方式。
资金规则需要覆盖失败情形
以太坊开发文档的安全说明强调,合约可能控制大量资产,部署后修补受到限制,因此需要结合访问控制、条件检查、测试和独立审查降低风险。
用于众筹时,规则设计应覆盖未满足条件、重复请求、越权操作以及资金无法正常转出等情况。例如,退款和拨付必须具有清晰的状态边界,避免同一笔资金同时满足两类操作条件。具体保障是否有效,取决于实际代码与测试结果。
区分操作权限与授权权限
OpenZeppelin访问控制文档区分所有者管理和按角色授权,强调最小权限原则;它也说明,角色管理员能够授予或撤销权限,两步交接有助于减少所有权转移错误。
落实到众筹合约,需要分别说明谁能拨款、暂停、升级,以及谁能更换这些人员。即使日常操作已经分工,如果一个管理员仍能重新授予全部权限,管理风险仍然集中。
多签要求多个签名共同批准操作,能够降低单个密钥失陷带来的风险,但效果取决于签名人的独立性和密钥保管方式。角色数量增加本身不代表风险已经分散。
测试与审计各有适用边界
正常流程测试只能覆盖预先设想的情形。资金合约还需要检验异常输入、边界状态和不同调用顺序,例如退款后能否再次领取、未经授权能否修改收款地址。
静态分析、模糊测试和独立审计可以补充检查。形式化验证的结论受规格、模型及假设约束;审计同样存在范围限制。理解审查结论时,需要对应具体版本、覆盖功能及问题修复情况。
常见问题:暂停和放弃权限是否更安全
暂停机制只有在代码预先支持时才能发挥作用,还需要界定暂停影响哪些功能、由谁恢复,以及是否阻碍退款。升级机制可用于修复问题,同时也赋予管理者改变逻辑的能力,因此需要明确授权边界。
放弃所有权并不必然更安全。依赖所有者权限的功能可能因此永久无法调用。安全设计需要同时考虑防止滥权和维持必要处置能力,避免把资金留在无法管理的状态。