コンテンツへスキップ

継承

Importをすれば、別のファイルに記載したコントラクトを参照してデプロイできます。

以下の例では、この記事で書いた2個目のコードが保存されているファイルを参照しています。

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

// デプロイしたいコントラクトが記載されているファイルをインポートするコントラクト
import "./SimpleStorage.sol";

// インポートしたファイルのコントラクトをデプロイする
contract StorageFactory {

    // AccountMappingのコントラクトの作成先アドレスを格納する配列をaccountMappingArrayという名前で作成
    AccountMapping[] public accountMappingArray;

    // インポートしたファイルを参照してコントラクトをデプロイする関数
    function createAccountMappingContract() public {
        // accountMappingという名前のオブジェクトをAccountMappingをタイプとして作成し、引数のない新しいコントラクトとしてデプロイする
        AccountMapping accountMapping = new AccountMapping();
        // デプロイ先のアドレスを確認できるようにpublicな配列に追加する
        accountMappingArray.push(accountMapping);
    }    

    // デプロイしたコントラクトの関数を利用する(データ格納)
    function addPerson(uint256 _addressIndex, string memory _name, uint256 _accountNumber) public {
        // コントラクトがデプロイされたアドレスを指定
        AccountMapping accountMapping = AccountMapping(address(accountMappingArray[_addressIndex]));
        // コントラクト内のaddPerson関数を利用する
        accountMapping.addPerson(_name, _accountNumber);
    }

    // デプロイしたコントラクトの関数を利用する(データ参照)
    function retrievePeople(uint256 _addressIndex, uint256 _peopleIndex) public view returns (uint256, string memory) {
        // コントラクト内のgetPersonByIndex関数を利用する
        return AccountMapping(address(accountMappingArray[_addressIndex])).getPersonByIndex(_peopleIndex);
    }

}

それか、コントラクト内の全てのコードをシンプルに継承したい場合はisで済みます。

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

// デプロイしたいコントラクトが記載されているファイルをインポートするコントラクト
import "./SimpleStorage.sol";

// インポートしたファイルのコントラクトをデプロイする
contract StorageFactory is AccountMapping {

}