ERC20协议、IERC721协议

岳华灿
2023-12-01

ERC20协议

ERC是Ethereum Request for Comments的首字母缩写。它就像技术文档,定义了适用于一群想要利用以太坊生态系统的开发者和用户的方法、行为、创新和研究。ERC-20介绍了在以太坊区块链上创建可互换代币的代币标准,在该协议下的相同的代币完全一致。

接口定义

/ SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;
interface IERC20 {

Transfer事件


    event Transfer(address indexed from, address indexed to, uint256 value);// 定义Transfer事件,在发生交易转移时触发。Solidity event在 EVM 的日志记录功能之上提供了一个抽象。应用程序可以通过以太坊客户端的 RPC 接口订阅和监听这些事件

Approval事件


   event Approval(address indexed owner, address indexed spender, uint256 value);

   // 定义Approval事件,在发生代币授权时触发该事件

totalSupply函数


    function totalSupply() external view returns (uint256);

   // 获取当前代币的总供应量

balanceOf函数


    function balanceOf(address account) external view returns (uint256);

   // 获取当前账户的代币余额

transfer函数


    function transfer(address to, uint256 amount) external returns (bool);

   // 代币转移函数,将amount数量的代币转移到to地址

allowance函数


    function allowance(address owner, address spender) external view returns (uint256);

    //获取owner地址账号授权(approve方法进行授权)给spender地址的代币数量

approve函数


    function approve(address spender, uint256 amount) external returns (bool);

   // 授权给spender地址 amount数量的代币,spender账户可以转移该数量代币通过调用

transferFrom函数

    // 从from地址转移amounts数量到to地址
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

IERC165接口定义

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
 

IERC721:ERC721的接口定义


 // SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

IERC721继承IERC165接口

interface IERC721 is IERC165 {

Transfer事件


    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

  // 定义Transfer事件,在发生交易转移时触发。Solidity event在 EVM 的日志记录功能之上提供了一个抽象。应用程序可以通过以太坊客户端的 RPC 接口订阅和监听这些事件

Approval事件


    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

// 定义Approval事件,在发生代币授权时触发该事件

ApprovalForAll事件


    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

// 记录owner全部token授权给 operate事件

balanceOf函数


    function balanceOf(address owner) external view returns (uint256 balance);// 记录

ownerOf函数


    function ownerOf(uint256 tokenId) external view returns (address owner);

// 获取token的拥有者地址

safeTransferFrom函数

// 转移token从from到to地址
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

safeTransferFrom函数

// 转移token从from到to地址
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

approve函数


    function approve(address to, uint256 tokenId) external;

// 将token授权给to地址

setApprovalForAll函数


    function setApprovalForAll(address operator, bool _approved) external;

// 授权全部token给operate地址

getApproved函数


    function getApproved(uint256 tokenId) external view returns (address operator);

// 获取token的授权者地址

isApprovedForAll函数


    function isApprovedForAll(address owner, address operator) external view returns (bool);

// 判断owner是否授权给operator

 类似资料: