逆引きイーサリアム ethereum

【逆引き】【Solidity】コントラクト同士を連携させる方法

【逆引き】【Solidity】コントラクト同士を連携させる方法
Feb. 2, 2020, 1:51 p.m.

目次

コントラクト同士を連携させる方法を紹介します.

目的

一方のコントラクトからもう片方のコントラクトを呼び出したい.

実装方法

呼び出したいコントラクトとそのアドレスが手元にある場合は難しくありません.

コントラクトは実装かまたはインターフェイスでも呼び出し可能です.

コントラクト(アドレス)という構文で、コントラクトへの参照を作成します.

そして、その参照から関数を呼ぶだけです.

その時gasLimitやgasPriceなどのパラメータも渡すことが出来ます.

サンプルコード

以下のコードはRemixでそのまま試すことができます.

コントラクトの実装を使って呼び出す

まずはコントラクトの実装が手元にある場合のサンプルです.

  • 呼び出される側: DeployedContract
  • 呼び出す側: CallerContract
contract DeployedContract {
    function getName() external pure returns(string) {
        return "Shun";
    }
}

contract CallerContract {
    function sayHello(address who) external view returns(string, string) {
        DeployedContract deployed = DeployedContract(who);
        return "Hello", deployed.getName();
    }
}

インターフェイスを使って呼び出す方法

実装が手元になくてもABIやインターフェイスがあれば呼び出し可能です.

そのサンプルです.

contract Token {
    function transferFrom(address from, address to, uint256 value) public;
}

contract Bank {
    function transfer(address tokenAddr, address to, uint256 value) external {
        Token token = Token(tokenAddr);
        token.transferFrom(msg.sender, to, value);
    }
}

以上、 コントラクト同士を連携させる方法を紹介しました.