Page 53 - 《软件学报》2026年第1期
P. 53

50                                                         软件学报  2026  年第  37  卷第  1  期


                 安全漏洞和常见错误. 例如, 许多        DeFi 协议使用   OpenZeppelin  升级合约来更新和改进功能, DAO       将其用于升级新
                 的治理规则和决策.
                    类似的工具例如       Foundry [93] , 它由  Paradigm  开发, 用于以太坊智能合约开发的高效、模块化和安全的框架.
                 Foundry  提供两个主要开发组件: Forge 和    Cast. Forge 用于编写和测试合约的工具, 而       Cast 是用于与以太坊网络交
                 互的命令行工具. 此外      Foundry  也能够提供详细的     Gas 消耗报告, 帮助开发者识别和优化高          Gas 消耗的操作. 虽然
                 正在快速发展, 但相比于更成熟的框架如             Truffle 和  Hardhat. Foundry  的社区和文档资源相对较少. 对于没有使用
                 过该框架的开发者来说, 可能需要一些时间来适应                Foundry  的工具链和工作流程.
                    2020  年, Angelo  等人  [94] 提出一种通过对大量智能合约进行分类, 使用差分代码的方式来支持智能合约链下升
                 级的方法. 同年, Shao   等人  [95] 开发一个智能合约漏洞监控框架, 该框架将日志异常分析方法引入区块链日志系统,
                 并将检测结果传输到相关合约, 最后实现智能合约链下升级的提示. Jean-Louis 等人                    [29] 提出基于可信执行环境的
                 智能合约修复区块链架构         SGXonerated, 讨论访问模式泄露、软件升级机制和状态一致性等问题, 并介绍基于可
                 信执行环境的智能合约安全平台, 包括秘密网络               (secret network)、Oasis、Phala 和  Obscuro  等.
                  3.2   链上升级框架
                    链上升级通常指的是在区块链上直接对智能合约进行升级. 这种方式需要在合约代码中实现升级机制, 允许
                 合约逻辑在保持合约地址和状态不变的情况下进行更新. 链上升级的常见实现方式是使用代理模式, 其中代理合
                 约负责存储状态和转发调用, 而实现合约包含实际的业务逻辑. 当需要升级时, 只需更新代理合约中指向实现合约
                 的引用地址即可. 这种方式的优点是用户无需知道合约已经升级, 因为他们总是与代理合约交互. 缺点是实现相对
                 复杂, 并且如果代理模式使用不当, 可能会引入安全风险, 如函数选择冲突等问题. 如图                         19  所示, 传统的  3  层智能
                 合约模型包括接口层、业务层、数据层. 其中数据层不能升级, 同时也忽略合约链上升级的安全性.

                                                          合约验证                业务合约 1
                                                                                 ...
                                                          代理合约
                                                                                业务合约 n
                                                         业务合约 1−n
                                 合约签订       合约拆分
                                                          存储合约               版本管理协议
                                                                                   记录




                                                        链下合约检测      链上合约认证       升级合约
                                            图 19 智能合约部署架构和链下数据流程

                    1) 接口层  (interface layer): 通常由代理合约实现, 作为与用户或其他合约直接交互的接口, 定义包括函数的声
                 明和用户可以调用的方法.
                    2) 业务层  (business logic layer): 包含合约的核心业务逻辑, 放置在一个或多个独立的实现合约中. 当需要升级
                 时, 只需替换或更新这些实现合约, 而不需要改变接口层.
                    3) 数据层  (data layer): 数据层通常由代理合约实现, 它保存实现合约的地址和合约的状态变量.
                    当需要升级智能合约时, 通常会部署一个新的实现合约, 并通过接口层的代理合约更新对实现合约的引用, 而
                 不需要改变接口层或数据层. 接口层将调用转发到业务层的实现合约, 实现合约包含实际执行的代码. 数据层存储
                 合约的状态    (如账户余额、所有权信息等), 这些状态信息由代理合约管理. 因此用户通过同一个接口层与合约交
                 互, 无需知道背后发生升级, 而合约的业务逻辑已经更新.
                    2021  年, Liu  等人  [96] 提出一个智能合约访问控制服务框架, 通过将昂贵的访问控制规则                (access control rule,
                 ACR) 验证和管理操作的负担转移到链下基础设施, 同时仅实现链上轻量级的基于令牌的访问控制. 例如, 存储公
   48   49   50   51   52   53   54   55   56   57   58