5
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で外部コントラクトと接続する方法

Last updated at Posted at 2022-09-23

既存の記事がありましたがsolidityのバージョンが上がったことで動作しなくなっていたため以下の記事を参考にし改良しました。

参考にさせていただいた記事
【Solidity】ブロックチェーン上の外部コントラクトの関数を実行する方法
@ryu-yama(株式会社FromTo) 様
https://qiita.com/ryu-yama/items/bc94b43a0d0a20de12c7

勉強を始めたばかりですので間違いなどあるかもしれませんがご容赦ください。

実行の流れ

1.既存のコントラクト sub.sol=>Memo をデプロイ
2.Memoのコントラクトアドレスをコピー
3.呼び出し元のコントラクトに interfaceを定義する
4.呼び出し元のコントラクト内で2.でコピーしたコントラクトアドレスを貼り付ける
5.4.のコントラクトアドレスを引数として宣言を行う
6.呼び出し元のコントラクト内で実行を行う

プログラム

main.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;

interface MemoInterface {
    function getMemo(address _myAddress) external view returns (string memory);
}

contract MyContract {
  // 使用したいコントラクト(BloodTypeコントラクト)のイーサリアム上のアドレス
  address BloodInterfaceAddress = 0x794387c524f7......................;
   MemoInterface memoContract =  MemoInterface(BloodInterfaceAddress);

  function execFunction() public view returns (string memory) {
    string memory memo = memoContract.getMemo(msg.sender);
    return memo;
  }
}

sub.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;

contract Memo {
  mapping(address => string) memos;

  function setMemo(string memory _memo) public {
    memos[msg.sender] = _memo;
  }

  function getMemo(address _myAddress) public view returns (string memory) {
    return memos[_myAddress];
  }
}
5
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
5
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?