Page 50 - 《软件学报》2026年第1期
P. 50
郭涛 等: 智能合约可升级技术综述 47
自我主权身份的概念, 用户可以维护与特定属性相关联的身份, 并通过智能合约的证明机制进行验证. Chatterjee
等人 [78] 提出一个基于角色的 DApp 动态访问控制框架, 允许业务逻辑的独立管理和访问控制策略的执行. 促进访
问控制策略的去中心化治理和高效的智能合约升级. Xue 等人 [79] 基于智能合约的移动车联网漫游服务分布式认证
方案, 通过存储有限的智能合约实现撤销验证功能, 支持 5G 移动网络的庞大用户规模. 但也存在匿名和用户冒充
攻击的漏洞.
为修复复杂的业务逻辑问题, Kim 等人 [80] 提出一种可更新智能合约的分布式和联邦身份验证方案, 对原有的
区块链加密服务提供商模块进行升级. Yang 等人 [81] 提出一种联盟区块链信息系统, 智能合约通过权限管理减少数
据总量, 提高查询效率. Kumar 等人 [82] 提出基于区块链的零接触网络 (zero touch network), 通过执行合约操作 (如
签名验证、时间戳和公钥验证) 进行验证. 验证成功后, 返回的响应会被记录并授予访问权限 (如创建、读取、更
新和删除操作).
2.3 合约维护
以太坊智能合约开发部署后通常会面临一系列的代码维护问题. Chen 等人 [83] 总结 4 种常见的维护类型, 即纠
正维护、适应性维护、完善维护和预防性维护. Samreen 等人 [84] 讨论 DApp 代码复杂性、安全性、可维护性之间
的关系, 并定义维护合规系数. 结果显示: 以太坊 DApp 的可维护性与代码大小、函数数量成正比, 传出调用操作
与语句的数量成正比.
目前在闭源合约 (即 EVM 字节码) 上运行的最流行的修补工具是 EVM Patch [85] , 利用字节码重写器将最小侵
入式补丁应用到 EVM 智能合约中. 如图 16, EVM Patch 框架由以下 4 个部分组成.
1) 漏洞检测引擎: 由自动分析工具和公开的漏洞披露组成, 用于检测合约中的漏洞.
2) 字节码重写器: 将补丁应用到合约中, 通过字节码重写来修复漏洞.
3) 补丁测试机制: 验证补丁的有效性, 确保补丁不会影响合约之前的事务.
4) 合约部署组件: 上传补丁版本的合约, 将更新后的合约部署到区块链上.
取证分析
易受攻击的 合约单元测试 攻击性交易
合约字节码
Ethereum
漏洞检测
EVM Patch
开始 自动分析 漏洞报告 字节码 补丁测试 交易记录
开发者 工具 修复后的
分析 修改 合约字节码
漏洞披露
升级智能
补丁模板 合约部署 合约
在线部署
图 16 EVM Patch 的体系结构
漏洞检测引擎首先识别漏洞的位置和类型. 然后将这些信息传递给字节码重写器, 字节码重写器根据先前定
义的补丁模板对合约进行补丁. 补丁合约随后被转发给补丁测试人员, 测试人员将所有过去的交易重新回放到合
约中, 该过程不仅对合约进行修补, 还允许开发商检索原始合约和补丁合约之间异常行为和结果的交易列表. 这些
交易可作为潜在攻击的指示器, 如果列表为空, EVM Patch 框架将自动在链上部署补丁合约.
如图 17 所示, 这种字节码重写方法允许开发者通过 ADD 指令自动引入补丁, 并将其部署在合约的末尾
(0xFFB 处) 的基本块, 而不需要更改位于较高编号地址的代码中的任何地址. 用 INVALID 指令填充原始基本块的
其余部分, 以确保基本块与原始基本块具有完全相同的大小. 0xCD 处的基本块通过结尾处与之前的基本块相连.
并以 JUMPDEST 指令作为合法的跳转目标. 为确保在地址 0xCD 处的原始合约代码能够继续执行, 再写入器将
在 0xFFB 处的补丁基本块上追加一个跳转指令.

