メインコンテンツまでスキップ

37 Import

今回は import の使い方についてだ

ローカルなディレクトリーはこのような構造とする。

├── Import.sol
└── Foo.sol

以下はFoo.solは import される側のファイル

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

// struct, error, add関数, Fooコントラクトを持っている
struct Point {
uint x;
uint y;
}

error Unauthorized(address caller);

function add(uint x, uint y) pure returns (uint) {
return x + y;
}

contract Foo {
string public name = "Foo";
}

以下Import.solは import する側のファイル

  • 実質Foo.solにある内容がImport.solに書かれているのと同じ
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

// ファイルからimport
import "./Foo.sol";

// Foo.solから特別な関数などをimportする
import {Unauthorized, add as func, Point} from "./Foo.sol";

contract Import {
// Foo.solを使ってコントラクトを作成
Foo public foo = new Foo();

// Foo.solで作成したコントラクトのテスト
function getFooName() public view returns (string memory) {
return foo.name();
}
}

Github からファイルを import することも可能。openZeppelin もよくこの書き方をしている。

// https://github.com/owner/repo/blob/branch/path/to/Contract.sol
import "https://github.com/owner/repo/blob/branch/path/to/Contract.sol";

// Example import ECDSA.sol from openzeppelin-contract repo, release-v4.5 branch
// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.5/contracts/utils/cryptography/ECDSA.sol
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.5/contracts/utils/cryptography/ECDSA.sol";

Remixで試す