Page 47 - 《软件学报》2026年第1期
P. 47
44 软件学报 2026 年第 37 卷第 1 期
等功能.
5) 函数选择器 (function selector): 每个函数都由一个函数选择器标识, 这是一个 4 字节的标识符, 用于在调用
时唯一标识并确定要执行的具体函数.
6) 非结构化存储 (unstructured storage): 钻石合约使用非结构化存储来保存状态变量, 非结构化存储的布局更
加灵活, 但在合约升级时需要特别注意存储的兼容性, 以避免因布局不匹配而导致潜在问题.
DAO 投票选举 选举
管理地址 建议 建议 建议
管理者 管理者 管理者
控制
控制
控制
管理者
地址
拥有 拥有 拥有
多重签名 DAO 链上合约
钱包 代币合约 交互
图 13 钻石合约结构
升级过程中, 基于钻石模式的 DAO 使用单一的管理地址进行智能合约治理, 该地址由 DAO 拥有, 并由社区
共识进行调整. 社区成员可以通过提案和投票系统来决定是否对智能合约进行升级. 一旦提案获得通过, 就可以执
行钻石切割事件, 包括添加新的切面、替换现有切面或移除不再需要的切面 [54] . 虽然社区参与投票过程, 但投票
结果并不具有自动执行性. 相反, 结果只是对行政行为的建议. 此外, 管理员有权修改 DAO 的财政资金 (treasury),
包括多重签名钱包 (multisig treasury) 和代币合约 (token contract), 例如包括铸造 (mint)、销毁 (burn) 或重新分配
DAO 代币, 而不需要 DAO 会员的许可.
钻石图案允许功能性的集体升级. 对 DAO 实施变更的过程包括以下 4 个步骤, 如图 14 所示.
开始 开发者 DAO 投票 结束
选择 创建提案 提案 是 部署建议 申请更改
调整区域 (CLI) 成功?
建议
否
钻石切割事件: 创建提案 Diamond
更新变量 (UI) EIP-2535
删除刻面 用户 结束
增加刻面
图 14 钻石升级流程图
1) 共识确定: 首先, 社区必须就升级达成共识. 包括调整刻面内的特定变量值或从钻石中添加和移除切面.
2) 创建提案: 至少有一个 DAO 成员在 DAO 中创建一个提案, 通过命令行接口 (CLI) 或者用户界面 (UI) 附加
相对应的动作.
3) 提案接受和部署: 如果一个提案被社区接受, 任何人都可以部署它, 这个步骤需要支付 Gas 费用, 因为提案
的部署记录在区块链上.

