Skip to main content

02-1-Import

1.通过源文件相对位置导入

Here is our folder structure.

├── Import.sol
└── Foo.sol
// Foo.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

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
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

// import Foo.sol from current directory
import "./Foo.sol";

// import {symbol1 as alias, symbol2} from "filename";
import {Unauthorized, add as func, Point} from "./Foo.sol";

contract Import {
// Initialize Foo.sol
Foo public foo = new Foo();

// Test Foo.sol by getting it's name.
function getFooName() public view returns (string memory) {
return foo.name();
}
}

2.通过网址引用

You can also import from GitHub by simply copying the url

// 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";

3.通过npm的目录导入

import '@openzeppelin/contracts/access/Ownable.sol';

4.通过全局符号导入特定的合约

import {Yeye} from './Yeye.sol';

例子

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

// 通过文件相对位置import
import './Yeye.sol';
// 通过`全局符号`导入特定的合约
import {Yeye} from './Yeye.sol';
// 通过网址引用
import 'https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol';
// 引用oppenzepplin合约
import '@openzeppelin/contracts/access/Ownable.sol';

contract Import {
// 成功导入Address库
using Address for address;
// 声明yeye变量
Yeye yeye = new Yeye();

// 测试是否能调用yeye的函数
function test() external{
yeye.hip();
}
}