【p2p、分布式,区块链笔记 Blockchain】truffle002 unleashed_rentable_nft 项目

  • 上一篇:【p2p、分布式,区块链笔记 Blockchain】truffle001 以太坊开发框架truffle初步实践

项目结构

  • 项目实现了一个简单的可租赁的 NFT 系统,用户可以铸造和销毁 NFT。这是作者写的项目介绍(后边看issue才发现的),建议直接看这篇
    在这里插入图片描述

合约:RentablePets.sol

  • mint 函数:允许用户创建新的 NFT,并为其设置唯一的 token ID 和元数据 URI。
mint - 百度翻译
英[mɪnt][mɪnt]

n. 薄荷;造币厂;薄荷糖;铸币厂;大量的钱;
vt. ();铸造(硬币);
adj. 完美的;新造的;
  • burn 函数:允许用户销毁指定 ID 的 NFT,删除该 NFT 及其相关数据。
solidity
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;

import "./ERC4907.sol"; // RentablePets.sol <= ERC4907.sol <= IERC4907.sol
                        // 导入自定义的 ERC4907 合约,ERC4907 是 ERC721 的扩展标准,支持租赁功能。

import "@openzeppelin/contracts/utils/Counters.sol"; // 导入 OpenZeppelin 的 Counters 库,管理可自动递增的计数器,用于生成唯一的 token ID。

contract RentablePets is ERC4907 {
   
    // 定义一个名为 RentablePets 的合约,继承自 ERC4907

  using Counters for Counters.Counter;  // Use the Counters library for the Counters.Counter type

  Counters.Counter private _tokenIds;  // 定义一个私有的 `_tokenIds` 计数器,跟踪和递增每次铸造的新 NFT 的唯一标识符(token ID)。

  constructor() ERC4907("RentablePets", "RP") {
   
   }  // 构造函数,在合约部署时调用,初始化 ERC4907 标准的 NFT 名称为 "RentablePets",符号为 "RP"。

  function mint(string memory _tokenURI) public {
   
     // 定义一个 `mint` 函数,允许公开调用,用户可以通过此函数铸造新的 NFT。

    _tokenIds.increment(); // 每次铸造 NFT 时,计数器 `_tokenIds` 自增,以确保每个 NFT 都有一个唯一的 token ID。
    uint256 newTokenId = _tokenIds.current();  // 获取当前的计数器值(即新 NFT 的唯一 token ID)。
    
    _safeMint(msg.sender, newTokenId); // 安全铸造新 NFT,将其分配给调用者 `msg.sender`,确保目标地址能够接收 ERC721 代币。
    _setTokenURI(newTokenId, _tokenURI); // 为新铸造的 NFT 设置其元数据 URI,通常指向存储在链外的资源(如图片或描述)的 URL。
  }

  function burn(uint256 tokenId) public {
   
     // 定义一个 `burn` 函数,允许公开调用,用户可以通过此函数销毁指定 ID 的 NFT。
    _burn(tokenId); // 调用 `_burn` 函数销毁对应的 token ID,永久移除该 NFT 及其元数据。
  }
}
  1. ERC4907 和 Counters 导入:引入了自定义的 ERC4907 标准(可租赁的 NFT 标准)和 OpenZeppelin 的计数器工具,用于自动生成唯一的 token ID。
  2. 合约定义:合约 RentablePets 继承了 ERC4907 的所有功能(包括 ERC721 标准和租赁扩展)。
  3. 构造函数:初始化合约时,设定 NFT 名称为 “RentablePets”,符号为 “RP”。
  • 编译器版本:
solc: {
   
   
      version: ">=0.4.22 <0.9.0"
      }
  • 开发依赖:
{
   
   
  "dependencies": {
   
   
    "@openzeppelin/contracts": "^4.8.0",
    "@truffle/hdwallet-provider": "^1.7.0"
  },
  "devDependencies": {
   
   
    "@openzeppelin/test-helpers": "^0.5.15"
  }
}

迁移部署:migrations/1_deploy_contracts.js

migrations
英[/maɪˈgreɪʃənz/][/maɪˈgreɪʃənz/]
n.(程序或硬件的)迁移,转移;迁移;迁徙;移居;(计算机系统的)改变
migration的复数
// artifacts 是由 Truffle 提供的一个全局对象,允许我们引入编译后的智能合约文件。
// 它将编译器生成的 ABI(Application Binary Interface,应用二进制接口)和字节码与 JavaScript 代码连接起来。
const RentablePets = artifacts.require("RentablePets"); // 引入名为 RentablePets 的智能合约。Truffle 会寻找一个名为 RentablePets 的合约,并将其映射到 JavaScript 对象中供后续部署时使用。

// 当运行 truffle migrate 或 truffle deploy 时,Truffle 会自动执行这个文件,并按照这里定义的步骤来部署合约。
module
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值