概述

ERC1155 已成为创建 NFT 的黄金标准;每个主要市场都将新代币列为 ERC1155 标准。在本文中,我们将了解 ERC1155 代币标准以及如何创建 ERC1155 代币。

我们将要做什么:

  1. 创建 3 个 NFT 集合
  2. 创建和部署 ERC-1155 合约
  3. 更新合约以兼容 OpenSea
  4. 部署我们的 NFT 集合

你需要什么:

  • 用于创建 NFT 的图像资产
  • MetaMask 和一些 Ropsten 测试 ETH。
  • 了解ERC20和ERC721 (NFT) 代币标准。

什么是ERC1155?

ERC1155是一种多代币标准,允许在一个合约中创建同质化、非同质化和半同质化的代币。在 ERC1155 之前,如果一个用例需要 ERC20(同质化)和 ERC721(非同质化)代币,则需要单独的合约来实现这一点。ERC1155 还允许在一个智能合约中启动多个 NFT 集合,而不是为每个集合创建不同的合约;这提高了智能合约构建的效率并最大限度地减少了交易数量,这非常重要,因为它消耗更少的区块链空间。使用 ERC1155,也可以批量转移代币,而不是在以前的标准中将代币转移到单个地址。

ERC1155 应用的一个普遍例子是基于区块链的去中心化游戏,因为游戏需要硬币和收藏品,因此 ERC1155 已成为那里的标准。ERC1155 也已成为 NFT 领域的标准。

之前的 ERC721 具有代币 ID 与地址的一对一映射。ERC1155 有一个相当复杂的映射,其中代币 id 组合中的地址映射到代币的余额。

创建元数据 URI

我们将创建 3 个 NFT 集合(石头、纸和剪刀),每个集合中都有一个 NFT。要将我们的文件上传到去中心化存储 IPFS,我们可以通过 CLI上传文件或使用这个非常易于使用的工具NFT Storage。

我们将使用第二个选项,NFT 存储。登录 NFT 存储并上传石头、纸张和剪刀的图像文件。成功上传后,您应该会看到如下内容:

点击“Actions”,复制每张图片的IPFS URL;我们需要它作为每个集合的元数据。

我们将创建三个 JSON 元数据文件来存储有关我们的 NFT 集合的信息。

  • 1.json: Rock collection
  • 2.json: Paper collection
  • 3.json: Scissors collection

我们的 1.json 文件看起来像这样:

{ //1."name": "Rocks","description": "This is a collection of Rock NFTs.","image": "https://ipfs.io/ipfs/bafkreifvhjdf6ve4jfv6qytqtux5nd4nwnelioeiqx5x2ez5yrgrzk7ypi",}
  • name: NFT 的名称。

  • description: NFT 的描述。

  • image:我们之前获得的图像的链接(IPFS URL)。

  • 如果一个集合有多个图像(通常是这种情况),则会添加一个额外的参数id以区分集合中的标记。

创建剩余的JSON文件2。json和3。json,分别用于布和剪刀收藏。

为了有效地将所有 JSON 文件上传到 IPFS,我们将以内容寻址格式归档它们。https://car.ipfs.io/ 帮助以 IPFS 兼容的内容寻址存档 (.car) 格式存档文件。

前往IPFS CAR ,并上传上面的三个 JSON 文件。上传后,下载 .car 文件并将其上传到NFT Storage。我们所有的 JSON 文件现在都以存档的方式存储在 IPFS 上。复制上传的 .car 文件的 IPFS URL,您应该可以通过在 URL 末尾输入文件名来访问 JSON 文件,例如:

https://ipfs.io/ipfs/bafybeihjjkwdrxxjnuwevlqtqmh3iegcadc32sio4wmo7bv2gbf34qs34a/1.json

创建和部署 ERC1155 合约

我们将使用OpenZeppelin合约库来创建我们的 ERC1155 合约,并使用Ethereum REMIX IDE 在 Ropsten 测试网上部署。确保你有一些 Ropsten 测试 ETH,你也可以从Ropsten Faucet获得测试币。

在 REMIX 中创建一个新文件 token.sol 并将以下代码粘贴到其中。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";contract rockPaperScissors is ERC1155 {uint256 public constant Rock = 1;uint256 public constant Paper = 2;uint256 public constant Scissors = 3;constructor() ERC1155("https://ipfs.io/ipfs/bafybeihjjkwdrxxjnuwevlqtqmh3iegcadc32sio4wmo7bv2gbf34qs34a/{id}.json") {_mint(msg.sender, Rock, 1, "");_mint(msg.sender, Paper, 1, "");_mint(msg.sender, Scissors, 1, "");}
}

