成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

ERC721協(xié)議詳解 --Solidity

tuniutech / 2776人閱讀

摘要:被授權(quán)或撤權(quán)時(shí)觸發(fā)。計(jì)數(shù)名下的所有。授權(quán)或撤銷權(quán)利,對(duì)第三方,對(duì)所有資產(chǎn)的操作的權(quán)利。參數(shù)值,表示允許,表示撤銷。而這將導(dǎo)致整個(gè)交易被拒絕。拋出異常不正確時(shí),可能指向符合元數(shù)據(jù)模型的。??赡軙?huì)出現(xiàn)失效情況被銷毀。

pragma solidity ^0.4.20;

/// Note: the ERC-165 identifier for this interface is 0x80ac58cd.

    interface ERC721 /* is ERC165 */ {

//變更NFT所有權(quán)
//NFT的創(chuàng)建和銷毀時(shí)觸發(fā)
//除外情況:創(chuàng)建合約時(shí),不需要transfer也可以創(chuàng)建和分配NFT
//發(fā)起transfer時(shí),approved address會(huì)被重置為none

        event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);

//在NFT的approved address變更或重新確認(rèn)時(shí)被觸發(fā)。
//zero address代表沒有approved address。
//當(dāng)i一個(gè)transfer事件發(fā)生時(shí),approved address會(huì)被重置為none。

        event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);

//operator被授權(quán)或撤權(quán)時(shí)觸發(fā)。
//operator可以管理owner 的所有NFT。

        event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

//計(jì)數(shù)owner名下的所有NFT。
//分配NFT給zero address 是無(wú)效的。同時(shí),query zero address 的時(shí)候,函數(shù)拋出異常。
//參數(shù)是發(fā)起查詢的人。
//返回NFT數(shù)量,可能是0。

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

//獲取NFT所有者。
//分配NFT給zero address 是無(wú)效的。同時(shí),query zero address 的時(shí)候,函數(shù)拋出異常。
// 參數(shù) _tokenId 是NFT的標(biāo)識(shí)符identifier。
//返回owner地址。

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

//將NFT的所有權(quán)從一個(gè)地址轉(zhuǎn)移到另一個(gè)地址。
//拋出異常的情況包括:
// _from 不是當(dāng)前所有者,
// _to 是zero address,
//_tokenId 不是有效NFT,
//當(dāng)轉(zhuǎn)移完成,函數(shù)會(huì)校驗(yàn)_to 是不是一個(gè)合約。
//如果是,就會(huì)使用_to 來調(diào)用onERC721Received 方法,
//并且這個(gè)方法,在返回值不是 bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")) 時(shí)拋出異常。
// _from 是NFT當(dāng)前所有者,
// _to 是新所有者,
// _tokenId 是要被轉(zhuǎn)移的NFT ,
// data是沒有特定格式的數(shù)據(jù),用來sent in call to _to

        function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;

//如上,只是將data參數(shù)置空,“”。

        function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;

//轉(zhuǎn)移NFT所有權(quán)。
//調(diào)用方有責(zé)任檢查 _to 是否能夠有效接收NFT,如果無(wú)作為可能會(huì)導(dǎo)致永久丟失。
//拋出異常:當(dāng)msg.sender不是當(dāng)前owner,不是approved address,不是authorized operator。
//三個(gè)參數(shù)任一無(wú)效,則拋出異常。

        function transferFrom(address _from, address _to, uint256 _tokenId) external payable;

//為NFT設(shè)置或重新確認(rèn)approved address。
//zero address代表沒有approved address。
//拋出異常:當(dāng)msg.sender不是當(dāng)前owner,不是approved address,不是authorized operator。
//_approved 將被設(shè)為owner的角色。
//_tokenId 當(dāng)前被操作的幣。

        function approve(address _approved, uint256 _tokenId) external payable;

//授權(quán)或撤銷權(quán)利,對(duì)第三方operator,對(duì)msg.sender所有資產(chǎn)的操作的權(quán)利。
//觸發(fā)ApprovalForAll事件。
//合約必須允許每個(gè)owner有多個(gè)operator。
//參數(shù) _operator 添加到authorized operators里面。
//參數(shù)bool值,true表示允許,false表示撤銷。

        function setApprovalForAll(address _operator, bool _approved) external;

//獲取單個(gè)NFT的approved address。
//拋出異常:_tokenId無(wú)效時(shí)。
//_tokenId指代哪個(gè)幣。
//返回approved address

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

//查詢address是否是另一個(gè)address的authorized operator 。
//interfaceID是接口標(biāo)識(shí)符,(ERC-165中規(guī)定的)。
//ERC-165中規(guī)定了,對(duì)接口的鑒別。
//返回值為true,代表合約實(shí)現(xiàn)了interfaceID這個(gè)接口。并且interfaceID 不是 0xffffffff。
//false代表沒實(shí)現(xiàn)。

        function isApprovedForAll(address _owner, address _operator) external view returns (bool);
    }

