首页 > 其他分享 >(9)ERC721详细介绍

(9)ERC721详细介绍

时间:2025-01-18 10:30:54浏览次数:3  
标签:function tokenId uint256 介绍 NFT ERC721 详细 address

ERC721 是以太坊上的一种非同质化代币(NFT,Non-Fungible Token)标准,由 William Entriken、Dieter Shirley、Jacob Evans 和 Nastassia Sachs 在 2018 年提出。与 ERC20 代币不同,ERC721 代币是独一无二的,每个代币都有唯一的标识符(Token ID),因此适用于表示独一无二的资产,如数字艺术品、收藏品、游戏道具等。


ERC721 标准的完整定义

ERC721 标准定义了 NFT 合约必须实现的最小接口,包括函数和事件。以下是 ERC721 标准的详细内容。


1. 必须实现的函数

ERC721 标准规定了以下 9 个必须实现的函数

1.1 balanceOf
  • 功能: 返回指定地址拥有的 NFT 数量。
  • 函数签名:
    function balanceOf(address owner) external view returns (uint256);
    
1.2 ownerOf
  • 功能: 返回指定 tokenId 的所有者地址。
  • 函数签名:
    function ownerOf(uint256 tokenId) external view returns (address);
    
1.3 safeTransferFrom
  • 功能: 将 NFT 从当前所有者转移到另一个地址。如果目标地址是合约,则必须实现 onERC721Received 函数。
  • 函数签名:
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
    
1.4 transferFrom
  • 功能: 将 NFT 从当前所有者转移到另一个地址。不检查目标地址是否是合约。
  • 函数签名:
    function transferFrom(address from, address to, uint256 tokenId) external;
    
1.5 approve
  • 功能: 授权另一个地址(approved)管理指定的 tokenId
  • 函数签名:
    function approve(address approved, uint256 tokenId) external;
    
1.6 setApprovalForAll
  • 功能: 授权或取消授权另一个地址(operator)管理调用者所有的 NFT。
  • 函数签名:
    function setApprovalForAll(address operator, bool approved) external;
    
1.7 getApproved
  • 功能: 返回被授权管理指定 tokenId 的地址。
  • 函数签名:
    function getApproved(uint256 tokenId) external view returns (address);
    
1.8 isApprovedForAll
  • 功能: 检查 operator 是否被授权管理 owner 的所有 NFT。
  • 函数签名:
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    
1.9 onERC721Received
  • 功能: 当 NFT 被转移到合约地址时,目标合约必须实现此函数以接收 NFT。
  • 函数签名:
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
    

2. 必须实现的事件

ERC721 标准规定了以下 3 个必须实现的事件

2.1 Transfer
  • 触发条件: 当 NFT 的所有权从一个地址转移到另一个地址时触发。
  • 事件签名:
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    
2.2 Approval
  • 触发条件: 当某个地址被授权管理指定的 tokenId 时触发。
  • 事件签名:
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    
2.3 ApprovalForAll
  • 触发条件: 当 owner 授权或取消授权 operator 管理其所有 NFT 时触发。
  • 事件签名:
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    

3. 可选的功能

除了必须实现的函数和事件外,ERC721 标准还建议实现以下 可选功能

3.1 name
  • 功能: 返回 NFT 集合的名称(例如 “MyNFT”)。
  • 函数签名:
    function name() external view returns (string memory);
    
3.2 symbol
  • 功能: 返回 NFT 集合的符号(例如 “MNFT”)。
  • 函数签名:
    function symbol() external view returns (string memory);
    
3.3 tokenURI
  • 功能: 返回指定 tokenId 的元数据 URI(通常是 JSON 文件链接)。
  • 函数签名:
    function tokenURI(uint256 tokenId) external view returns (string memory);
    

4. 完整的 ERC721 实现示例

以下是一个简单的 ERC721 代币实现示例:

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

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

contract MyNFT is ERC721 {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    constructor() ERC721("MyNFT", "MNFT") {}

    function mint(address to) public returns (uint256) {
        _tokenIds.increment();
        uint256 newTokenId = _tokenIds.current();
        _mint(to, newTokenId);
        return newTokenId;
    }

    function tokenURI(uint256 tokenId) public view override returns (string memory) {
        require(_exists(tokenId), "Token does not exist");
        return string(abi.encodePacked("https://mynft.com/token/", Strings.toString(tokenId)));
    }
}

5. ERC721 的重要注意事项

  1. 唯一性:

    • 每个 tokenId 必须是唯一的,不能重复。
  2. 元数据:

    • tokenURI 返回的元数据通常是一个 JSON 文件链接,包含 NFT 的名称、描述、图像等信息。
  3. 安全转账:

    • 使用 safeTransferFrom 时,如果目标地址是合约,则必须实现 onERC721Received 函数,否则转账会失败。
  4. 授权管理:

    • approve 用于授权单个 NFT,而 setApprovalForAll 用于授权所有 NFT。
  5. Gas 费用:

    • NFT 的转账和授权操作可能会消耗较多的 Gas,尤其是在链上存储大量元数据时。

