ERC20, ERC721和ERC1155

简介

  • ERC20:以太坊上最重要、最广泛采用的可替代代币(Fungible Token)标准
  • ERC721:以太坊上定义非同质化代币(Non-Fungible Token, NFT)的标准接口,使得每个代币都具有唯一性、不可分割性和可验证的所有权,成为数字收藏品、游戏资产、身份凭证等场景的核心基础设施
  • ERC1155:以太坊上一种多代币标准(Multi-Token Standard),它突破了 ERC-20(同质化)和 ERC-721(非同质化)的单一模型限制,允许在单个智能合约中同时管理任意数量的同质化、非同质化甚至半同质化代币,显著提升效率并降低 Gas 成本

ERC20

其包含两个事件

  • Transfer事件
  • Approval事件
go 复制代码
interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

ERC721

支持安全转帐,当接收地址为合约地址时,会失败
<<interface>>
ERC721
<<interface>>
IERC165

其继承IERC165

go 复制代码
interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function transferFrom(address from, address to, uint256 tokenId) external;
    function approve(address to, uint256 tokenId) external;
    function setApprovalForAll(address operator, bool approved) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

IERC165只有一个方法supportsInterface是否支持接口

go 复制代码
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

IERC1155

<<interface>>
IERC1155
<<interface>>
IERC165

其继承IERC165

go 复制代码
interface IERC1155 is IERC165 {
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);
    event URI(string value, uint256 indexed id);

    function balanceOf(address account, uint256 id) external view returns (uint256);
    function balanceOfBatch(
        address[] calldata accounts,
        uint256[] calldata ids
    ) external view returns (uint256[] memory);
    function setApprovalForAll(address operator, bool approved) external;
    function isApprovedForAll(address account, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes calldata data) external;
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external;
}
相关推荐
罗_三金1 年前
(10)深入浅出智能合约OpenZeppelin开源框架
web3·区块链·智能合约·solidity·openzeppelin·dapp
Revelation_of_Turing2 年前
Michael.W基于Foundry精读Openzeppelin第59期——Proxy.sol
proxy·solidity·openzeppelin·foundry·evm·代理合约·delegatecall
Revelation_of_Turing2 年前
Michael.W基于Foundry精读Openzeppelin第38期——AccessControlEnumerable.sol
solidity·openzeppelin·foundry·enumerable·accesscontrol
Revelation_of_Turing2 年前
Michael.W基于Foundry精读Openzeppelin第21期——ERC165.sol
solidity·erc165.sol·ierc165·openzeppelin·foundry