Delegatecall
可升級合約代理模式:在回退函式中獲取呼叫的方法名
我有一個代理智能合約,我想在回退函式中獲取被呼叫方法的名稱。有辦法嗎?
例如,如果我呼叫函式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
. 有關詳細資訊,請參閱文件。