问题描述
我正在尝试在以太坊中升级智能合约。我发现代理模式可以帮助我解决这一问题。在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);
}
我有两个问题:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)