6. 总结

ERC721 标准是以太坊上用于非同质化代币(NFT)的核心标准,适用于表示独一无二的资产。通过实现 ERC721 标准,开发者可以创建与其他以太坊应用程序(如钱包、市场和游戏)兼容的 NFT。完整的 ERC721 实现不仅包括必须实现的函数和事件,还应遵循最佳实践,确保 NFT 的安全性和互操作性。

标签:function,tokenId,uint256,介绍,NFT,ERC721,详细,address
From: https://blog.csdn.net/qq_43258522/article/details/145197095

相关文章

  • Python 自动识别验证码的详细指南
    验证码(CAPTCHA)广泛应用于在线表单和注册页面,旨在防止自动化攻击。尽管验证码设计旨在增加机器识别的难度,但借助光学字符识别(OCR)技术,我们仍然可以实现自动化的验证码识别。在本教程中,我们将使用Python编写一个简单的验证码识别程序,利用TesseractOCR引擎结合图像预处理技术提高......
  • 基于java的SpringBoot/SSM+Vue+uniapp的高校校园招聘服务系统的详细设计和实现(源码+l
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • AI绘图教程|stable diffusion(SD)图生图涂鸦超详细攻略,教你快速上手
    今天和大家分享的是图生图的涂鸦功能,我们一起看看stablediffusion中这个功能怎样使用?图生图之涂鸦功能涂鸦是基于图生图的基础理论,可以通过对输入图像进行涂鸦上色,改变潜空间的输入内容,其中包括构图、颜色等。再通过提示词、其它参数等进行引导图像生成过程。简单的说就......
  • SQL注入(非常详细)零基础入门到精通,收藏这一篇就够了
    前言之前一直有粉丝朋友,在挖漏洞过程中使用到SQL注入,希望大白给他讲解一些的SQL注入,今天大白也特地给粉丝朋友安排好了SQL注入攻击方式根据应用程序处理数据库返回内容的不同,可以分为可显注入、报错注入和盲注。可显注入攻击者可以直接在当前界面内容中获取想要获得的内......
  • 【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据...本篇介绍DERT中匈牙利
    【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍DERT中匈牙利匹配算法的具体流程?【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍DERT中匈牙利匹配算法的具体流程?文章目录【大厂面试AI算法题中的知识点】方向涉及:ML/DL/C......
  • 2025实战指南大模型AI产品经理:从零基础到精通的详细步骤与技巧,一文收藏即可开始学习!
    随着人工智能技术的发展,尤其是大模型(LargeModel)的兴起,越来越多的企业开始重视这一领域的投入。作为大模型产品经理,你需要具备一系列跨学科的知识和技能,以便有效地推动产品的开发、优化和市场化。以下是一份详细的大模型产品经理学习路线,旨在帮助你构建所需的知识体系,从零基......
  • 2025最新超详细PycharmIDE安装配置完整版教程(详细步骤)
    包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】!PyCharm是目前最流行、使用最广泛的PythonIDE(IntegratedDevelopmentEnvironment,集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、项目管理、代码跳转、......
  • CentOS等各类Linux系统安装配置Docker详细教程(全网最详细,步骤简洁,看完包懂)
    文章目录前言详细步骤1.安装相关依赖2.安装阿里云的DockerGPG密钥3.设置stable仓库4.安装Docker5.启动服务6.验证测试常见问题及对应解决方案补充1.Ubuntu等系统配置Docker详细教程CentOS9配置Docker-速通版前言Docker是一个非常常用的工具,但是由于其涉及......
  • 餐饮行业点餐API接口对接开发详细介绍
    一、点餐API接口的核心功能1.菜单管理允许餐厅管理员或员工通过API添加、编辑、删除菜单项。支持设置菜单项的价格、描述、图片等属性。2.订单处理顾客可以通过API提交订单,包括选择菜品、数量、特殊要求等。餐厅端可以接收、查看、确认或拒绝订单。3.支付集成API可以与......
  • 5KP110A单向TVS瞬态抑制二极管5000W功率介绍
    5KP110A单向TVS瞬态抑制二极管二极管产品已经跟我们的生活有着密不可分的联系了,TVS瞬态抑制二极管,是一种高效能保护二极管,产品体积小、功率大、响应快等诸多优点,产品应用广泛TVS瞬态抑制二极管5KP110A,是一种二极管形式的高效能被动保护器件贴片TVS瞬态抑制二极管详情简介......