摘要:被授權或撤權時觸發。計數名下的所有。授權或撤銷權利,對第三方,對所有資產的操作的權利。參數值,表示允許,表示撤銷。而這將導致整個交易被拒絕。拋出異常不正確時,可能指向符合元數據模型的。。可能會出現失效情況被銷毀。
pragma solidity ^0.4.20;
/// Note: the ERC-165 identifier for this interface is 0x80ac58cd.
interface ERC721 /* is ERC165 */ {
//變更NFT所有權
//NFT的創建和銷毀時觸發
//除外情況:創建合約時,不需要transfer也可以創建和分配NFT
//發起transfer時,approved address會被重置為none
event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
//在NFT的approved address變更或重新確認時被觸發。
//zero address代表沒有approved address。
//當i一個transfer事件發生時,approved address會被重置為none。
event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
//operator被授權或撤權時觸發。
//operator可以管理owner 的所有NFT。
event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
//計數owner名下的所有NFT。
//分配NFT給zero address 是無效的。同時,query zero address 的時候,函數拋出異常。
//參數是發起查詢的人。
//返回NFT數量,可能是0。
function balanceOf(address _owner) external view returns (uint256);
//獲取NFT所有者。
//分配NFT給zero address 是無效的。同時,query zero address 的時候,函數拋出異常。
// 參數 _tokenId 是NFT的標識符identifier。
//返回owner地址。
function ownerOf(uint256 _tokenId) external view returns (address);
//將NFT的所有權從一個地址轉移到另一個地址。
//拋出異常的情況包括:
// _from 不是當前所有者,
// _to 是zero address,
//_tokenId 不是有效NFT,
//當轉移完成,函數會校驗_to 是不是一個合約。
//如果是,就會使用_to 來調用onERC721Received 方法,
//并且這個方法,在返回值不是 bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")) 時拋出異常。
// _from 是NFT當前所有者,
// _to 是新所有者,
// _tokenId 是要被轉移的NFT ,
// data是沒有特定格式的數據,用來sent in call to _to
function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;
//如上,只是將data參數置空,“”。
function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
//轉移NFT所有權。
//調用方有責任檢查 _to 是否能夠有效接收NFT,如果無作為可能會導致永久丟失。
//拋出異常:當msg.sender不是當前owner,不是approved address,不是authorized operator。
//三個參數任一無效,則拋出異常。
function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
//為NFT設置或重新確認approved address。
//zero address代表沒有approved address。
//拋出異常:當msg.sender不是當前owner,不是approved address,不是authorized operator。
//_approved 將被設為owner的角色。
//_tokenId 當前被操作的幣。
function approve(address _approved, uint256 _tokenId) external payable;
//授權或撤銷權利,對第三方operator,對msg.sender所有資產的操作的權利。
//觸發ApprovalForAll事件。
//合約必須允許每個owner有多個operator。
//參數 _operator 添加到authorized operators里面。
//參數bool值,true表示允許,false表示撤銷。
function setApprovalForAll(address _operator, bool _approved) external;
//獲取單個NFT的approved address。
//拋出異常:_tokenId無效時。
//_tokenId指代哪個幣。
//返回approved address
function getApproved(uint256 _tokenId) external view returns (address);
//查詢address是否是另一個address的authorized operator 。
//interfaceID是接口標識符,(ERC-165中規定的)。
//ERC-165中規定了,對接口的鑒別。
//返回值為true,代表合約實現了interfaceID這個接口。并且interfaceID 不是 0xffffffff。
//false代表沒實現。
function isApprovedForAll(address _owner, address _operator) external view returns (bool); }
================================================================================================
interface ERC165 {
//查詢一個合約是否實現了這個接口。
function supportsInterface(bytes4 interfaceID) external view returns (bool); }
================================================================================================
/// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02.
interface ERC721TokenReceiver {
//處理NFT的收據。
//ERC721合約在transfer執行后,對接收者recipient調用這個方法。
//如果傳值不對,函數會拋出異常以回復或拒絕這個transfer。而這將導致整個交易被拒絕。
//合約地址總是message sender。
// _operator, 調用函數safeTransferFrom的地址。
//_from,之前的token擁有者。
//_tokenId,被轉移的NFT。
//data,無規定格式的additional數據。
//返回bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")),不然就拋出異常。
function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes _data) external returns(bytes4); }
================================================================================================
//metadata extension是erc721合約的可選項。它允許其他人對智能合約發出有關NFT所代表資產的name和details。
/// Note: the ERC-165 identifier for this interface is 0x5b5e139f.
interface ERC721Metadata / is ERC721 / {
//對NFT的描述性名稱。
function name() external view returns (string _name);
//合約中NFT的簡短名稱。
function symbol() external view returns (string _symbol);
//對指定資產的唯一URI。
//拋出異常:tokenId不正確時,
//URI可能指向(符合元數據JSON模型的)JSON file。。
function tokenURI(uint256 _tokenId) external view returns (string);}
//這是上面提到的"ERC721 Metadata JSON Schema"。
{
"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.", } }}
//enumeration extension是erc721合約的可選項。它能使合約提供完整列表和和可發現。
/// Note: the ERC-165 identifier for this interface is 0x780e9d63.
interface ERC721Enumerable / is ERC721 / {
//計數合約追蹤的NFT。
//合約追蹤的有效NFT,每個NFT都是已分配和可查詢的地址(不能是zero address)
function totalSupply() external view returns (uint256);
//枚舉有效NFT。
//拋出異常: _index >= totalSupply()時。
//(不指定排列順序。)
function tokenByIndex(uint256 _index) external view returns (uint256);
//計算屬于某個owner的NFT數量。
//拋出異常:_index >= balanceOf(_owner) 或zero address。
function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256);}
//關于NFT標識符 NFT Identifiers。
//每個NFT在合約內都有唯一的ID。這個號碼不會變更。這個mapping會全局唯一并呵護規范。
//有些合約會從ID 0 開始自增1。
//調用者不應假設ID號有任何特殊含義,應建議將ID視為“black box”一般。
//元數據選擇(元數據擴展)
//在metadata extension里面需要有name和symbol函數。
//上述兩個函數返回值為空也可以。 //合約可以使用相同的名字和標識。
//提示:其他人合約名稱可能相同。
//NFT和URI相關聯。
//我們希望每個實現都可以受益于此,并給每個NFT都提供metadata。
//URI可能是可變的。
//元數據是以string返回的。當前只在web3調用有效。但前還行,因為暫時鏈上應用沒有特定需求去發出這樣的請求。
//erc721指向total supply的兩個函數:addTokenTo()和 _mint().
//在完全實現的合約里面,調用addTokenTo(),之后super.addTokenTo()允許我們調用addTokenTo()函數。
//在這兩個函數之后,就可以更新全局的ownership變量了。
The functions take in two parameters _to or the address to which the token will be owned and _tokenId or the unique id of the token?—?chosen by whomever you allow to call this function, you’d likely limit this call to the owner of the contract. In this case, the user can choose any unique number id. First, in the ERC721BasicToken contract, we check that the token id is not already owned. Then we set the token owner of the requested token id, and add one to the number of owned tokens of that individual account. Going back to the full implementation contract, we also update the array of the new owner’s (_to)tokens by adding this new token to the end of their ownedTokens array and saving the index of that new token.
luckycoin可能用到的erc721接口
1,生成NFT /發放:
2,查詢NFT:
3,交易NFT,使用NFT參與游戲時發起轉賬,或給其他地址轉NFT:(下面兩個函數二選一使用都可以)
以下函數同上一摸一樣,除了可以加一個類似于備注的data(上面這個函數等同于data置空。)
4,設置合約對單個NFT的操作權限:to是合約。
5設置對某address名下的所有NFT可操作的權限:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/24481.html
摘要:從這節開始,我們將學習代幣標準以及加密收集資產等知識。聲明一個繼承的新合約,命名為。注意目前是一個草稿,還沒有正式商定的實現。所以把這一個可能的實現當作考慮,但不要把它作為代幣的官方標準。 從這節開始,我們將學習代幣, ERC721標準, 以及加密收集資產等知識。 一、代幣 代幣 讓我們來聊聊以太坊上的代幣。 如果你對以太坊的世界有一些了解,你很可能聽過人們聊到代幣——尤其是 ERC2...
摘要:本文就來剖析下什么是是什么在創建代幣一篇,我們講到過代幣,和一樣,同樣是一個代幣標準,官方簡要解釋是,簡寫為,多翻譯為非同質代幣。返回合約代幣符號,盡管是可選,但強烈建議實現,即便是返回空字符串。 本文首發于深入淺出區塊鏈社區原文鏈接:剖析非同質化代幣ERC721-全面解析ERC721標準原文已更新,請讀者前往原文閱讀 什么是ERC-721?現在我們看到的各種加密貓貓狗狗都是基于ERC...
摘要:它和我寫的上一篇源碼分析介紹的有所不同,最小的單位為無法再分割,代表獨一無二的,針對不可置換的的智能合約標準接口。源碼分析到這里就結束了。 ERC721 官方簡介是:A standard interface for non-fungible tokens, also known as deeds.也叫非同質代幣,或者不可置換代幣(NFTs)。提到ERC721,一個好理解的例子就是Cry...
摘要:我們目前正處于一個新興的區塊鏈開發行業中。,一種在以太坊開發人員中流行的新的簡單編程語言,因為它是用于開發以太坊智能合約的語言。它是全球至少萬開發人員使用的世界上最流行的編程語言之一。以太坊,主要是針對工程師使用進行區塊鏈以太坊開發的詳解。 我們目前正處于一個新興的區塊鏈開發行業中。區塊鏈技術處于初期階段,然而這種顛覆性技術已經成功地風靡全球,并且最近經歷了一場與眾不同的繁榮。由于許多...
閱讀 2825·2021-11-25 09:43
閱讀 978·2021-10-11 10:57
閱讀 2477·2020-12-03 17:20
閱讀 3716·2019-08-30 14:05
閱讀 2421·2019-08-29 14:00
閱讀 1990·2019-08-29 12:37
閱讀 1660·2019-08-26 11:34
閱讀 3201·2019-08-26 10:27