首页 > 其他分享 >Solidity:ERC721

Solidity:ERC721

时间:2024-07-14 15:31:35浏览次数:12  
标签:ERC 代币 Solidity ERC721 NFT 接口 721 address

ERC-721 是以太坊区块链上的一种智能合约标准,专门用于创建和管理不可替代代币(NFT)。这些代币与ERC-20代币不同,ERC-20代币是同质化代币,每个代币都是相同的,可以互换。而ERC-721代币则是独一无二的,每个代币都具有独特的属性和价值

1. 什么是ERC-721?

ERC-721(Ethereum Request for Comments 721)是一种标准,用于在以太坊区块链上创建和管理不可替代代币(NFT)。ERC-721由Dieter Shirley等人在2017年提出,旨在提供一个标准接口,使得开发者可以轻松地创建、交易和管理独特的数字资产。

2. 不可替代代币(NFT)

NFT是一种特殊类型的加密资产,每个NFT都是独一无二的。这意味着,每个NFT都有其独特的属性和标识符,使其无法与其他NFT互换。这种不可替代性使得NFT非常适合用于代表数字艺术品、收藏品、虚拟物品、身份标识和其他独特的数字资产。

3. ERC-721的主要特点

  1. 独特性:每个ERC-721代币都有一个唯一的ID,使其与其他代币不同。这种独特性保证了每个代币的独特价值。
  2. 所有权:ERC-721标准定义了代币的所有权,允许代币的创建者、拥有者和交易者明确地了解和控制每个代币的所有权。
  3. 可转让性:ERC-721代币可以在不同的地址之间转移。这使得代币的交易和流通成为可能,从而支持了NFT市场的发展。
  4. 元数据:每个ERC-721代币可以附加元数据,这些元数据可以描述代币的具体属性,例如名称、描述、图像链接等。这使得每个代币不仅仅是一个数字,还可以携带丰富的信息。

4. ERC-721的技术实现

ERC-721标准定义了一组必须实现的接口和可选接口。这些接口包括:

  1. ERC721:这是核心接口,定义了必须实现的方法,包括balanceOfownerOfsafeTransferFromtransferFromapprovesetApprovalForAllisApprovedForAll
  2. ERC721Metadata:这是一个可选接口,用于提供代币的名称、符号和元数据URL。
  3. ERC721Enumerable:这是另一个可选接口,用于枚举所有代币以及某个地址拥有的代币。

4.1 核心接口方法

  • balanceOf(address owner):返回指定地址拥有的代币数量。
  • ownerOf(uint256 tokenId):返回指定代币ID的所有者地址。
  • safeTransferFrom(address from, address to, uint256 tokenId):安全地将代币从一个地址转移到另一个地址。
  • transferFrom(address from, address to, uint256 tokenId):将代币从一个地址转移到另一个地址。
  • approve(address to, uint256 tokenId):批准另一个地址转移特定代币。
  • setApprovalForAll(address operator, bool approved):批准或撤销操作员对所有代币的操作权限。
  • isApprovedForAll(address owner, address operator):查询操作员是否被批准管理所有者的所有代币。

4.2 扩展接口

ERC-721标准除了核心接口外,还有几个重要的扩展接口,旨在提供更多功能和灵活性。这些扩展接口包括ERC721Metadata和ERC721Enumerable。以下是对这些扩展接口的详细介绍:

ERC721Metadata

ERC721Metadata接口提供了关于代币的附加信息,比如代币的名称、符号和描述性元数据。这使得每个代币不仅仅是一个唯一的ID,还可以携带丰富的描述信息:

  • name():返回代币集合的名称,例如“CryptoKitties”。
  • symbol():返回代币集合的符号,例如“CK”。
  • tokenURI(uint256 tokenId):返回特定代币的元数据URI(统一资源标识符)。这个URI通常指向一个包含代币详细信息的JSON文件,例如名称、描述和图像链接。

ERC721Enumerable

ERC721Enumerable接口用于提供代币的枚举功能,使得可以方便地获取所有代币的列表以及某个地址所拥有的所有代币。这在需要列出所有代币或某个用户所有代币时非常有用:

  • totalSupply():返回所有存在的代币总数。
  • tokenByIndex(uint256 index):通过索引返回代币ID。用于遍历所有代币。
  • tokenOfOwnerByIndex(address owner, uint256 index):通过所有者地址和索引返回代币ID。用于遍历某个所有者的所有代币。

