Solidity透明代理与UUPS代理的最核心区别
共同点
- 基础目标相同
- 两种模式都旨在实现合约的可升级性
- 都遵循代理模式的基本原理:将存储与逻辑分离
- 存储标准统一
- 都使用EIP-1967定义的存储槽存储实现地址:
- 计算方式相同:bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1)
- 代理转发机制
- 都使用delegatecall将调用转发到逻辑合约
// 两种代理模式都使用类似的fallback函数转发逻辑 fallback() external payable { _fallback(); } function _fallback() internal { _delegate(_implementation()); }
核心区别
1. 升级逻辑的位置(最根本区别)
2. 函数选择器冲突的解决方式
3. 实现地址的读写方式
4. 初始化和升级调用对比
适用场景
- 透明代理适合:
- 安全性要求极高的项目
- 可接受较高Gas成本的应用
- 大型DeFi协议或金融应用
- UUPS代理适合:
- 注重Gas效率的应用
- 频繁交互的合约
- 有完善测试和审计流程的团队

浙公网安备 33010602011771号