================================================================================================

    interface ERC165 {

//查詢一個(gè)合約是否實(shí)現(xiàn)了這個(gè)接口。

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

================================================================================================
/// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02.

    interface ERC721TokenReceiver {

//處理NFT的收據(jù)。
//ERC721合約在transfer執(zhí)行后,對(duì)接收者recipient調(diào)用這個(gè)方法。
//如果傳值不對(duì),函數(shù)會(huì)拋出異常以回復(fù)或拒絕這個(gè)transfer。而這將導(dǎo)致整個(gè)交易被拒絕。
//合約地址總是message sender。
// _operator, 調(diào)用函數(shù)safeTransferFrom的地址。
//_from,之前的token擁有者。
//_tokenId,被轉(zhuǎn)移的NFT。
//data,無(wú)規(guī)定格式的additional數(shù)據(jù)。
//返回bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")),不然就拋出異常。

        function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes _data) external returns(bytes4);
     }

================================================================================================
//metadata extension是erc721合約的可選項(xiàng)。它允許其他人對(duì)智能合約發(fā)出有關(guān)NFT所代表資產(chǎn)的name和details。
/// Note: the ERC-165 identifier for this interface is 0x5b5e139f.
interface ERC721Metadata / is ERC721 / {
//對(duì)NFT的描述性名稱。

function name() external view returns (string _name);

//合約中NFT的簡(jiǎn)短名稱。

function symbol() external view returns (string _symbol);

//對(duì)指定資產(chǎn)的唯一URI。
//拋出異常:tokenId不正確時(shí),
//URI可能指向(符合元數(shù)據(jù)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合約的可選項(xiàng)。它能使合約提供完整列表和和可發(fā)現(xiàn)。
/// Note: the ERC-165 identifier for this interface is 0x780e9d63.
interface ERC721Enumerable / is ERC721 / {
//計(jì)數(shù)合約追蹤的NFT。
//合約追蹤的有效NFT,每個(gè)NFT都是已分配和可查詢的地址(不能是zero address)

function totalSupply() external view returns (uint256);

//枚舉有效NFT。
//拋出異常: _index >= totalSupply()時(shí)。
//(不指定排列順序。)

function tokenByIndex(uint256 _index) external view returns (uint256);

//計(jì)算屬于某個(gè)owner的NFT數(shù)量。
//拋出異常:_index >= balanceOf(_owner) 或zero address。

function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256);
}

//關(guān)于NFT標(biāo)識(shí)符 NFT Identifiers。
//每個(gè)NFT在合約內(nèi)都有唯一的ID。這個(gè)號(hào)碼不會(huì)變更。這個(gè)mapping會(huì)全局唯一并呵護(hù)規(guī)范。
//有些合約會(huì)從ID 0 開始自增1。
//調(diào)用者不應(yīng)假設(shè)ID號(hào)有任何特殊含義,應(yīng)建議將ID視為“black box”一般。

//NFT可能會(huì)出現(xiàn)失效情況(被銷毀)。

//元數(shù)據(jù)選擇(元數(shù)據(jù)擴(kuò)展)
//在metadata extension里面需要有name和symbol函數(shù)。
//上述兩個(gè)函數(shù)返回值為空也可以。 //合約可以使用相同的名字和標(biāo)識(shí)。
//提示:其他人合約名稱可能相同。
//NFT和URI相關(guān)聯(lián)。
//我們希望每個(gè)實(shí)現(xiàn)都可以受益于此,并給每個(gè)NFT都提供metadata。
//URI可能是可變的。
//元數(shù)據(jù)是以string返回的。當(dāng)前只在web3調(diào)用有效。但前還行,因?yàn)闀簳r(shí)鏈上應(yīng)用沒有特定需求去發(fā)出這樣的請(qǐng)求。

//可以有的其他考慮:1,把每個(gè)資產(chǎn)的元數(shù)據(jù)都放在鏈上(過于昂貴)2使用url模版請(qǐng)求元數(shù)據(jù)(url模版并不適用于所有的url模式)3,多地址網(wǎng)絡(luò)地址(還不成熟)。

//erc721指向total supply的兩個(gè)函數(shù):addTokenTo()和 _mint().
//在完全實(shí)現(xiàn)的合約里面,調(diào)用addTokenTo(),之后super.addTokenTo()允許我們調(diào)用addTokenTo()函數(shù)。
//在這兩個(gè)函數(shù)之后,就可以更新全局的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 /發(fā)放:

2,查詢NFT:

3,交易NFT,使用NFT參與游戲時(shí)發(fā)起轉(zhuǎn)賬,或給其他地址轉(zhuǎn)NFT:(下面兩個(gè)函數(shù)二選一使用都可以)

以下函數(shù)同上一摸一樣,除了可以加一個(gè)類似于備注的data(上面這個(gè)函數(shù)等同于data置空。)

