ERC721 标准

ERC721 标准

ERC721 是非同质化代币(NFT)标准。ERC721 通过在以太坊区块链上创建代币,使得每个代币都是唯一的、不可分割和可跟踪的。

简介

ERC721 标准实现了以太坊上的非同质化代币。每个 ERC721 代币都是唯一的,不可分割和可跟踪的,这意味着每个 ERC721 代币都具有独特的属性和价值。ERC721 代币的价值通常是由它的稀缺性、独特性和可交易性所决定的。

ERC721 合约

ERC721 合约是实现 ERC721 标准的智能合约。通过使用 ERC721 合约,用户可以创建、铸造、销毁和转移 ERC721 代币。ERC721 合约必须实现一组标准的接口,以便其他合约和应用程序可以与之交互。这些标准接口确保了 ERC721 合约可以与其他 ERC721 合约和应用程序无缝协作。

标准接口

以下是 ERC721 标准定义的接口:

ERC721 接口

interface ERC721 /* is ERC165 */ {
    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);
    function ownerOf(uint256 _tokenId) external view returns (address);
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function approve(address _approved, uint256 _tokenId) external payable;
    function setApprovalForAll(address _operator, bool _approved) external;
    function getApproved(uint256 _tokenId) external view returns (address);
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

balanceOf

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

该函数接受一个地址参数 owner,返回该地址所拥有的 ERC721 代币数量。

ownerOf

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

该函数接受一个整数参数 tokenId,返回该代币的拥有者地址。

safeTransferFrom

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

该函数将一个 ERC721 代币从一个地址转移到另一个地址,并调用目标地址的接收函数,确保转移的安全性。其中参数 from 是当前拥有者地址,参数 to 是新的拥有者地址,参数 tokenId 是要转移的代币 ID,参数 data 是可选的数据参数。

safeTransferFrom

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

与上一个函数类似,该函数也将一个 ERC721 代币从一个地址转移到另一个地址,但不会携带额外的数据参数。

transferFrom

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

该函数将一个 ERC721 代币从一个地址转移到另一个地址,其中参数 from 是当前拥有者地址,参数 to 是新的拥有者地址,参数 tokenId 是要转移的代币 ID。

approve

function approve(address to, uint256 tokenId) external;

该函数将一个 ERC721 代币的授权转移到另一个地址,其中参数 to 是新的授权地址,参数 tokenId 是要授权的代币 ID。

setApprovalForAll

function setApprovalForAll(address operator, bool approved) external;

该函数将当前地址对所有 ERC721 代币的授权转移到另一个地址,其中参数 operator 是新的授权地址,参数 approved 表示是否授权。

getApproved

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

该函数返回一个 ERC721 代币当前的授权地址,其中参数 tokenId 是要查询的代币 ID。

isApprovedForAll

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

该函数返回一个地址是否已被授权管理一个地址所拥有的所有 ERC721 代币,其中参数 owner 是代币拥有者地址,参数 operator 是被查询的

ERC721Metadata 接口

继承自 ERC721,它定义了一些关于 NFT 元数据的标准方法。

interface ERC721Metadata /* is ERC721 */ {
    function name() external view returns (string memory _name);
    function symbol() external view returns (string memory _symbol);
    function tokenURI(uint256 _tokenId) external view returns (string memory);
}

function name() external view returns (string memory) 返回 NFT 的名称。

function symbol() external view returns (string memory) 返回 NFT 的简称。

function tokenURI(uint256 tokenId) external view returns (string memory) 返回与指定 NFT 关联的元数据 URI,该 URI 包含有关 NFT 的详细信息,如名称、描述、图像等。

这些方法在实现 NFT 元数据时非常有用,因为它们允许开发者标准化他们的元数据格式,并为用户提供更多信息和交互性。

ERC721Enumerable 接口

继承了 ERC721 和 ERC165 接口,并新增了以下方法:

interface ERC721Enumerable /* is ERC721 */ {
    function totalSupply() external view returns (uint256);
    function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 _tokenId);
    function tokenByIndex(uint256 _index) external view returns (uint256);
}

totalSupply(): 返回已经铸造的 NFT 的数量。

tokenByIndex(uint256 index): 返回指定索引处的 NFT ID。在所有铸造的 NFT 中,它定义了一个唯一的顺序。

tokenOfOwnerByIndex(address owner, uint256 index): 返回指定地址的 NFT 列表中指定索引处的 NFT ID。在所有该地址拥有的 NFT 中,它定义了一个唯一的顺序。

这些方法使得 ERC721 合约支持按照顺序枚举所有已铸造的 NFT,或者按照拥有者地址枚举特定地址拥有的 NFT。这对于一些场景,例如 NFT 游戏,非常有用。

官方资料

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容