@@ -15,6 +15,69 @@ timezone: UTC+8
1515## Notes
1616
1717<!-- Content_START -->
18+ # 2025-08-15
19+
20+ UUPS 代理是基于 ERC-1967 标准设计的一种智能合约升级模式。与传统的透明代理模式(Transparent Proxy)不同,UUPS 将升级逻辑内置于实现合约,而不是代理合约本身。代理合约仅用于转发呼叫,所有逻辑由实现合约处理。
21+ 设计优势
22+ 这种设计带来了以下显着优势:
23+ - 轻量化:代理合约中不包含复杂的升级逻辑。
24+ - 灵活:开发者可以完全定制升级权限和流程。
25+ - 标准化:基于ERC - 1967和ERC - 1822,兼容性好,相互集成。
26+ UUPS代理的关键组成部分
27+ UUPS代理由以下核心组件组成:
28+ 1.代理合同(Proxy Contract)
29+ 1.1职责
30+ - 存储当前实现合约的地址。
31+ - 使用delegatecall
32+ 将所有转发转发到实现合约。
33+ 1.2存储规范
34+ 遵循 ERC - 1967 标准,使用固定的存储存储IMPLEMENTATION_SLOT实现合约地址。
35+ 1.3轻量设计
36+ 代理合约不包含任何升级逻辑,仅负责转发呼叫。
37+ 2.实现合同(Implementation Contract)
38+ 2.1职责
39+ - 包含具体的业务逻辑和升级逻辑。
40+ - 提供对新实现兼容性的兼容性检查。
41+ 2.2接口规范
42+ - 实现ERC - 1822标准中的proxiableUUID函数,用于验证实现兼容的兼容性。
43+ - 通常基于 OpenZeppelin 的UUPSUpgradeable模块进行开发。
44+ 2.3升级管理
45+ 2.3.1权限控制
46+ 通过函数限制升级权限来实现合约_authorizeUpgrade。
47+ 2.3.2执行升级
48+ 升级操作由实现合约的upgradeTo或upgradeToAndCall函数执行。
49+ 2.3.3安全机制
50+ - 内在上下文校验,保证只有代理合约可以调用升级逻辑。
51+ - 验证新实现一致性的兼容性,避免意外升级。
52+ UUPS代理的工作原理
53+ UUPS代理的工作流程分为两部分:调用转发和合约升级。
54+ 转发
55+ 1.用户向代理发送请求。
56+ 2.代理合约通过delegatecall将请求转发到当前实现合约。
57+ 3.实现合约处理逻辑,并使用代理合约的存储。
58+ 合约升级
59+ 升级过程通过实现合约中的upgradeTo或upgradeToAndCall完成:
60+ 1.上下文校验:检查调用者是否为代理合约,防止直接调用实现合约中的升级逻辑。
61+ 2.权限验证:调用_authorizeUpgrade检查升级权限。
62+ 3.兼容性检查:验证新实现一致性proxiableUUID是否与ERC - 1967标准兼容。
63+ 4.存储更新:将代理合约中的实现地址更新为新合约地址。
64+ 5.初始化(任选):在升级完成后,通过upgradeToAndCall执行初始化逻辑。
65+ UUPS 与透明代理的对比
66+ 特性UUPS代理透明代理天然气成本彼此,仅在实现合约中包含升级逻辑。更高,需要维护额外的代理管理。复杂度大多数,需要实现权限和安全逻辑。较低,由Proxy Admin管理升级逻辑。安全性需要者手动保证权限控制和开发兼容性。代理管理提供额外的安全层。灵活高,可定制升级权限和逻辑。较低,受代理管理员限制。可扩展性更灵活,可支持多种升级策略。较低,适合单一升级模式的场景。
67+ UUPS 代理的安全注意事项
68+ 权限控制
69+ - 确保_authorizeUpgrade实现了严格的验证权限(如onlyOwner)。
70+ - 避免任何用户触发升级逻辑。
71+ 仓储布局
72+ 新实现合约的存储架构必须完全兼容,否则会导致数据混乱。
73+ 兼容性检查
74+ 新实现合约必须实现proxiableUUID并返回正确的存储槽值。
75+ 初始化
76+ 升级后需要初始化新的状态变量时,必须通过upgradeToAndCall调用初始化函数。
77+ 总结
78+ UUPS代理是一种轻量化且灵活的智能合约升级模式,适合需要高效管理升级逻辑的场景。它通过内置的权限验证、下游验证和兼容性检查,保证升级的安全性。同时,开发者可以根据需求定制升级逻辑,极大地提高了合约的可扩展性。
79+ 然而,在使用 UUPS 时,开发者需要特别注意权限控制和高效存储布局的兼容性,潜在的安全问题或存储冲突。通过正确的设计和实现,UUPS 代理能够智能合约提供安全、的升级能力。
80+
1881# 2025-08-14
1982
2083StateDB是区块链系统中的一个核心概念,主要用于存储和管理系统的状态数据。下面是对其的详细解释:
0 commit comments