5. ERC-721的应用

  1. 数字艺术和收藏品:艺术家可以创建独特的数字艺术品,并通过ERC-721标准将其转化为NFT。这些NFT可以在区块链上交易,确保了艺术品的真实性和稀缺性。
  2. 游戏物品:在区块链游戏中,玩家可以拥有和交易独特的虚拟物品,如武器、服装和土地。ERC-721标准确保了这些物品的唯一性和所有权。
  3. 身份和证书:ERC-721代币可以用于表示独特的身份标识和证书,如学位证书、会员资格和门票。

孟斯特

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特


标签:ERC,代币,Solidity,ERC721,NFT,接口,721,address
From: https://www.cnblogs.com/lianshuiwuyi/p/18301612

相关文章

  • Solidity:assembly
    在Solidity中,assembly是一个内嵌的低级语言,它允许开发者直接编写EVM(以太坊虚拟机)字节码。这种能力使得开发者可以更精细地控制智能合约的行为,并且在某些情况下可以提高性能和减少gas费用。然而,使用assembly也增加了代码的复杂性和出错的可能性,因此应谨慎使用。为什么使用Assembly......
  • Solidity:变量数据存储和作用域 storage/memory/calldata
    Solidity中的引用类型​引用类型(ReferenceType):包括数组(array)和结构体(struct),由于这类变量比较复杂,占用存储空间大,我们在使用时必须要声明数据存储的位置。数据位置​Solidity数据存储位置有三类:storage,memory和calldata。不同存储位置的gas成本不同。storage类型的数据存......
  • Hello World with solidity
    1.Solidity是什么?Solidity是一种面向对象的、静态类型的编程语言,专为在以太坊上编写智能合约而创建。由于以太坊上的智能合约可以处理真实世界的资产(比如加密货币),所以Solidity的设计非常关注安全性。以下是Solidity的一些主要特点:类型安全和静态类型:这可以避免在运行时出......
  • solidity签名机制和go联合调试学习
    1.solidity实现:1.1.引入eip712合约://SPDX-License-Identifier:MITpragmasolidity^0.8.0;/***@devhttps://eips.ethereum.org/EIPS/eip-712[EIP712]isastandardforhashingandsigningoftypedstructureddata.**TheencodingspecifiedintheEIPis......
  • solidity byte32转字符串日志输出学习
    直接上代码://SPDX-License-Identifier:MITpragmasolidity^0.8.0;abstractcontractEIP712{eventLogValues(bytes32domainSeparator,bytes32structHash);function_hashTypedDataV4(bytes32structHash)internalvirtualreturns(bytes32){......
  • 探索 Solidity 中的各种修饰符
    探索Solidity中的各种修饰符在智能合约开发中,确保代码的安全性、可读性和高效性至关重要。Solidity作为以太坊上最广泛使用的编程语言,提供了一系列的修饰符来帮助开发者实现这些目标。本文将深入探讨Solidity中的各种修饰符,包括可见性修饰符、状态可变性修饰符以及自定义修......
  • 在 Solidity 中将地址类型转换为 IERC20 接口类型
    在智能合约开发中,尤其是涉及到ERC-20代币交互时,开发者常常需要将一个地址类型转换为IERC20接口类型。这样做的目的是为了调用接口中的函数,如transfer和approve。本文将详细讲解这一过程,并简要介绍相关的背景知识。什么是ERC-20和IERC20?ERC-20是一种在以太坊区块链上......
  • 理解 Solidity 中的修饰器(Modifiers)
    在智能合约开发中,代码的可读性和安全性至关重要。Solidity作为以太坊上最常用的编程语言,为开发者提供了一种强大的工具——修饰器(modifiers)。修饰器可以在函数调用前后执行特定的代码,简化逻辑并增强合约的安全性。本文将深入探讨修饰器的概念、定义及其在实际开发中的应用。什么......
  • solidity calldata学习
    在Solidity中,calldata是一种数据位置标识符,用于指定函数参数的存储位置。calldata特别适用于函数的外部调用参数,并且是只读的。以下是对Solidity中数据位置的一些说明:storage:用于状态变量,数据持久存储在区块链上。修改状态变量会消耗gas。memory:用于临时变量,这些变量......
  • How to be a senior Solidity Engineer
    一、能够熟练完成常见功能开发Solidity+Hardhat+Ethers熟悉Solidity语法和数据结构,能使用hardhat完成智能合约的自动化测试、优化、部署、交互和SDK封装。Openzipplin+Upgradeable熟悉Openzipplin的所有库文件,能够完成可升级合约的部署和升级。SmartcontractA......