ERC721 標(biāo)準(zhǔn)

ERC721 標(biāo)準(zhǔn)

ERC721 是非同質(zhì)化代幣(NFT)標(biāo)準(zhǔn)。ERC721 通過(guò)在以太坊區(qū)塊鏈上創(chuàng)建代幣,使得每個(gè)代幣都是唯一的、不可分割和可跟蹤的。

簡(jiǎn)介

ERC721 標(biāo)準(zhǔn)實(shí)現(xiàn)了以太坊上的非同質(zhì)化代幣。每個(gè) ERC721 代幣都是唯一的,不可分割和可跟蹤的,這意味著每個(gè) ERC721 代幣都具有獨(dú)特的屬性和價(jià)值。ERC721 代幣的價(jià)值通常是由它的稀缺性、獨(dú)特性和可交易性所決定的。

ERC721 合約

ERC721 合約是實(shí)現(xiàn) ERC721 標(biāo)準(zhǔn)的智能合約。通過(guò)使用 ERC721 合約,用戶可以創(chuàng)建、鑄造、銷毀和轉(zhuǎn)移 ERC721 代幣。ERC721 合約必須實(shí)現(xiàn)一組標(biāo)準(zhǔn)的接口,以便其他合約和應(yīng)用程序可以與之交互。這些標(biāo)準(zhǔn)接口確保了 ERC721 合約可以與其他 ERC721 合約和應(yīng)用程序無(wú)縫協(xié)作。

標(biāo)準(zhǔn)接口

以下是 ERC721 標(biāo)準(zhǔn)定義的接口:

ERC721 接口

interface ERC721 /* is ERC165 */ {
    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 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

function balanceOf(address owner) external view returns (uint256);

該函數(shù)接受一個(gè)地址參數(shù) owner,返回該地址所擁有的 ERC721 代幣數(shù)量。

ownerOf

function ownerOf(uint256 tokenId) external view returns (address);

該函數(shù)接受一個(gè)整數(shù)參數(shù) tokenId,返回該代幣的擁有者地址。

safeTransferFrom

function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;

該函數(shù)將一個(gè) ERC721 代幣從一個(gè)地址轉(zhuǎn)移到另一個(gè)地址,并調(diào)用目標(biāo)地址的接收函數(shù),確保轉(zhuǎn)移的安全性。其中參數(shù) from 是當(dāng)前擁有者地址,參數(shù) to 是新的擁有者地址,參數(shù) tokenId 是要轉(zhuǎn)移的代幣 ID,參數(shù) data 是可選的數(shù)據(jù)參數(shù)。

safeTransferFrom

function safeTransferFrom(address from, address to, uint256 tokenId) external;

與上一個(gè)函數(shù)類似,該函數(shù)也將一個(gè) ERC721 代幣從一個(gè)地址轉(zhuǎn)移到另一個(gè)地址,但不會(huì)攜帶額外的數(shù)據(jù)參數(shù)。

transferFrom

function transferFrom(address from, address to, uint256 tokenId) external;

該函數(shù)將一個(gè) ERC721 代幣從一個(gè)地址轉(zhuǎn)移到另一個(gè)地址,其中參數(shù) from 是當(dāng)前擁有者地址,參數(shù) to 是新的擁有者地址,參數(shù) tokenId 是要轉(zhuǎn)移的代幣 ID。

approve

function approve(address to, uint256 tokenId) external;

該函數(shù)將一個(gè) ERC721 代幣的授權(quán)轉(zhuǎn)移到另一個(gè)地址,其中參數(shù) to 是新的授權(quán)地址,參數(shù) tokenId 是要授權(quán)的代幣 ID。

setApprovalForAll

function setApprovalForAll(address operator, bool approved) external;

該函數(shù)將當(dāng)前地址對(duì)所有 ERC721 代幣的授權(quán)轉(zhuǎn)移到另一個(gè)地址,其中參數(shù) operator 是新的授權(quán)地址,參數(shù) approved 表示是否授權(quán)。

getApproved

function getApproved(uint256 tokenId) external view returns (address);

該函數(shù)返回一個(gè) ERC721 代幣當(dāng)前的授權(quán)地址,其中參數(shù) tokenId 是要查詢的代幣 ID。

isApprovedForAll

function isApprovedForAll(address owner, address operator) external view returns (bool);

該函數(shù)返回一個(gè)地址是否已被授權(quán)管理一個(gè)地址所擁有的所有 ERC721 代幣,其中參數(shù) owner 是代幣擁有者地址,參數(shù) operator 是被查詢的

ERC721Metadata 接口

繼承自 ERC721,它定義了一些關(guān)于 NFT 元數(shù)據(jù)的標(biāo)準(zhǔn)方法。

interface ERC721Metadata /* is ERC721 */ {
    function name() external view returns (string memory _name);
    function symbol() external view returns (string memory _symbol);
    function tokenURI(uint256 _tokenId) external view returns (string memory);
}

function name() external view returns (string memory) 返回 NFT 的名稱。

function symbol() external view returns (string memory) 返回 NFT 的簡(jiǎn)稱。

function tokenURI(uint256 tokenId) external view returns (string memory) 返回與指定 NFT 關(guān)聯(lián)的元數(shù)據(jù) URI,該 URI 包含有關(guān) NFT 的詳細(xì)信息,如名稱、描述、圖像等。

這些方法在實(shí)現(xiàn) NFT 元數(shù)據(jù)時(shí)非常有用,因?yàn)樗鼈冊(cè)试S開(kāi)發(fā)者標(biāo)準(zhǔn)化他們的元數(shù)據(jù)格式,并為用戶提供更多信息和交互性。

ERC721Enumerable 接口

繼承了 ERC721 和 ERC165 接口,并新增了以下方法:

interface ERC721Enumerable /* is ERC721 */ {
    function totalSupply() external view returns (uint256);
    function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 _tokenId);
    function tokenByIndex(uint256 _index) external view returns (uint256);
}

totalSupply(): 返回已經(jīng)鑄造的 NFT 的數(shù)量。

tokenByIndex(uint256 index): 返回指定索引處的 NFT ID。在所有鑄造的 NFT 中,它定義了一個(gè)唯一的順序。

tokenOfOwnerByIndex(address owner, uint256 index): 返回指定地址的 NFT 列表中指定索引處的 NFT ID。在所有該地址擁有的 NFT 中,它定義了一個(gè)唯一的順序。

這些方法使得 ERC721 合約支持按照順序枚舉所有已鑄造的 NFT,或者按照擁有者地址枚舉特定地址擁有的 NFT。這對(duì)于一些場(chǎng)景,例如 NFT 游戲,非常有用。

官方資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容