Solidity

使用介面名稱作為變數類型

  • October 9, 2022

在solidity中,請參見下面的程式碼…..介面名稱如何用作變數類型?

請參閱下面程式碼中的註釋

pragma solidity 0.8.11;

import "../interfaces/ISpool.sol";
// ... other imports

abstract contract VaultBase is IVaultBase, VaultImmutable, SpoolOwnable, SpoolPausable, BaseConstants {
   using Bitwise for uint256;
   using SafeERC20 for IERC20;

   /* ========== STATE VARIABLES ========== */

   /// @notice The central Spool contract
   ISpool internal immutable spool;   // ISpool is interface name and it is
                                      // being used as variable type. What this means ?

}

ISpool介面:

interface ISpool is ISpoolExternal, ISpoolReallocation, ISpoolDoHardWork, ISpoolStrategy, ISpoolBase {}

介面名稱如何用作變數類型?

讓我們看一下這個程式碼範例:

interface B{
   function func() external;
}

contract A {
   B b;
   constructor(address contract_implements_b) public {
       b = B(contract_implements_b);
   }
}

這裡有interface B,那裡有contract A

contract A接收一個地址作為參數,這個地址指向另一個實現interface B. 在我們初始化 b 之後,我們可以b.func()contract A不知道我們得到的地址合約的完整 ABI 的情況下呼叫我們的。

你在這裡初始化一個變數:

ISpool internal immutable spool;

您正在描述該對spool像在內部可見並且它是只讀的。此外,它將具有ISpool介面中指定的方法。

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