通过专栏中的storage和delegatecall讲解,进而理解代理模式的思想;
代理模式结构
通过Delegatecall与fallback函数的配合工作实现代理模式。
- 外部调用 Proxy 合约中不存在的函数 setX
- Proxy转向fallback
- fallback获取交易的嵌入数据calldata.(专栏之前的文章有说calldata),通过delegatecall,委托调用Logic合约。
委托调用:委托其他合约在本合约环境下执行操作 //这样解释只是便于理解
这里的代码是简单的逻辑实现,并不安全,也不完整。 比如 delegatecall的结果检查,合约的升级;
通过代码简单理解代理模式的基本思想,然后学习非结构化的代理模式(重点)
contract Logic{
address logic;
uint x;
construct(address _logic){
logic = _logic;
}
function setX(uint _x) external{
x = _x;
}
}
//代理合约
contract Proxy {
address logic;
uint x;
function fallback() external {
logic.delegatecall(msg.data);
}