Import
我可以從其他契約而不是整個契約中導入特定功能嗎?
我在契約中
Access.sol
按OpenZeppelin
( ) 進口。"@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
)。僅導入契約並不意味著您公開任何內容。您不能導入特定的函式,這實際上是有意義的,因為這些函式可能依賴於狀態變數(除非它們被標記為純)。
如果您從特定合約繼承,您將獲得它的所有功能,但並非所有功能都會公開,還有私有/內部功能。
對於僅導入少數函式,我建議您複製它們以及它們訪問的狀態變數。