国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

區(qū)塊鏈 | ERC721 標準

這篇具有很好參考價值的文章主要介紹了區(qū)塊鏈 | ERC721 標準。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

正文

1? ERC721 接口

事件

方法

2? ERC165 接口

3? 可選實現接口:ERC721Metadata

4? 可選實現接口:ERC721Enumerable

補充說明

1? NTF IDs

2? 與 ERC-20 的兼容性

3? 交易、挖礦、銷毀


??原文:剖析非同質化代幣 ERC721 標準

??寫在前面:本文屬搬運博客,自己留存學習。

正文

ERC721 作為一個合約標準,提供了在實現 ERC721 代幣時必須要遵守的協(xié)議,要求每個 ERC721 標準合約需要實現「ERC721」及「ERC165」接口。ERC721 標準的合約一旦被部署,它將負責跟蹤在以太坊上創(chuàng)建的代幣。

1? ERC721 接口

ERC721 的接口定義如下。

interface ERC721 {
    /// event
    /// function
}

事件

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);
  • Transfer 事件:當任何 NFT 的所有權通過任何機制發(fā)生變化時觸發(fā)此事件。此事件在 NFT 被創(chuàng)建(from == 0)和銷毀(to == 0)時觸發(fā)。例外情況:在合約創(chuàng)建期間,可以創(chuàng)建并分配任意數量的 NFT 而不觸發(fā) Transfer 事件。在任何轉移時,該 NFT 上的被授權地址將被重置為無。
  • Approval 事件:當 NFT 的被授權地址被更改或確立時觸發(fā)此事件。零地址表示沒有被授權地址。當 Transfer 事件被觸發(fā)時,這也表示該 NFT 上的被授權地址被重置為無。
  • ApprovalForAll 事件:這個事件在操作員為某個所有者啟用或禁用時觸發(fā)。這個操作員可以管理所有者的所有 NFT 。?

方法

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 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 setApprovalForAll(address _operator, bool _approved) external;
function getApproved(uint256 _tokenId) external view returns (address);
function isApprovedForAll(address _owner, address _operator) external view returns (bool);

接口說明:

  • balanceOf( ):返回 _owner 持有的 NFTs 的數量。
  • ownerOf( ):返回 _tokenId 對應代幣的持有者的地址。
  • approve( ):授予地址 _to 具有 _tokenId 的控制權,方法成功后需觸發(fā) Approval 事件。
  • setApprovalForAll( ):授予地址 _operator 具有所有 NFTs 的控制權,成功后需觸發(fā) ApprovalForAll 事件。
  • getApproved( ), isApprovedForAll( ):用于查詢授權。
  • safeTransferFrom( ):轉移 NFT 所有權,一次成功的轉移操作必須發(fā)起 Transer 事件。
  • transferFrom( ):用來轉移 NFTs,方法成功后需觸發(fā) Transfer 事件。調用者自己確認 _to 地址能正常接收 NFT,否則將丟失此 NFT 。此函數實現時需要檢查下面條件的前四條。

也就是說,transferFrom( ) 滿足調用 safeTransferFrom( ) 的條件的前四條即可。

調用 safeTransferFrom( ) 的條件:

  1. 調用者 msg.sender 應該是當前 _tokenId 的所有者或被授權的地址;
  2. _from 必須是 _tokenId 的所有者;
  3. _tokenId 應該是當前合約正在監(jiān)測的 NFTs 中的任何一個;
  4. _to 地址不應該為 0;
  5. 如果 _to 是一個合約,則應該調用它的 onERC721Received 方法,并且檢查其返回值。如果返回值不為 bytes4(keccak256("onERC721Received(address,uint256,bytes)")),則拋出異常。

一個可接收 NFT 的合約必須實現 ERC721TokenReceiver 接口:

interface ERC721TokenReceiver {
    /// @return `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`
    function onERC721Received(address _from, uint256 _tokenId, bytes data) external returns(bytes4);
}

2? ERC165 接口

ERC165 的接口定義如下:

interface ERC165 {
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

ERC165 同樣是一個合約標準,這個標準要求合約提供其實現了哪些接口,這樣在與合約進行交互的時候可以先調用此接口進行查詢。

interfaceID 為函數選擇器,計算方式有兩種,如:bytes4(keccak256('supportsInterface(bytes4)')); 或 ERC165.supportsInterface.selector,多個函數的接口 ID 為函數選擇器的異或值。

就是說可以通過 ERC165 查詢 ERC721 實現了哪些接口?

3? 可選實現接口:ERC721Metadata

ERC721Metadata 接口用于提供合約的元數據:name,symbol 以及 URI,其接口定義如下:

interface ERC721Metadata {
    function name() external pure returns (string _name);
    function symbol() external pure returns (string _symbol);
    function tokenURI(uint256 _tokenId) external view returns (string);
}

接口說明:

