不同的代理代码可升级智能合约和再入攻击

问题描述

我正在尝试在以太坊中升级智能合约。我发现代理模式可以帮助我解决这一问题。在openzeppelin文档中,我应该在合同的fallback函数添加以下代码

assembly {
  let ptr := mload(0x40)

  // (1) copy incoming call data
  calldatacopy(ptr,calldatasize)

  // (2) forward call to logic contract
  let result := delegatecall(gas,_impl,ptr,calldatasize,0)
  let size := returndatasize

  // (3) retrieve return data
  returndatacopy(ptr,size)

  // (4) forward return data back to caller
  switch result
  case 0 { revert(ptr,size) }
  default { return(ptr,size) }
}

似乎我应该转接电话并检索返回数据。但是,在某些合同中,他们只是使用以下代码升级合同:

/**
     * Resolves asset implementation contract for the caller and forwards there transaction data,* along with the value. This allows for proxy interface growth.
     */
    function () payable {
        _getAsset().__process.value(msg.value)(msg.data,msg.sender);
    }

我有两个问题:

  1. 第二个代码还能升级智能合约吗?
  2. 我认为在合同中的fallback函数添加一个代码会导致重新进入攻击,这是真的吗? 谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)