區(qū)塊鏈 --- FT掀潮、NFT、ERC-20協(xié)議和ERC-721協(xié)議

1整以、FT(Fungible Token)

FT即同質(zhì)化代幣胧辽,同質(zhì)化的加密貨幣構(gòu)成了目前市場(chǎng)上大部分的代幣。

FT以這樣的方式配置的數(shù)字資產(chǎn)——即每個(gè)代幣(或代幣的碎片)與下一個(gè)代幣等同公黑。

可替代性是法定貨幣中的一個(gè)特征邑商。例如摄咆,一張20美元的鈔票可以?xún)稉Q成任何其他20美元的鈔票,甚至可以?xún)稉Q成零頭人断。即使不是絕對(duì)的20美元鈔票吭从,它也可以是5美元鈔票的倍數(shù),甚至更少恶迈,總之總量等于20美元涩金。
?

2、NFT(Non-Fungible Token)

??NFT即非同質(zhì)化代幣暇仲,非同質(zhì)化代幣通常是指開(kāi)發(fā)者在以太坊平臺(tái)上根據(jù) ERC-721 標(biāo)準(zhǔn)/協(xié)議所發(fā)行的代幣步做。用來(lái)描述一種獨(dú)特的數(shù)字資產(chǎn),它的所有權(quán)是在區(qū)塊鏈上可以進(jìn)行溯源的奈附。

??NFT 是唯一的全度、不可拆分的 token,所有的藝術(shù)品斥滤,不管是圖書(shū)文字将鸵、音樂(lè)或是影像…等各種形式,甚至是數(shù)字化的收藏品與線上游戲都可以通過(guò) NFT 的特殊認(rèn)證方式來(lái)驗(yàn)證其獨(dú)特與稀有價(jià)值佑颇。

因此NFT 與傳統(tǒng)經(jīng)濟(jì)體系中的收藏品相比具有不同的特征:

  • 所有權(quán):中心化機(jī)構(gòu)(比如游戲運(yùn)營(yíng)方)可以隨意掌控甚至奪走虛擬資產(chǎn)顶掉,而 NFT是玩家錢(qián)包中真正擁有的資產(chǎn)。
  • 永久性:一旦 NFT 被鑄造挑胸,就可以永遠(yuǎn)存在于區(qū)塊鏈上痒筒。
  • 稀缺性可證明:由于所有記錄都可公開(kāi)訪問(wèn),因此可以隨時(shí)確認(rèn) NFT 現(xiàn)存的數(shù)量嗜暴。
  • 出處可證明:可以確切知道誰(shuí)曾持有過(guò)該 NFT凸克,一直追溯到 NFT 的創(chuàng)作者。
  • 可編程性:使用智能合約技術(shù)闷沥,NFT 可以在玩家之間甚至與其他游戲或應(yīng)用之間進(jìn)行交易萎战。
  • 去中心化:經(jīng)濟(jì)以完全信任的方式保持其完整性,一旦啟動(dòng)舆逃,即便離開(kāi)游戲項(xiàng)目方仍然可以由社區(qū)自發(fā)推動(dòng)運(yùn)行蚂维。

?

3、FT和NFT的區(qū)別