上面代码的解释:

第 1 行:指定SPDX 许可类型,在 Solidity ^0.6.8 之后添加的。每当智能合约的源代码向公众开放时,这些许可证都可以帮助解决/避免版权问题。如果您不想指定任何许可类型,您可以使用特殊值 UNLICENSED 或直接跳过整个注释(不会导致错误,只是警告)。

第 2 行:声明 Solidity 版本。

第 4 行:导入 OpenZeppelin ERC1155 合约。

第 6-9 行:创建名为rockPaperScissors的合约并创建三个变量RockPaperScissors;然后为每个分配适当的ID。

第 11-15 行:使用 car 文件的链接作为参数初始化构造函数,使用参数铸造不同的 NFT 集合:

代币将被铸造到的地址,这里的msg.sender是指合约的部署者。token id,我们已经为token id 分配了名称,所以这里使用名称。每个代币的数量。最后一个是这里留空的数据字段。

编译合约,转到左侧菜单的第三个选项卡,选择Injected Web3作为环境并通过选择正确的合约名称进行部署:

从 MetaMask 批准交易。交易完成后,您的合约将被部署。

现在您可以通过输入地址和代币 ID 来执行诸如获取代币余额之类的功能。我们还可以通过输入代币 id 来检索代币的 URI。

OpenSea 不支持返回的 URI 格式。所以我们需要覆盖 URI 函数以将文件名作为字符串返回:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/utils/Strings.sol";contract rockPaperScissors is ERC1155 {uint256 public constant Rock = 1;uint256 public constant Paper = 2;uint256 public constant Scissors = 3;constructor() ERC1155("https://ipfs.io/ipfs/bafybeihjjkwdrxxjnuwevlqtqmh3iegcadc32sio4wmo7bv2gbf34qs34a/{id}.json") {_mint(msg.sender, Rock, 1, "");_mint(msg.sender, Paper, 1, "");_mint(msg.sender, Scissors, 1, "");}function uri(uint256 _tokenid) override public pure returns (string memory) {return string(abi.encodePacked("https://ipfs.io/ipfs/bafybeihjjkwdrxxjnuwevlqtqmh3iegcadc32sio4wmo7bv2gbf34qs34a/",Strings.toString(_tokenid),".json"));}
}

补充:

第 5 行:导入 OpenZeppelin 合约,将 Integer 转换为 String。

第 18-25 行:通过创建自定义 URI 函数并将代币从整数转换为字符串来覆盖 URI 函数,然后返回完整的 URI。

重新编译合约并部署。当您现在查询 URI 的合约时,它将返回 OpenSea 支持的格式。

结论

恭喜您部署了 ERC1155 代币。如果您现在在这里做到了,您就会了解 ERC1155 多代币标准以及如何创建和部署 ERC1155 NFT。

