Solidity
為什麼 OpenZeppelin 將介面導入到自己的合約中?
我注意到所有 OpenZeppelin 的代幣合約都將它們的介面導入其中。
- 為什麼 OpenZeppelin 會將自己的合約介面導入並繼承到合約中?
- 導入合約的介面會增加部署的 gas 成本嗎?
- 如果我想呼叫另一個智能合約,比如 ERC20,導入帶有介面的 ERC20 合約會更便宜嗎?或者只是導入它的界面?
import "./IERC20.sol"; contract A { IERC20 token = IERC20(address); } ------------------------------------------------------------------------ // Or: import "./ERC20.sol" // <- This contract inherits the IERC20 interface contract B { ERC20 token = ERC20(address); }
我認為這不是一種義務,而是一種選擇。它看起來更系統。
繼承與導入另一個契約之間是有區別的。
進口
import "./IERC20.sol"; contract A { IERC20 token = IERC20(address); }
遺產
import "./IERC20.sol"; contract A is IERC20 { //Do some logic }
如果您想
Contract A
知道如何處理,則需要導入IERC20 contract
,以便您可以呼叫/委託請求。它不會增加contract A
另一方面,繼承允許
Contract A
從字面上繼承邏輯和功能IERC20
。這意味著A
繼承IERC20
具有公共或內部訪問修飾符的所有函式。注意:(不確定繼承是否會增加gas成本,因為您首先繼承的契約也必須部署)在編寫 SmartContract 時,您不會將整個邏輯放入單個大合約中。有很多原因。
1.智能合約有大小限制,24kb。導入它們可以讓你繞過這個(你不是在導入整個合約,你是在導入它的位置,它的結構),你需要稍後呼叫它。
- SmartContracts 通常在部署後是不可變的,因此如果您需要更改任何內容,您可能需要重新部署整個合約。因此,最好將邏輯分佈在多個較小的合約上。
至少,那是我的經歷。