4,設(shè)置合約對(duì)單個(gè)NFT的操作權(quán)限:to是合約。

5設(shè)置對(duì)某address名下的所有NFT可操作的權(quán)限:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/24481.html

相關(guān)文章

  • 以太坊開發(fā)實(shí)戰(zhàn)學(xué)習(xí)-ERC721標(biāo)準(zhǔn)(七)

    摘要:從這節(jié)開始,我們將學(xué)習(xí)代幣標(biāo)準(zhǔn)以及加密收集資產(chǎn)等知識(shí)。聲明一個(gè)繼承的新合約,命名為。注意目前是一個(gè)草稿,還沒有正式商定的實(shí)現(xiàn)。所以把這一個(gè)可能的實(shí)現(xiàn)當(dāng)作考慮,但不要把它作為代幣的官方標(biāo)準(zhǔn)。 從這節(jié)開始,我們將學(xué)習(xí)代幣, ERC721標(biāo)準(zhǔn), 以及加密收集資產(chǎn)等知識(shí)。 一、代幣 代幣 讓我們來聊聊以太坊上的代幣。 如果你對(duì)以太坊的世界有一些了解,你很可能聽過人們聊到代幣——尤其是 ERC2...

    android_c 評(píng)論0 收藏0
  • 區(qū)塊鏈技術(shù)學(xué)習(xí)指引

    摘要:引言給迷失在如何學(xué)習(xí)區(qū)塊鏈技術(shù)的同學(xué)一個(gè)指引,區(qū)塊鏈技術(shù)是隨比特幣誕生,因此要搞明白區(qū)塊鏈技術(shù),應(yīng)該先了解下比特幣。但區(qū)塊鏈技術(shù)不單應(yīng)用于比特幣,還有非常多的現(xiàn)實(shí)應(yīng)用場(chǎng)景,想做區(qū)塊鏈應(yīng)用開發(fā),可進(jìn)一步閱讀以太坊系列。 本文始發(fā)于深入淺出區(qū)塊鏈社區(qū), 原文:區(qū)塊鏈技術(shù)學(xué)習(xí)指引 原文已更新,請(qǐng)讀者前往原文閱讀 本章的文章越來越多,本文是一個(gè)索引帖,方便找到自己感興趣的文章,你也可以使用左側(cè)...

    Cristic 評(píng)論0 收藏0
  • 剖析非同質(zhì)化代幣ERC721-全面解析ERC721標(biāo)準(zhǔn)

    摘要:本文就來剖析下什么是是什么在創(chuàng)建代幣一篇,我們講到過代幣,和一樣,同樣是一個(gè)代幣標(biāo)準(zhǔn),官方簡(jiǎn)要解釋是,簡(jiǎn)寫為,多翻譯為非同質(zhì)代幣。返回合約代幣符號(hào),盡管是可選,但強(qiáng)烈建議實(shí)現(xiàn),即便是返回空字符串。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:剖析非同質(zhì)化代幣ERC721-全面解析ERC721標(biāo)準(zhǔn)原文已更新,請(qǐng)讀者前往原文閱讀 什么是ERC-721?現(xiàn)在我們看到的各種加密貓貓狗狗都是基于ERC...

    Sike 評(píng)論0 收藏0
  • OpenZeppelin ERC721源碼分析

    摘要:它和我寫的上一篇源碼分析介紹的有所不同,最小的單位為無(wú)法再分割,代表獨(dú)一無(wú)二的,針對(duì)不可置換的的智能合約標(biāo)準(zhǔn)接口。源碼分析到這里就結(jié)束了。 ERC721 官方簡(jiǎn)介是:A standard interface for non-fungible tokens, also known as deeds.也叫非同質(zhì)代幣,或者不可置換代幣(NFTs)。提到ERC721,一個(gè)好理解的例子就是Cry...

    ctriptech 評(píng)論0 收藏0
  • 區(qū)塊鏈開發(fā)中使用的最流行的編程語(yǔ)言

    摘要:我們目前正處于一個(gè)新興的區(qū)塊鏈開發(fā)行業(yè)中。,一種在以太坊開發(fā)人員中流行的新的簡(jiǎn)單編程語(yǔ)言,因?yàn)樗怯糜陂_發(fā)以太坊智能合約的語(yǔ)言。它是全球至少萬(wàn)開發(fā)人員使用的世界上最流行的編程語(yǔ)言之一。以太坊,主要是針對(duì)工程師使用進(jìn)行區(qū)塊鏈以太坊開發(fā)的詳解。 我們目前正處于一個(gè)新興的區(qū)塊鏈開發(fā)行業(yè)中。區(qū)塊鏈技術(shù)處于初期階段,然而這種顛覆性技術(shù)已經(jīng)成功地風(fēng)靡全球,并且最近經(jīng)歷了一場(chǎng)與眾不同的繁榮。由于許多...

    2shou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<