Skip to content

Commit 9271f7b

Browse files
committed
Add study notes for 2025-08-15
1 parent 308062c commit 9271f7b

1 file changed

Lines changed: 63 additions & 0 deletions

File tree

Hickerzeed.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2083
StateDB是区块链系统中的一个核心概念,主要用于存储和管理系统的状态数据。下面是对其的详细解释:

0 commit comments

Comments
 (0)