Solidity

將呼叫委託給內部函式

  • December 7, 2017

假設我有一個Dispatcher契約,它使用 delegatecall 將所有函式呼叫委託給一個Implementation契約(參見例如https://gist.github.com/Arachnid/4ca9da48d51e23e5cfe0f0e14dd6318f)。

要使用某個值uint value1初始化Dispatcher ,我想從Dispatcher的建構子(委託)呼叫****實現init()方法並將其傳遞給value1。出於安全原因,我想將實現的init()方法標記為內部……但它似乎不起作用。

我知道我可以使用一些自定義修飾符將實現的 init() 方法公開,但我想了解為什麼對內部方法的委託呼叫不起作用。

如果您嘗試使用 delegatecall從Dispatcher呼叫****Implementation中的 init() 方法,則 internal 將不起作用。由於內部函式可見性說明符僅指從合約內部呼叫的函式。因此,如果委託呼叫在合約的建構子中,那麼您不需要指定任何內容,因為建構子只執行一次,即部署合約時。部署後不能呼叫建構子。

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