1.6 KiB
1.6 KiB
title, type, tags, last_updated
| title | type | tags | last_updated |
|---|---|---|---|
| UUPSUpgradeable | concept | 2026-05-01 |
Definition
UUPS(Universal Upgradeable Proxy Standard,EIP-1822)是一种智能合约可升级模式,通过代理合约(Proxy)将用户请求转发给实现合约(Implementation),实现合约可以独立升级而不改变代理地址。
How It Works
User → Proxy (永恒地址) → Implementation v1 → Implementation v2 (升级后)
- Proxy:永恒地址,存储所有数据,持有用户资产
- Implementation:包含业务逻辑,可以随时替换
- UUPS 特有:升级逻辑嵌入在 Implementation 中(而非 Proxy 中)
UUPS vs Transparent Proxy
| 维度 | UUPS | Transparent Proxy |
|---|---|---|
| 升级逻辑位置 | Implementation | Proxy(Admin) |
| 部署 gas 成本 | 较低 | 较高(Admin check 每次调用) |
| Admin 权限 | 无(除非嵌入) | 必须由 Proxy Admin 管理 |
| 安全性 | 实现错误升级逻辑会导致 brick | Proxy 层更简单 |
UUPS Implementation Pattern
import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";
contract MyContractV1 is UUPSUpgradeable, Ownable {
function _authorizeUpgrade(address) internal override onlyOwner {
// 升级权限控制
}
}
存储兼容性关键规则
- 永远不要删除或重新排序 storage 变量——会破坏代理合约中的数据布局
- 只能在末尾添加新变量——追加永远安全
- OpenZeppelin 提供 storage 布局验证工具