1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SolidityのInterfaceで接続先コントラクトのstructを利用する際の型変換エラーの解決方法

Last updated at Posted at 2023-07-04

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を正しく取得することができます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?