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 费用, 因为提案
                 的部署记录在区块链上.
   42   43   44   45   46   47   48   49   50   51   52