一文弄清以太坊代币:ERC721

文章共2000字,预计阅读时间10分钟。

Web3是个令人眼花缭乱的地方,里面充斥着新颖的词汇:币、代币、NFT、跨链桥、Defi、Cefi,这些都让入门者感到非常困惑。

新手可能花好几天时间,看了好几个项目的白皮书,最终都不明白什么是代币,什么是NFT。有人好不容易清楚了代币的含义,依然会疑惑,以太坊不是已经有了主币ETH,为什么还有个代币wETH?

本文试图从代码角度帮助弄清以太坊上的各种代币,他们有什么功能,以及通常是如何实现这些功能的,欢迎交流。

TL;DR

「ERC」全称「Ethereum Request for Comment」,中文名为「以太坊意见征求稿」,目前经常使用的有ERC-20ERC-721两个标准,前者用于发行同质化代币,后者用于发行非同质化代币(即NFT,non-fungible token)。

满足标准的合约所记录的数据就被称为代币,代币只是被记录在合约中的数据,铸造、转账、销毁操作也只是在合约中修改记录的数值。

ERC标准规定了合约的接口,其他应用(例如OpenSea)可以通过合约的接口来操作代币。

容易误解的是,ERC标准仅仅规定了合约的接口格式,至于合约具体怎样实现这些接口,ERC标准是不做规定的,所以能有各式各样的NFT。

ERC-20

ERC-20标准规定了以下6个函数和2个事件

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

6个函数的含义分别是

2个事件的含义分别是

其中approvetransferFromallowance可能比较难理解,一个简单的例子就是父母给零花钱,花钱的虽然是子女,但钱是从父母钱包里面扣除的。

如果合约实现了以上6个函数和2个事件,我们就可以说满足ERC-20标准。通常项目方还会在合约中添加mint函数和burn函数,用来增发代币和销毁代币,这里是ERC-20合约的一种实现方式。

满足ERC-20标准的合约所铸造出来的代币,就可以上线uniswap等去中心化交易所,用来交换别的虚拟货币了。因为去中心化交易所需要调用transferFrom 方法,而以太坊的主币ETH并没有这个接口,所以查看ETH在uniswap中具体的交易情况,能发现ETH总是先被存入wETH合约转换成同等数量的wETH代币,之后uniswap再调用transferFrom 进行各种代币间的交换。

ERC-721

ERC-721标准规定了以下10个函数和3个事件

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

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
    ) external;

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

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

    function setApprovalForAll(address operator, bool _approved) external;

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

ERC-721标准是继承了ERC-165标准的,其中ERC-165标准规定了函数supportsInterface(bytes4 interfaceID) 用于发布并检测合约实现了什么接口。

ERC-165标准使得外部可以查询合约是否支持接口,如果支持,查询接口的版本,以便用户可以调整与合约交互的方式。

剩下9个函数的含义分别是

3个事件的含义分别是

由于合约中含有tokenId ,所以每个代币都是不尽相同的,这正是「非同质化」的含义。ERC-721ERC-20在设计思路上没有太大差别,只不过由于ERC-721的代币是非同质化的,所以既可以通过tokenId 进行单个批准,也可以将owner地址的代币全部进行批准,而ERC-20只能批准固定数量。

在实际使用中,不一定需要把九个函数全部实现,这里是ERC-721合约的一种实现方式。

尾记

知道了ERC-20ERC-721有什么用呢?

知道了标准,我们就可以通过ERC标准提供的接口直接操作各类代币和NFT,例如,无聊猿是NFT,那么他的合约肯定也符合ERC-721标准。

可以通过以太坊浏览器,直接调用ownerOf接口查看2022号无聊猿的拥有者(当然使用代码调用接口也可以,只是以太坊浏览器比较直观)

我们再在最大的NFT交易市场OpenSea上查看一下2022号无聊猿,发现其拥有者确实是这个B44618开头的账户

事实上,OpenSea这类应用,正是通过调用ERC标准提供的各种接口来实现交易的,当我们完全了解ERC标准之后,完全可以自己编写应用来进行代币的交易。

今天就到这里,再见。

参考文章

https://ethereum.org/zh/developers/docs/standards/tokens/erc-20/

https://ethereum.org/zh/developers/docs/standards/tokens/erc-721/

https://eips.ethereum.org/EIPS/eip-165

展开阅读全文

页面更新:2024-04-18

标签:以太   代币   同质   额度   合约   函数   含义   接口   地址   标准

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top