solidity: 基础代理模式

106 阅读1分钟

通过专栏中的storage和delegatecall讲解,进而理解代理模式的思想;

代理模式结构

通过Delegatecall与fallback函数的配合工作实现代理模式。

  1. 外部调用 Proxy 合约中不存在的函数 setX
  2. Proxy转向fallback
  3. 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);
  }