Skip to content

Latest commit

 

History

History
74 lines (51 loc) · 2.25 KB

27 接口.md

File metadata and controls

74 lines (51 loc) · 2.25 KB

接口

本文介绍了 Solidity 中接口的使用。

在 Solidity 中,接口是一种抽象合约,它没有实现其函数体。它可以用来作为与外部合约的交互标准,或者作为代码库的 API。

示例

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

interface Token {
    function transfer(address recipient, uint256 amount) external returns (bool);
}

contract MyContract {
    function sendToken(address tokenAddress, address to, uint256 amount) external {
        Token token = Token(tokenAddress);
        require(token.transfer(to, amount), "Token transfer failed.");
    }
}

在上面的示例中,我们定义了一个 Token 接口,并在 MyContract 合约中使用该接口来发送代币。

注意,我们不需要提供 Token 的实际实现,只需要保证有一个实现了该接口的合约存在即可。

详解

定义

接口的定义与合约类似,但是使用 interface 关键字,并且不包含任何实现代码。

interface MyInterface {
    // 函数声明
}

实现

要实现一个接口,必须实现接口中声明的所有函数。在 Solidity 中,如果一个合约声称自己实现了某个接口,则必须实现该接口中声明的所有函数,否则编译器会发出警告。

具体实现方式与实现继承类似,只需在合约声明中列出要实现的接口即可。

contract MyContract is MyInterface {
    // 实现 MyInterface 中声明的所有函数
}

使用

使用接口实例化一个合约对象,并像调用其他合约一样调用其函数即可。

interface MyInterface {
    function myFunction() external;
}

contract Caller {
    function callMyFunction(address myInterfaceAddress) external {
        MyInterface myInterface = MyInterface(myInterfaceAddress);
        myInterface.myFunction();
    }
}

在上面的示例中,Caller 合约使用 MyInterface 接口来调用传入的合约地址上的 myFunction 函数。

总结

接口是 Solidity 中定义抽象概念的一种强大工具,它们可以用于与外部合约的交互和代码库的 API。程序员可以通过使用接口来规定自己的合约应该如何使用,以及如何与其他合约进行交互。