如何创建和部署 ERC-1155 NFT相关推荐

  1. 使用 Application Developer V7 来创建和部署 JSR 168 协作 portlet

    使用 Application Developer V7 来创建和部署 JSR 168 协作 portlet 发表于07-09-20 16:01 | 阅读 180 | 评分 (暂无) 协作 portle ...

  2. 最新EOS合约教程,从系统到环境,从创建到部署,从前端到后台,Dapp开发

    最新EOS合约教程,从系统到环境,从创建到部署,从前端到后台,Dapp开发 前言 环境 重点声明: 1,安装虚拟机也好, 双系统也好, 把Linux装了 2, 安装EOSIO开发环境, 使用js4eo ...

  3. 如何在IDEA中创建并部署JavaWeb程序

    本文来说下如何在 IDEA 中创建并部署 JavaWeb 程序 文章目录 概述 概述

  4. 持续集成与持续部署宝典Part 4:创建持续部署流水线

    2019独角兽企业重金招聘Python工程师标准>>> 随着Docker项目及其相关生态系统逐渐成熟,容器已经开始被更多企业用在了更大规模的项目中.因此,我们需要一套连贯的工作流程和 ...

  5. C# 创建、部署和调用WebService的简单示例

    C# 创建.部署和调用WebService的简单示例 webservice 可以用于分布式应用程序之间的交互,和不同程序之间的交互. 概念性的东西就不说太多,下面开始创建一个简单的webservice ...

  6. 如何在Azure上创建和部署云服务

    Azure 管理门户提供两种方法可用来创建和部署一个云服务:快速创建和自定义创建. 本主题说明如何使用快速创建方法来创建新的云服务,然后使用上传来上载和部署一套在 Azure 的云服务.当您使用此方法 ...

  7. Windows服务工程创建、部署

    一.创建.部署windows服务 1.在VS2010创建windows service工程 文件---新建---项目----windows服务. 2.双击service1.cs,在onstart中写具 ...

  8. 【Rust日报】2022-09-11 Shuttle 创建和部署带有ShuttleSerenity的 Discord 机器人!

    Shuttle v0.5.1 已发布 ━ 创建和部署一个带有Shuttle & Serenity 的 Discord 机器人! 对于任何想要让 Discord 机器人启动并运行(使用 Rust ...

  9. 阿里云---云开发平台的创建与部署

    阿里云-云开发平台的创建与部署及域名绑定 步骤 登陆 阿里云 创建 云开发平台应用 选择开发语言和创建方式,这里我选择建立一个Python的Demo 填写应用的详细信息.如图所示,计算服务选择SAE. ...

最新文章

  1. loadlibrary 失败_职称评审失败的原因有哪些?
  2. MATLAB读取文本文件----textread
  3. android ble 助手源码_[源码和文档分享]基于Android的生活助手APP的设计与实现
  4. graphpad图片怎么导出矢量图_CorelDRAW导出的图片颜色失真怎么办
  5. 阻止你变现的,从来都不是开源许可证
  6. mysql c语言数字转字符串函数_C++_c语言标准库中字符转换函数和数字转换函数,字符转换为数字: #includest - phpStudy...
  7. 智器SmartQ T7实体店试用体验
  8. 136 - Ugly Numbers
  9. c++ 对象数组_ArrayList实现分析(一)——对象创建
  10. 《软件设计精要与模式》之Factory Method模式
  11. 程序局部性(时间局部性与空间局部性)与循环展开原理详解
  12. 把自定义的demuxer加入ffmpeg源码
  13. PTA 程序设计-一帮一(C语言)
  14. 模拟电路 - 半导体基本知识
  15. python Splinter 12306抢票
  16. PFC离散元软件快捷操作方式
  17. 笔记:修改host文件
  18. Python values()函数
  19. linux引导程序下载,SysLinux 4.05 下载 功能强大的引导加载程序
  20. 廊坊金彩教育:怎么优化标题

热门文章

  1. 环洋市场调研-2022年全球钙片市场总体规模及应用细分研究报告
  2. MYSQL数据库连接字符串(connectionString)配置参数大全详解
  3. WindowsServer2019下Php(php-7.4.3-Win32-vc15-x64) 调用C# .dll文件
  4. thinkpad卡在logo界面_联想logo [联想笔记本开不了机卡住logo界面如何解决]
  5. MTCNN移植java_MTCNN移植安卓并检测视频中人脸
  6. 行业分析-全球与中国甚高频数据交换系统市场现状及未来发展趋势
  7. Redis之在Linux上安装和简单的使用
  8. java——百钱买百鸡
  9. 做一个简单的根据按键不同改变盒子颜色
  10. 驾校科目一模java geo拟考_模拟考试科目一,科一最全面的必过技巧,原来这么简单还怕过不了...