Import

我可以從其他契約而不是整個契約中導入特定功能嗎?

  • October 2, 2022

我在契約中Access.solOpenZeppelin( ) 進口。"@openzeppelin/contracts/access/AccessControl.sol"我關心的主要功能setupRole()hasRole()grantRole()。有沒有辦法只導入這些?當我啟動我的合約時,它也暴露了其中的其他功能AccessControl.sol。我不想將導入契約中存在的其餘功能暴露給我的契約,因為它可能會導致一些未知的行為?我閱讀import {} from X並嘗試了上述功能,但它給了我以下錯誤:

Declaration "grantRole" not found in "@openzeppelin/contracts/access/AccessControl.sol" (referenced as "@openzeppelin/contracts/access/AccessControl.sol").

任何幫助表示讚賞。感謝您寶貴的時間:)

首先,語法import {Y} from X意味著它只會從 X 導入合約 Y(如果 Y 是唯一的合約,它就像import X)。

僅導入契約並不意味著您公開任何內容。您不能導入特定的函式,這實際上是有意義的,因為這些函式可能依賴於狀態變數(除非它們被標記為純)。

如果您從特定合約繼承,您將獲得它的所有功能,但並非所有功能都會公開,還有私有/內部功能。

對於僅導入少數函式,我建議您複製它們以及它們訪問的狀態變數。

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