Delegatecall

可升級合約代理模式:在回退函式中獲取呼叫的方法名

  • December 19, 2019

我有一個代理智能合約,我想在回退函式中獲取被呼叫方法的名稱。有辦法嗎?

例如,如果我呼叫函式getName()(儲存在邏輯合約中),那麼在(代理合約的)備份函式中,我想獲取呼叫的函式名稱,在本例中為getName

contract Proxy {
 function () payable external {
   /* I would like to get here the name of the invoked function */
   _fallback();
 }

 function _fallback() internal {
   _willFallback();
   _delegate(_implementation());
 }


 function _implementation() internal view returns (address);

 function _delegate(address implementation) internal { ... }

 function _willFallback() internal { }
}

請在此處查看代理智能合約的完整程式碼

被呼叫函式的全名不會傳遞給智能合約,而只是函式簽名雜湊的前 4 個字節。這 4 個字節可以作為msg.sig. 有關詳細資訊,請參閱文件

引用自:https://ethereum.stackexchange.com/questions/78388