使用 Open Zeppelin 创建您的首个 NFT 合约:全面指南

随着区块链生态系统的不断繁荣,非同质化代币(NFTs)和数字收藏品正在获得显著关注。ERC721兼容的数字资产,如加密猫和Bored APE,的巨大受欢迎程度吸引了大量投资者的兴趣。随着这些数字收藏品的日益重要,彻底改变传统艺术形式只是时间问题。

要利用NFT现象,深入研究这项技术至关重要。从像Gary Vaynerchuk这样的资深投资者到像Snoop Dogg这样的知名艺术家,NFT热潮吸引了各种各样的参与者。

如果你对网上关于NFT合约创建的大量信息感到不知所措,别担心。这个全面的指南将引导你通过使用Solidity和Open Zeppelin生成你的第一个ERC-721 (NFT)合约的过程。在我们深入技术细节之前,让我们回顾一些关于NFT和ERC-721标准的基本概念。

揭开NFT的神秘面纱

在我们开始与 Open Zeppelin 的合约编写之旅之前,了解 NFT 及其操作机制的基础知识是至关重要的。实质上,NFT 是独特的、不可互换的代币,代表着独特的数字资产或实物资产。

这些代币可以与各种物品关联,包括数字艺术品、视频,甚至房地产。通过利用区块链技术来验证所有权,NFT作为一种强有力的威慑手段,防止欺诈活动和剽窃。

与加密货币类似,NFT 通常在网上交易,通过数字稀缺性保持其独特性。特定资产的有限供应通常会推高需求,从而提高其价值。

虽然NFT在技术上与加密货币有相似之处,但它们的不可替代性使其与众不同。每个NFT都拥有独特的数字签名,使其在市场上与其他代币区分开来。

这项技术使个人能够将几乎任何可以在线销售的数字或实物资产变现。通过对独特物品或数字艺术作品进行代币化,NFT为内容创作者和数字艺术家提供了一条新的收入渠道。

引领去中心化的未来

非同质化代币的潜力远超单一用例。通过消除中介并通过二次销售增强版权费,NFT使艺术家能够更有效地商业化和零售数字资产。然而,它们在去中心化领域的应用要广泛得多。

NFT正在成为推动元宇宙中资产的基础技术,充当钱包地址和用户名。一个典型的例子是The Sandbox,这是一个雄心勃勃的元宇宙项目,利用NFT代表虚拟房地产、家具等。玩家可以拥有作为NFT的虚拟土地 parcel,利用它们创建自定义位置和游戏,甚至将他们的创作货币化。

最近,NFT对数字资产的拥有和交换的影响正在为在线社区、可交易的游戏内物品和元宇宙经济奠定基础。随着这项技术的不断发展,它无疑将为一个更加去中心化的未来铺平道路。

ERC-721的吸引力

ERC,即以太坊请求评论,是以太坊生态系统中的一组标准。ERC-721标准,由数字721标识,使智能合约能够跟踪和转移非同质化代币(NFTs)。

虽然ERC-721通常用于NFT,但重要的是要注意这并不是唯一可用的标准。这个特定的ERC只是处理非同质化代币的一套指导方针。

与 ERC-20 不同,ERC-721 要求合约包含基本信息,如名称、符号、唯一 ID,以及通常的 URI (统一资源标识符)。ERC-721 的独特之处在于其唯一标识符,使得每个代币无法复制。因此,来自同一合约的代币可以根据稀缺性或年龄等因素具有不同的价值。

ERC-721标准的引入显著简化了在智能合约中持有和交换非同质化代币的过程。

现在我们已经介绍了NFT和ERC-721标准的基础知识,让我们来探讨Open Zeppelin在智能合约开发中的角色。

Open Zeppelin: 区块链创新领袖

Open Zeppelin 是一个强大的工具,在去中心化应用程序的开发中非常重要。虽然这些应用程序本质上是强大的,但并非没有漏洞。Open Zeppelin 解决了这些潜在的安全缺陷,使其成为区块链领域中一个必不可少的框架。

作为一个开源平台,Open Zeppelin 为构建安全、去中心化的应用程序提供了必要的工具,用于开发和自动化 Web3 应用程序。估计大约 30% 的金融行业区块链技术市场份额利用了 Open Zeppelin 的服务。

