Posts

Showing posts from February, 2026

代理合约 Proxy Contract完全指南:从入门到精通

1. 什么是代理合约 Proxy Contract – 定义 代理合约(Proxy Contract) 是一种特殊的智能合约,它本身并不直接实现业务逻辑,而是把调用 转发(delegate) 到另一份实现合约(Implementation Contract)上。 - Proxy(代理) :前端入口,持有用户的资产和调用权限。 - Implementation(实现) :真正写业务代码的合约(例如 ERC20、DeFi 协议的核心逻辑)。 通过这种“前后分离”的方式,开发者可以在不改变用户地址和存储结构的前提下,对业务逻辑进行升级或修补。 2. 工作原理 – 通俗解释 2.1 基本思路 想象你在租一间写字楼(Proxy),而真正的公司办公室(Implementation)在另一层楼。所有来访者先到写字楼前台(Proxy),前台会把他们“带”到真实办公室去处理业务。即使公司搬迁(升级 Implementation),访客仍然只需要记住写字楼的地址。 2.2 关键技术点 名称 作用 常见实现方式 delegatecall 让 Proxy 在自己的存储空间里执行 Implementation 的代码 Solidity 中 address(impl).delegatecall(data) 存储布局(Storage Layout) Proxy 的存储变量位置必须与 Implementation 对齐,否则升级后会读写错位 采用 EIP‑1967 、 EIP‑1822 (UUPS) 等标准约定槽位 升级函数 只有受信任的管理员(Owner/DAO)可以更换实现合约地址 upgradeTo(address newImplementation) 、 upgradeToAndCall(...) 2.3 简化流程(伪代码) contract Proxy { // 统一存放实现合约地址的槽位(EIP‑1967 约定) bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894 ...; fallback () external payable { // 将所有未匹配的调用转发...