同質(zhì)化代幣(Fungible Token路狮, FT) 非同質(zhì)化代幣(Non-Fungible Token)
可互換性 FT 可與同種 FT 進(jìn)行互換虫啥。舉例來(lái)說(shuō),美元可與其他美元進(jìn)行互換奄妨,且不影響價(jià)值涂籽。 不可互換性 NFT 不可與同種 NFT 進(jìn)行互換。如將 NFT 借出砸抛,返還為同一 NFT评雌,而不是其他 NFT树枫。舉例來(lái)說(shuō),自己的出生證明不可與別人進(jìn)行互換
統(tǒng)一性 所有同種 FT 規(guī)格相同景东,代幣之間相同砂轻。 獨(dú)特性 每個(gè) NFT 獨(dú)一無(wú)二,與同種 NFT 各不相同斤吐。
可分性 FT 可劃分為更小單元搔涝,價(jià)值同等即可。舉例來(lái)說(shuō)和措,1 美元可換成 2 個(gè) 50 美分或 4 個(gè) 25 美分庄呈。 不可分性 NFT 不可分割∨哨澹基本單元為一個(gè)代幣抒痒,也只存在一個(gè)代幣。
方便性 易于拆分和交換 防盜性 每個(gè)代幣具有獨(dú)特性颁褂,應(yīng)用場(chǎng)景多種多樣,如游戲傀广、知識(shí)產(chǎn)權(quán)颁独、實(shí)體資產(chǎn)、身份證明伪冰、金融文書(shū)誓酒、票務(wù)等
ERC-20 以太坊區(qū)塊鏈著名協(xié)議,支持發(fā)布了 OMG贮聂、SNC靠柑、TRX 等代幣。 ERC-721 以太坊區(qū)塊鏈新協(xié)議吓懈,支持發(fā)布獨(dú)特的非同質(zhì)化代幣歼冰,最佳用例包括加密貓(CryptoKitties)等加密收藏項(xiàng)目。

?

4耻警、ERC20標(biāo)準(zhǔn)

官方說(shuō)明文檔地址:https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md

??ERC20標(biāo)準(zhǔn)以太坊上的一個(gè)代幣協(xié)議隔嫡,所有基于以太坊開(kāi)發(fā)的代幣合約都遵守這個(gè)協(xié)議。

?

4.1 協(xié)議中包含的方法

//1.name
//返回string類(lèi)型的ERC20代幣的名字甘穿,例如:StatusNetwork
function name() constant returns (string name) 

//2.symbol
//返回string類(lèi)型的ERC20代幣的符號(hào)腮恩,也就是代幣的簡(jiǎn)稱(chēng),例如:SNT
function name() constant returns (string name) 

//3.decimals
//支持幾位小數(shù)點(diǎn)后幾位温兼。如果設(shè)置為3秸滴。也就是支持0.001表示。
function symbol() constant returns (string symbol)

//4.totalSupply
//發(fā)行代幣的總量募判,可以通過(guò)這個(gè)函數(shù)來(lái)獲取荡含。所有智能合約發(fā)行的代幣總量是一定的咒唆,totalSupply必須設(shè)置初始值。如果不設(shè)置初始值内颗,這個(gè)代幣發(fā)行就說(shuō)明有問(wèn)題钧排。
function totalSupply() constant returns (uint256 totalSupply)

//5.balanceOf
//輸入地址,可以獲取該地址代幣的余額均澳。
function balanceOf(address _owner) constant returns (uint256 balance)

//6.transfer
//調(diào)用transfer函數(shù)將自己的token轉(zhuǎn)賬給_to地址恨溜,_value為轉(zhuǎn)賬個(gè)數(shù)
function transfer(address _to, uint256 _value) returns (bool success)

//7.approve
//批準(zhǔn)_spender賬戶(hù)從自己的賬戶(hù)轉(zhuǎn)移_value個(gè)token≌仪埃可以分多次轉(zhuǎn)移糟袁。
function approve(address _spender, uint256 _value) returns (bool success)

//8.transferFrom
//與approve搭配使用,approve批準(zhǔn)之后躺盛,調(diào)用transferFrom函數(shù)來(lái)轉(zhuǎn)移token项戴。
function transferFrom(address _from, address _to, uint256 _value) returns (bool success)

//9.allowance
//返回_spender仍然允許從_owner提取的金額。
function allowance(address _owner, address _spender) constant returns (uint256 remaining)

?

4.2 協(xié)議中包含的事件

//1.Transfer
//在發(fā)生代幣轉(zhuǎn)移時(shí)必須觸發(fā)槽惫,包括生成新代幣
event Transfer(address indexed _from, address indexed _to, uint256 _value)

//2.Approval
//成功調(diào)用approve(address _spender, uint256 _value)方法時(shí)觸發(fā)
event Approval(address indexed _owner, address indexed _spender, uint256 _value)

?

4.3 例子