  • name( ):返回合約名字,盡管是可選,但強烈建議實現,即便是返回空字符串。
  • symbol( ):返回合約代幣符號,盡管是可選,但強烈建議實現,即便是返回空字符串。
  • tokenURI( ):返回 _tokenId 所對應的外部資源文件的 URI(通常是 IPFS 或 HTTP(S) 路徑)。

外部資源文件需要包含名字、描述、圖片,其格式的要求如下:?

{
    "title": "Asset Metadata",
    "type": "object",
    "properties": {
        "name": {
            "type": "string",
            "description": "Identifies the asset to which this NFT represents",
        },
        "description": {
            "type": "string",
            "description": "Describes the asset to which this NFT represents",
        },
        "image": {
            "type": "string",
            "description": "A URI pointing to a resource with mime type image/* representing the asset to which this NFT represents. Consider making any images at a width between 320 and 1080 pixels and aspect ratio between 1.91:1 and 4:5 inclusive.",
        }
    }
}

采用的是 JSON 格式。

4? 可選實現接口:ERC721Enumerable

ERC721Enumerable 的主要目的是提高合約中 NTF 的可訪問性,其接口定義如下:

interface ERC721Enumerable {
    function totalSupply() external view returns (uint256);
    function tokenByIndex(uint256 _index) external view returns (uint256);
    function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256);
}

接口說明:

  • totalSupply( ):返回 NFT 總量。
  • tokenByIndex( ):通過索引返回對應的 tokenId 。
  • tokenOfOwnerByIndex( ):所有者可以一次擁有多個的 NFT,此函數返回 _owner 擁有的 NFT 列表中對應索引的 tokenId 。

NFT 總量應該就是該 NFT 合約鑄造的 NFT 代幣的總量吧?

補充說明

1? NTF IDs

NTF 的 ID,即 tokenId,在合約中用唯一的 uint265 進行標識,每個 NFT 的 ID 在智能合約的生命周期內不允許改變。推薦的實現方式有:

  • 第一種:從 0 開始,每新加一個 NFT,NTF 的 ID 加 1 。
  • 第二種:使用 sha3 后 uuid 轉換為 NTF 的 ID 。

2? 與 ERC-20 的兼容性

ERC721 標準盡可能遵循 ERC-20 的語義,但由于同質代幣與非同質代幣之間的根本差異,并不能完全兼容 ERC-20 。

3? 交易、挖礦、銷毀

在實現 transter 相關接口時除了滿足上面的的條件外,我們可以根據需要添加自己的邏輯,如加入黑名單等。同時挖礦、銷毀盡管不是標準的一部分,我們可以根據需要實現。


官方:ERC-721: Non-Fungible Token Standard文章來源地址http://www.zghlxwxcb.cn/news/detail-860415.html

