Solidity

為什麼 OpenZeppelin 將介面導入到自己的合約中?

  • February 21, 2022

我注意到所有 OpenZeppelin 的代幣合約都將它們的介面導入其中。

  1. 為什麼 OpenZeppelin 會將自己的合約介面導入並繼承到合約中?
  2. 導入合約的介面會增加部署的 gas 成本嗎?
  3. 如果我想呼叫另一個智能合約,比如 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。導入它們可以讓你繞過這個(你不是在導入整個合約,你是在導入它的位置,它的結構),你需要稍後呼叫它。

  1. SmartContracts 通常在部署後是不可變的,因此如果您需要更改任何內容,您可能需要重新部署整個合約。因此,最好將邏輯分佈在多個較小的合約上。

至少,那是我的經歷。

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