賬戶(hù)A有1000個(gè)ETH周叮,想允許B賬戶(hù)隨意調(diào)用100個(gè)ETH。

  • A賬戶(hù)按照以下形式調(diào)用approve函數(shù)approve(B,100)
  • 當(dāng)B賬戶(hù)想用這100個(gè)ETH中的10個(gè)ETH給C賬戶(hù)時(shí)界斜,則調(diào)用transferFrom(A, C, 10)
  • 這時(shí)調(diào)用allowance(A, B)仿耽,可以查看B賬戶(hù)還能夠調(diào)用A賬戶(hù)多少個(gè)token。

?

5各薇、ERC-721

官方說(shuō)明文檔:https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md

?

??ERC-721兼容了ERC-20的一些特性项贺,與ERC-20的主要區(qū)別是定義了token的owner, 即每個(gè)token都詳細(xì)記錄它歷史的擁有者峭判,以及定義了token的Metadata, 即元數(shù)據(jù)开缎。ERC-721還需要實(shí)現(xiàn)ERC165中的接口。

?

5.1 ERC165接口

interface ERC165 {
    //ERC165標(biāo)準(zhǔn)要求合約提供其實(shí)現(xiàn)了哪些接口,如若對(duì)應(yīng)接口實(shí)現(xiàn)則返回true
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

?

5.2 ERC-721接口

interface ERC721 /* is ERC165 */ {
        
        //NFT 資產(chǎn)的轉(zhuǎn)移林螃,包括生成新代幣
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);

    //特定 NFT 資產(chǎn)第三方操作的授權(quán)
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);

    //特定地址下所有 NFT 資產(chǎn)第三方操作的授權(quán)
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

    //與ERC20兼容的接口
  
    //代幣名字
    function name() constant returns (string name);
    //代幣符號(hào)
    function symbol() constant returns (string symbol);
    //發(fā)行的總代幣數(shù)
    function totalSupply() constant returns (uint256 totalSupply);
    //_owner擁有的代幣數(shù)
    function balanceOf(address _owner) constant returns (uint balance);
  

        //返回Token擁有者的地址奕删,由于每個(gè)ERC721令牌都是不可替代的,因此它們是唯一的疗认,它通過(guò)唯一ID在區(qū)塊鏈中引用急侥,我們可以使用其ID來(lái)確定Token的所有者。
    function ownerOf(uint256 _tokenId) external view returns (address);

    // _from將_tokenId轉(zhuǎn)移給_to侮邀,轉(zhuǎn)移前會(huì)先檢查是否具備轉(zhuǎn)移該 NFT 的資格
    //調(diào)用者自己確認(rèn)_to地址能正常接收NFT坏怪,否則將永久丟失此NFT
    function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
  
  
    // _from將_tokenId轉(zhuǎn)移給_to
    //要求_tokenId屬于_from
    //要求_tokenId合法,即是當(dāng)前合約正在監(jiān)測(cè)的NFTs 中的任何一個(gè)
    //要求_to的地址不為0绊茧,如果_to是智能合約(地址的size大于0)铝宵,調(diào)用onERC721Received方法
    //安全是指如果交易失敗會(huì)進(jìn)行回滾
    //實(shí)際data為空字符串
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
    
  
    //data是沒(méi)有指定格式的附加數(shù)據(jù)
    //其他與不帶數(shù)據(jù)的safeTransferFrom方法相同
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;

    //我是小氣鬼,只授權(quán)你花一個(gè)
        //允許_approved對(duì)_tokenId的所有權(quán)進(jìn)行操作
    function approve(address _approved, uint256 _tokenId) external payable;
  
    //TA 真的授權(quán)給我花 TA 其中的一個(gè) NFT 了嗎?
    //返回_tokenId的授權(quán)地址
    function getApproved(uint256 _tokenId) external view returns (address);
  
    //我的就是你的鹏秋,全讓你花
    //授予或撤銷(xiāo)_operator所具有的所有NFTs的控制權(quán)尊蚁,成功后觸發(fā)ApprovalForAll事件
    function setApprovalForAll(address _operator, bool _approved) external;
  
    //TA 真的為我傾盡所有了嗎?
    //查詢(xún)_owner所持有的全部NFTs對(duì)_operator的操作授權(quán)狀態(tài)侣夷,true為全授權(quán)操作
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