到了這里,關于區(qū)塊鏈 | ERC721 標準的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 如何使用Alchemy開發(fā)NFT智能合約(ERC721)

    使用Solidity開發(fā)智能合約并在區(qū)塊鏈上部署可能一開始聽起來有些嚇人:Solidity、安全性、gas優(yōu)化、開發(fā)環(huán)境和gas費用,這些只是你需要了解的一些事情,才能讓你的代碼托管在區(qū)塊鏈上。不用擔心,我們來幫你梳理一下。 不過,幸運的是,在過去幾個月中,已經發(fā)布了許多工具,讓開發(fā)人員可以更輕松地進行智能合約開發(fā)工作。

    2024年02月06日
    瀏覽(20)
  • conflux開發(fā)NFT智能合約(ERC721 & 工廠合約 & 可升級合約)

    以下場景可借鑒本文內容 需要創(chuàng)建很多合約 需要使用conflux代付機制(只需將工廠合約設置為代付,即可無限創(chuàng)建新合約) 合約想要有可升級的能力(如:特殊玩法 or 代碼有bug) ERC-721 NFT 基于以上場景,需要三個主要合約實現 工廠合約 代理合約 邏輯合約 想要完全掌握本文

    2024年01月17日
    瀏覽(26)
  • ERC721標準與加密貓

    2017 年 11 月 28 日,“加密貓”游戲出現在互聯網上。這是基于以太坊的 ERC721 標準(不可互換通證)發(fā)行的加密數字寵物,每一只貓咪各不相同。 加密貓的正式中文名叫“謎戀貓”,游戲的官網稱這些加密貓是“可收藏、可繁殖、討人喜歡的”。用戶可以用以太幣換購這種貓

    2024年01月16日
    瀏覽(21)
  • Solidity合約標準----ERC721

    Solidity合約標準----ERC721

    非同質化token,它依賴于ERC-165 參照官方提供的案例,直接部署到remix,自動下載依賴 https://docs.openzeppelin.com/contracts/4.x/erc721 部署成功后擁有以下功能 1. 設置待測試的4個賬戶 2. 鑄造NFT 3. 查詢NFT數量 4. 依據tokenid查詢NFT屬主 5.部分NFT委托授權第三者 6.查詢NFT是否已被授權 7.由第

    2024年02月02日
    瀏覽(54)
  • 以太坊數字資產的發(fā)行和流通:以太坊上的數字資產定義、ERC 20代幣合約標準、ERC 20標準接口、ERC 721代幣合約標準、

    以太坊設計的目標就是讓各種數字資產能以智能合約的形式運行在以太坊虛擬機上。目前,眾多智能合約中最廣泛應用的是代幣合約(Token Contract)。是負責管理賬戶以及其擁有的代幣的智能合約,實質可以理解為一張賬戶地址和對應賬戶代幣余額的映射表。 即:代幣可以被

    2023年04月11日
    瀏覽(26)
  • 以太坊的演變:EIP、ERC 概念以及革命性的 ERC20、ERC721 和 ERC115 標準

    以太坊改進提案(EIP)代表了以太坊區(qū)塊鏈內協(xié)作進步的頂峰。它們是技術文章或提案,描述對以太坊網絡的建議更改或增強。 這些文檔經過精心制作,呈現了新的功能、流程或環(huán)境,在任何形式的采用或實施之前都需要社區(qū)的審查。 至關重要的是要認識到改進提案的概念

    2024年04月11日
    瀏覽(28)
  • ERC721和加密收藏品(ERC721 & Crypto-Collectibles)

    ERC721和加密收藏品(ERC721 & Crypto-Collectibles)

    唷!這里的氣氛開始升溫了…… 在這節(jié)課中,我們將更深入一些。 我們將討論代幣、ERC721標準和加密可收集資產。 換句話說,我們要做的是讓你可以和朋友交換僵尸。 我們來談談代幣。 如果你在以太坊領域呆過一段時間,你可能聽過人們談論代幣——特別是 ERC20代幣 。 以

    2024年03月11日
    瀏覽(57)
  • ERC20 | ERC-20/ERC-721/ERC-1155/ERC-3525 區(qū)別

    EIP 20 的地址:https://eips.ethereum.org/EIPS/eip-20 ERC 是 Ethereum Request for Comment 的縮寫,也就是以太坊改進建議。提交 ERC 后,以太坊社區(qū)會對這個草案進行評估,最終會接受或者拒絕該建議。如果接受的話,ERC 會被確認為 EIP。 EIP 是 Ethereum Improvement Proposals 的縮寫,也就是被接納的

    2024年02月05日
    瀏覽(21)
  • 【ERC-721與ERC-1155有什么區(qū)別?】

    【ERC-721與ERC-1155有什么區(qū)別?】

    無論您是加密愛好者還是第一次使用密碼,您都可能聽說過以太坊。它是最具影響力的開源區(qū)塊鏈平臺之一,用于創(chuàng)建智能合約、加密貨幣和去中心化應用程序。以太坊的智能合約改變了加密貨幣的世界,區(qū)塊鏈技術現在渴望成為全球多個行業(yè)的標準。 大多數區(qū)塊鏈發(fā)燒友已

    2024年02月01日
    瀏覽(21)
  • Eth Of Erc20 And Erc721

    Eth Of Erc20 And Erc721

    public,可以修飾變量和函數, 被修飾的函數或變量可以被任何合約調用(或訪問),默認的變量和函數使用該屬性。 private,可以修飾變量和函數,被修飾者只能被當前合約內部的代碼所調用(或訪問),不能被外部合約調用或繼承它的子合約調用(或訪問)。 extermal,只能修飾函數

    2024年02月15日
    瀏覽(45)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包