SolidityのInterfaceを使用して他のコントラクトとやり取りをする場合、接続先コントラクトのstructを利用する際に型変換エラーが発生することがあります。この記事では、そのようなエラーが発生した場合の解決方法について説明します。
前提
以下のようなInterfaceが存在するとします。
solidity
interface DaoInterface {
struct Parameter {
uint index;
uint value;
uint decimals;
string unit_jp;
string unit_en;
string name_jp;
string name_en;
string description_jp;
string description_en;
}
function getParameter(uint index) external view returns (Parameter memory);
}
また、このInterfaceを使用して他のコントラクトとやり取りをする際、次のようにstructを利用しようとします。
solidity
struct Parameter {
uint index;
uint value;
uint decimals;
string unit_jp;
string unit_en;
string name_jp;
string name_en;
string description_jp;
string description_en;
}
DaoInterface dao = DaoInterface(daoAddress);
Parameter memory value = dao.getParameter(6);
しかし、上記のコードを実行すると、次のようなエラーが発生します。
TypeError: Type struct DaoInterface.Parameter memory is not implicitly convertible to expected type struct YourContractName.Parameter memory.
解決方法
このエラーを解決するためには、InterfaceName.StructNameという形式でstructの型を指定する必要があります。具体的には、以下のように書き換えます。
solidity
DaoInterface.Parameter memory value = DaoInterface.Parameter(dao.getParameter(6));
これにより、型変換エラーが解消され、正しくstructの値を取得することができます。
この方法を使えば、SolidityのInterfaceを利用しながら、接続先コントラクトのstructを正しく取得することができます。