?

5.3 可選實(shí)現(xiàn)接口:ERC721Metadata

?? Metadata用于定義單個(gè)代幣的唯一特征横朋,為一個(gè)特定的代幣ID提供描述性信息 。以加密貓為例百拓,每只加密貓都有不同的顏色琴锭、形狀、名稱(chēng)等衙传。

interface ERC721Metadata /* is ERC721 */ {
    //代幣名字
    function name() external pure returns (string _name);
    //代幣符號(hào)
    function symbol() external pure returns (string _symbol);
    //返回_tokenId所對(duì)應(yīng)的外部資源文件的URI,外部資源文件(json)需要包含名字决帖、描述呛伴、圖片
    function tokenURI(uint256 _tokenId) external view returns (string);
}

?

5.3.1 外部資源文件的模板
{
    "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."
        }
    }
}

?

5.3.2 Metadata的存儲(chǔ)位置
  • 鏈上:
    • 元數(shù)據(jù)與代幣一起永久存在灾螃,在任何應(yīng)用的生命周期結(jié)束后仍會(huì)存在
    • 元數(shù)據(jù)可以根據(jù)鏈上邏輯進(jìn)行更改
    • 鏈的存儲(chǔ)空間有限
  • 鏈下:通過(guò)tokenURI方法告訴應(yīng)用程序在何處查找給定項(xiàng)的元數(shù)據(jù)

?

5.3.3 ERC-721規(guī)范的NFT一般具有以下屬性

? tokenId:在合約內(nèi)唯一的 NFT ID,在NFT的生命周期中不可改變(要實(shí)現(xiàn)全鏈唯一的必須用(contractAddr, tokenId)組成的元組)

? name:名稱(chēng)扔枫,類(lèi)似于ERC-20的名稱(chēng)

? symbol:符號(hào)俊鱼,類(lèi)似于ERC-20的符號(hào)

? uri:指向外部信息的鏈接刻像,一般是一個(gè)JSON,而在JSON中有進(jìn)一步更加具體的信息

?

5.4 可選實(shí)現(xiàn)接口:ERC721Enumerable

interface ERC721Enumerable /* is ERC721 */ {
    
    //合約當(dāng)前管理的NTFs數(shù)量
    function totalSupply() external view returns (uint256);

    //查詢(xún)索引為_(kāi)index的資產(chǎn)對(duì)應(yīng)的tokenId
    function tokenByIndex(uint256 _index) external view returns (uint256);

    //查詢(xún)_owner擁有的NFT列表中對(duì)應(yīng)索引的tokenId
    function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256);
}

?
如有不對(duì)并闲,煩請(qǐng)指出绎速,感謝~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市焙蚓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌洒宝,老刑警劉巖购公,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異雁歌,居然都是意外死亡宏浩,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)靠瞎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)比庄,“玉大人,你說(shuō)我怎么就攤上這事乏盐〖岩ぃ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵父能,是天一觀的道長(zhǎng)神凑。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么溉委? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任鹃唯,我火速辦了婚禮,結(jié)果婚禮上瓣喊,老公的妹妹穿的比我還像新娘坡慌。我一直安慰自己,他們只是感情好藻三,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布洪橘。 她就那樣靜靜地躺著,像睡著了一般趴酣。 火紅的嫁衣襯著肌膚如雪梨树。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,231評(píng)論 1 299
  • 那天岖寞,我揣著相機(jī)與錄音抡四,去河邊找鬼。 笑死仗谆,一個(gè)胖子當(dāng)著我的面吹牛指巡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播隶垮,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼藻雪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了狸吞?” 一聲冷哼從身側(cè)響起勉耀,我...
    開(kāi)封第一講書(shū)人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蹋偏,沒(méi)想到半個(gè)月后便斥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡威始,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年枢纠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黎棠。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晋渺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脓斩,到底是詐尸還是另有隱情木西,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布随静,位于F島的核電站户魏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叼丑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一关翎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸠信,春花似錦纵寝、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至绰垂,卻和暖如春室奏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背劲装。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工胧沫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人占业。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓绒怨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親谦疾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子南蹂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容