从零学习NFT(ERC721)

文章大纲

  1. 什么是NFT.
  2. NFT有什么价值
  3. 市面上有什么NFT交易市场
  4. 如何实现自己的NFT(智能合约ERC721)

一.什么是NFT(ERC721)

NFT(Non-FungibleToken,非同质化数字权益证明),每个NFT都是唯一不可分割,不可篡改,也不能互相替代的,

因此NFT与虚拟货币等同质化代币存在本质不同,有数字商品的实际价值做支撑,也不具备支付功能等任何货币属性。

我们所说的NFT底层技术也是使用ERC-721协议实现的

那么什么是ERC721呢?

Erc-721标准规定,符合该标准的每个代币都有一个唯一的代币ID。在Erc-721标准中,每个代币都是唯一的。也就是说,在ERC-721标准下,你的100元“钱”和我的100元“钱”是不同的,因为这两个100元的数字是不同的

三.NFT有什么价值

NFT的价值,分析NFT为什么值钱的底层逻辑?
举个例子蒙娜丽莎的微笑画像世上只有一份,虽然有其他很多复制品,但是原件只有那一份,其价值(目前肯定是无价的)最高。

为什么原件具有如此之高的价值?答案是唯一!

他不像传统货币那样,每一张面额一定的钞票价值是锚定的。所以非同质化代币的第一个特性:唯一性且价值绑定

第二,蒙娜丽莎的画像价值几何?大卫的雕像价值几何?再广泛一点,市场上交易的各

类艺术品价值几何?从来没有一个规则规定他们该如何定价,其价值不再是锚定的,由其内在所携带的深层次寓意、宗教、信息以及外在广大市场认可度共同决定。这是非同质化代币的第二个特性:物质本身的价值不计量,由内在与外在共同决定

第三,蒙娜丽莎的画像能拆开卖吗?各类艺术品能拆开卖吗?现实中似乎可以,但那叫损毁,拆开就坏,坏了就失去了价值,如需买卖,请整体打包,恕不零售。这是非同质化代币的第三个特性:价值不可拆分

同样的,我们换到币圈的世界里,对应的就是NFT了,也就是非同质化代币。


那么从以上总结的特性来看,NFT其本质依然是一种承载价值的Coin,只是你可以将NFT理解为一件NFT就是一件数字艺术品,同普通的电子货币一样

三.市面上有什么NFT网站

  • OpenSea 

OpenSea 是最早一批 Peer-to-Peer NFT 市场,而且一直是规模最大的 NFT 交易平台,目前总交易量超过 95 亿美元(数据来自 DappRader)。在该平台上,你可以交易游戏内置道具、收藏品、艺术品、音乐、GIF 等几乎所有类型的 NFT

  •  Axie Marketplace

「边玩边赚」游戏 Axie Infinity 是目前市场上规模第二大的 NFT 市场,目前交易总额超过 27 亿美元(数据来自 DappRader),不过该平台只能交易 Axie NFT,这是一种游戏中的可爱数字宠物,与 Pokémon 非常相似,玩家可以在 Axie 市场上购买并交易。  

  • CryptoPunks

作为以太坊网络上最早一批 NFT,CryptoPunks 是一个加密朋克 NFT 收藏品系列,由 Larva Labs 创建,是一个 10,000 个随即生成的像素化头像的集合,这些头像包括人类、僵尸猿和外星人,每个都具有像素艺术美学和独特属性。CryptoPunks 在刚刚发布的时候可以免费获取,但现在拥有它们的唯一方法就是花钱购买,这意味着你必须到 Larva Labs 市场进行交易,目前大部分 CryptoPunks 销售都是在该平台上进行的。本文撰写时(10 月 24 日) Punks 地板价为 94.95 ETH (约合 388,375.89 美元),另据 DappRader 数据显示,CryptoPunks 的交易总额目前为 15.2 亿美元 

四.如何实现ERC721

我们将使用 ERC721 来跟踪游戏中的项目,每个项目都有自己独特的属性。每当将一个奖励给玩家时,它都会被铸造并发送给他们。玩家可以自由地保留他们的代币或在他们认为合适的时候与其他人交易,就像他们在区块链上的任何其他资产一样!请注意,任何帐户都可以调用awardItem薄荷项目。要限制哪些帐户可以铸造项目

以下是代币化项目的合同:

// contracts/GameItem.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

contract GameItem is ERC721URIStorage {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    constructor() ERC721("GameItem", "ITM") {}

    function awardItem(address player, string memory tokenURI)
        public
        returns (uint256)
    {
        _tokenIds.increment();

        uint256 newItemId = _tokenIds.current();
        _mint(player, newItemId);
        _setTokenURI(newItemId, tokenURI);

        return newItemId;
    }
}

该ERC721URIStorage合约是 ERC721 的实现,包括元数据标准扩展 ( IERC721Metadata) 以及每个令牌元数据的机制。这就是_setTokenURI该方法的来源:我们使用它来存储项目的元数据。

另请注意,与 ERC20 不同,ERC721 缺少decimals字段,因为每个令牌都是不同的并且无法分区

你可能感兴趣的:(智能合约,学习)