ERC-721標準:數字化資產的未來所在

一、什麼是ERC-721標準

ERC-721標準是以太坊網絡上的一個智能合約標準,用於實現不可替代代幣(NFT)。2017年11月,由OpenZeppelin開發人員William Entriken及Fabian Vogelsteller發起提案,頗受社區認可,被視為加密貨幣領域的一項重要突破。

與傳統的ERC-20代幣不同,ERC-721的每一個代幣都是獨一無二的,不能互相替代。這種特性使得ERC-721適用於數字資產領域,比如遊戲中的人物、武器等虛擬道具,以及藝術品、證券等實物資產的數字版權。

代碼示例:

contract ERC721 {
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
    
    function balanceOf(address _owner) external view returns (uint256);
    function ownerOf(uint256 _tokenId) external view returns (address);
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes calldata data) external payable;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function approve(address _approved, uint256 _tokenId) external payable;
    function getApproved(uint256 _tokenId) external view returns (address);
    function setApprovalForAll(address _operator, bool _approved) external;
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

二、ERC-721標準的優勢

相對於傳統的數字代幣,不可替代代幣具有以下優勢:

1、獨特性:每一個代幣都是唯一的,不能被互相替代,這大大增強了數字資產的價值感。

2、靈活性:ERC-721標準允許代幣的擁有者進行自由的轉移、銷毀和創建,不同於傳統的代幣需要獲得授權進行操作。

3、便捷性:ERC-721標準規定了代幣的基本功能,減少了上層應用的開發難度,使得數字資產可以更容易地被應用到各種領域。

代碼示例:

pragma solidity ^0.6.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract MyNFT is ERC721 {
    constructor() public ERC721("MyNFT", "MNFT") {}
}

三、ERC-721標準的應用案例

1、數字藝術品領域:近年來,越來越多的藝術家藉助ERC-721標準,將自己的作品發行為數字藝術品,並通過區塊鏈技術確保其版權和流通性。

2、遊戲領域:ERC-721標準為遊戲廠商提供了一種新的籌款方式,即通過發行遊戲內道具的數字版權來獲得資金,從而支持遊戲的開發。

3、房地產領域:ERC-721標準也可以應用於房地產領域,使得房產的所有權變得更加清晰和透明。例如,通過將房地產轉化為數字代幣,可以更方便地進行交易和管理。

4、證券領域:ERC-721標準還可以用於證券領域,以實現更高效和便捷的證券交易,從而為更多的投資者開放投資市場。

代碼示例:

pragma solidity ^0.6.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract MyRealEstate is ERC721 {
    mapping(address => uint256[]) private _ownedTokens;
    mapping(uint256 => uint256) private _ownedTokensIndex;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    
    constructor() public ERC721("MyRealEstate", "MRE") {}
    
    function mint(address to, uint256 tokenId) public {
        _mint(to, tokenId);
    }
    
    function _mint(address to, uint256 tokenId) internal virtual override {
        super._mint(to, tokenId);
        _ownedTokens[to].push(tokenId);
        _ownedTokensIndex[tokenId] = _ownedTokens[to].length - 1;
    }
    
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        super.transferFrom(from, to, tokenId);
        _removeTokenFromOwnerEnumeration(from, tokenId);
        _addTokenToOwnerEnumeration(to, tokenId);
    }
    
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        uint256 lastTokenIndex = _ownedTokens[from].length - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];
        
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
            _ownedTokens[from][tokenIndex] = lastTokenId;
            _ownedTokensIndex[lastTokenId] = tokenIndex;
        }
        
        _ownedTokens[from].pop();
    }
    
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        _ownedTokens[to].push(tokenId);
        _ownedTokensIndex[tokenId] = _ownedTokens[to].length - 1;
    }
    
    function ownedTokens(address user) public view returns(uint256[] memory) {
        return _ownedTokens[user];
    }
}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/238263.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:10
下一篇 2024-12-12 12:10

相關推薦

  • 未來VIP系統的設計與實現

    本篇文章將從以下幾個方面對未來VIP系統進行詳細的闡述:系統架構、頁面設計、功能實現、安全性保障和未來發展方向。 一、系統架構 未來VIP系統採用了B/S架構,即瀏覽器/服務器架構…

    編程 2025-04-27
  • Python標準庫大全

    Python標準庫是Python程序員必備的工具箱,它包含着豐富的模塊和函數,可實現眾多功能 一、基本數據類型 Python的基本數據類型包括整數、浮點數、複數、布爾值、字符串、字…

    編程 2025-04-27
  • 期貨數據接口 Python:打通數字資產交易數據的關鍵

    本文將從以下幾個方面討論期貨數據接口 Python: 一、數據接口簡介 期貨數據接口是指為期貨從業人員提供用於獲取歷史、實時及未來交易數據的工具。Python是一種常用的編程語言,…

    編程 2025-04-27
  • C++最新標準的詳細闡述

    一、auto關鍵字的使用 auto關鍵字的使用是C++11最受歡迎的新特性之一。使用auto關鍵字可以自動推斷變量的類型,這樣大大減少了代碼的冗餘。例如: auto i = 1; …

    編程 2025-04-25
  • 深入了解標準盒模型

    一、盒模型簡介 盒模型是指用來表示網頁中元素框的一種模型,網頁中的任何元素都可以用一個矩形的盒子來表示。在CSS標準盒模型中,每個盒子由四個部分組成:內容(content)、填充(…

    編程 2025-04-23
  • 人工智能的未來趨勢

    人工智能(Artificial Intelligence,AI)是指一門致力於研究如何使計算機能夠像人一樣地思考、處理信息的學科。隨着計算機技術和數據處理能力的不斷提升,人工智能在…

    編程 2025-04-22
  • 標準盒模型詳解

    一、盒模型概述 在網頁設計中,盒模型是一個很重要的概念。網頁中的每個元素都可以看做是一個盒子,這個盒子包含了內容(content)、內邊距(padding)、邊框(border)和…

    編程 2025-04-13
  • C#界面登場,探究其魅力所在

    C#界面作為.NET框架的一部分,為我們的開發提供了豐富的選擇,並且面對的場景都是豐富多樣的。下面我們將從多個方面對C#界面做出詳細的闡述,幫助我們更好的理解和掌握這一技術。 一、…

    編程 2025-04-02
  • WebJars – 集成Web資產的最佳方式

    WebJars是Java官方維護的一個開源項目,讓你可以使用Maven、Gradle、SBT或者其他的構建工具來輕鬆地將Web前端資產整體集成到你的項目中。WebJars的目標是使…

    編程 2025-02-05
  • JC/T724標準介紹

    一、概述 JC/T724 標準是由中國銀行業清算中心(以下簡稱「清算中心」)頒佈的一項互聯網金融結算基礎標準(以下簡稱「標準」),用於規範互聯網金融機構的賬戶體系、賬戶管理以及清算…

    編程 2025-02-01

發表回復

登錄後才能評論