各类组织都可以利用 Open Zeppelin 的审计服务,以符合行业标准的操作程序。值得注意的客户包括以太坊基金会和主要的加密货币交易所。该平台旨在通过为以太坊应用提供安全性、可靠性和风险管理解决方案来“保护开放经济”。

通过实施安全措施和进行全面评估,Open Zeppelin 确保您的去中心化应用程序的安全。在识别出代码中的潜在漏洞后,他们提供了一份综合报告,包含最佳实践和建议,以解决系统中的任何弱点。

启动您的ERC-721合约

在 Open Zeppelin 上创建智能合约是一个相对简单的过程。让我们引导您完成这些步骤。对于那些希望跳过教程并访问完整项目的人,您可以在我们的 GitHub 仓库中找到它。

虽然有许多集成开发环境(IDEs)可用,但我们将在本教程中使用Remix。这个IDE将用于设计、组装和部署智能合约。现在,让我们开始制作我们的智能合约的过程。

  1. 首先创建一个名为 "customNft.sol" 的新文件。这个文件将包含我们的 NFT 合约。

  2. 使用 pragma 语句为我们的合约定义 Solidity 编译器版本:

    稳固性 pragma solidity ^0.8.0;

  3. 从官方来源导入必要的 Open Zeppelin 库。我们将使用 Ownable 和 ERC721 库:

坚固 导入 “”; 导入 “”;

  1. 给你的智能合约命名,并引入导入的 Open Zeppelin 库:

坚固 合约 CustomNft 是可拥有的,ERC721(“CustomNft”, “CNFT”) {}

  1. 将tokenId初始化为0:

    稳固性 uint 令牌 Id;

  2. 使用地址作为键,tokenMetaData 作为值创建映射:

坚固 mapping(address => tokenMetaData[]) public ownershipRecord;

  1. 定义tokenMetaData结构以存储每个代币的ID、时间戳和URI:

坚固 struct tokenMetaData { uint 令牌 Id; uint 时间戳; 字符串 tokenURI; }

  1. 实现 mintToken 函数,遵循以下约束:

    • 只有合约拥有者可以调用此函数
    • 所有者无法为自己铸造代币

    稳固性 函数 mintToken(address recipient) public onlyOwner { require(owner() != recipient, “收件人不能是合同所有者”); _safeMint(recipient、tokenId); ownershipRecord[recipient].push(tokenMetaData(tokenId, block.timestamp, “”)); 令牌 ID = 令牌 ID + 1; }

  2. 你的完整合同现在应该类似于以下内容:

坚固 SPDX 许可证标识符:UNLICENSED pragma solidity ^0.8.0;

导入 “”; 导入 “”;

合约 CustomNft 是可拥有的,ERC721(“CustomNft”, “CNFT”) { uint 令牌 Id;

mapping(address => tokenMetaData[]) public ownershipRecord;

struct tokenMetaData { uint 令牌 Id; uint 时间戳; 字符串 tokenURI; }

函数 mintToken(address recipient) public onlyOwner { require(owner() != recipient, “收件人不能是合同所有者”); _safeMint(recipient、tokenId); ownershipRecord[recipient].push(tokenMetaData(tokenId, block.timestamp, “”)); 令牌 ID = 令牌 ID + 1; } }

恭喜你!你已经创建了你的第一个NFT合约。在部署这个合约并执行mintToken函数后,你将成功地将你的第一个NFT进行代币化。

结论

本文概述了NFT及其日益普及的趋势,并介绍了使用Open Zeppelin创建基本ERC-721智能合约的过程。我们希望本指南对您开发初始智能合约有所帮助。

通过完成本教程,您已迈出了进入NFT合约开发世界的第一步。在您继续探索和扩展该领域知识的过程中,请记住,实践和持续学习是成为一名熟练的智能合约开发者的关键。

我们希望本指南能为您掌握区块链开发之旅提供有价值的资源。祝您编码愉快!

查看原文
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 评论
  • 转发
  • 分享
评论
0/400
暂无评论
交易,随时随地
qrCode
扫码下载 Gate App
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)