謎戀貓這個遊戲大概是從去年12月份開始火起來的,那時候我也花了些時間在玩,後來我發現一個頗有意思的現象:一些技術玩家能夠對不少數據進行統計。當時我就想他們能作到我也能夠。後來我就結合這個遊戲學習以太坊技術,包括本身寫程序,如今我能夠自動實現買貓賣貓,好比在我如今這個分享的過程當中,若是有一隻貓低於個人預計價格,就可能會自動買入。今天我將從七個方面和你們分享區塊鏈遊戲謎戀貓 CryptoKitties。算法
如圖所示是謎戀貓的官方首頁,每隻貓都會標註上主要特色:可收藏、可繁殖、討人喜歡等。底下是它的主頁,你們想玩的話能夠登陸這個網址。數據庫
上圖展現的是謎戀貓的一些官方介紹,謎戀貓是世界首款區塊鏈遊戲,這裏最關鍵的是說每隻貓都是獨一無二的,100%歸你全部,沒法被複制、拿走或銷燬。其實這裏我是有疑問的,沒法被複制或拿走,就至關於什麼都在區塊鏈上,貓的使用權、貓的ID(每一個貓都有一個編號)、貓的基因,這個字符串都在區塊鏈上。可是貓的圖片是在中心化的服務器上,包括貓的一些其餘屬性,可能就是在它們公司的服務器上,並非說100%都在區塊鏈上面,這一點你們要理解。編程
可能有些人對它有誤解,覺得全部的數據都在區塊鏈上面,實際上它的不少數據,特別是圖片數據存在區塊鏈上的成本過高了,因此仍是在它們公司服務器上保存着。貓的買賣主要是經過區塊鏈進行的,拍賣機制在區塊鏈上,包括出售、配對等。瀏覽器
與傳統的收藏品不一樣的是,兩隻謎戀貓能夠交配繁殖生出一個全新的貓,這也是這個遊戲有趣的地方,你能夠本身買兩隻貓,而後能夠逐漸生出不少貓,並且在生產的過程當中也會有一些驚喜,好比可能兩隻普通的貓能夠生出限量版的貓,限量版的貓會比通常貓值錢。安全
下面咱們來看幾隻典型的貓。服務器
這是1號貓,1號貓是0代貓,0代貓一共5萬隻,系統在寫到合約代碼中的時候就有一個上限:5萬。1號貓也是專供貓,意味着圖片通過專門設計,而不是經過程序生成。還稱爲創始貓,創始貓一共100只,編號從1-100,這個貓的成交價格是246.9ETH,至關於100萬人民幣左右。微信
這是18號貓,這個圖片是程序自動生成的,這個貓的成交價格是253.3ETH,是全部貓的成交價格記錄中最高的,這是我經過數據庫統計出來的。網絡
這隻貓是前幾天剛成交的一隻0代貓,這個就很便宜了,0.18ETH成交。由於0代貓的價格有必定的機制,基本取決於市場供求,買的人多價格就高,買的人少價格就低了。編程語言
上圖右上角是一隻貓,它有本身的父母和後代,還有一些本身獨有的屬性。函數
還有部分限量版的奇異貓(fancy),是公司專門找設計師設計出來的圖片,並非經過程序生成的,每種類型都有上限。剛開始的時候是沒有上限的,可是後來玩家買的多了,繁殖的也多了,量一多就不值錢了,因此公司才決定,變成限量版。限量版相對更有收藏價值。
以太坊:可編程的區塊鏈
比特幣是公認的區塊鏈1.0版本,以太坊就是業界公認的區塊鏈2.0版本,至關於操做系統,在它上面能夠運行應用,包括謎戀貓。
它有本身的編程語言solidity,這個編程語言是準圖靈完備的。它受限於區塊鏈上的運行資源,每次運行的時候基本上要在很短期內完成一個區塊的打包。舉個例子,咱們要算數億數據或一個很是複雜的數據,要跑1分鐘或10分鐘,這種確定是沒辦法在區塊鏈、以太坊上運行的,但若是是跑這種一兩秒鐘或幾毫秒是能夠的。它也不支持日常咱們開發程序或定時任務的概念,好比不少程序網站,天天要跑報表、統計前一天的數據、天天晚上或凌晨觸發跑腳本等。對於以太坊來講,solidity作不了讓它某一個時間內來運行某個代碼,只能外地主動觸發,因此它至關於準圖靈完備。
約每15秒出一個區塊,比特別大概是每十分鐘出一個塊。目前一個塊獎勵礦工3ETH。另外以太坊不一樣於比特幣的是,它沒有總量限制。
它有本身的ERC-20代幣,正是由於以太坊有這個代幣,因此不少I-C-O項目都用以太坊來做代幣發行。用ERC-20發代幣有什麼好處呢?可能只須要拿一份代碼拷貝過來改幾個參數、改一下名字和發佈的總限量,等10來分鐘就能夠發出一份代幣,發幣的成本很是低。
**它解決了信任問題,能保證公開的代碼和運行的代碼是同一份。**舉個例子,年會抽獎大可能是有一個代碼運行的程序,當獎品價值足夠大的時候,咱們不知道最後的算法究竟是否會有人做弊。以太坊能夠公開代碼,也能夠經過區塊鏈作驗證,保證真正運行的代碼就是公開的代碼。
資產token化,好比積分、公司收益權、內部系統代幣等。
這是一個代幣,裏邊的代碼包括驗證的部分,有一個「yes」的標誌,表明這個代碼是通過驗證的。驗收的機制是什麼,代碼全部者或其餘人均可以來驗證,在上面把源代碼複製過去,點一下按鈕,選編譯器的版本,由於不一樣編譯器可能生成二進制代碼是不一樣的,選完版本以後它會跟區塊鏈的內容比對,由於區塊鏈的數據是二進制的,編譯後的內容,若是比對後徹底同樣,就認爲這個代碼是通過驗證的。因此我以爲以太坊這個技術解決了代碼公開驗證問題,保證公開的那一份代碼就是區塊鏈上運行的代碼,這樣做弊的成本就很是高了。
圖中網址是以太坊基金會運行的網站,其餘開發者也能夠在本身的服務器上跑一個節點,也能夠驗證,一旦代碼公開通過驗證以後,基本上你們就會認爲這個代碼是區塊鏈上的代碼,信任問題獲得解決。
包括這個謎戀貓,前面咱們說到有人花200多ETH,至關於100萬人民幣,若是是打給一個小公司,假如你對這個公司不熟悉,你會放心將這筆錢打給他嗎?不少人會持否認態度, 這就會產生嚴重的信任問題。
可是經過區塊鏈技術,錢不是打給公司,而是直接轉給賣貓的人,交易徹底在區塊鏈上進行,不須要中介方,由於以太坊的代碼都公開了,你們以爲不存在安全問題。
上圖底下的連接裏有EIP-20的協議,EIP-20是以太坊的一個協議,它會涉及到一些接口,你們能夠理解成Java裏的接口技術,不少編程語言支持接口,EIP-20也是定義一個編程語言的接口,好比總供應量是多少,某個地址的餘額是多少,某個地址能夠轉給另外地址的額度、轉帳從一個地址的轉多少轉給誰……等等。
實現這些接口有什麼好處呢?在比特幣的時候,若是想發一個代幣或者一個新的幣,能夠作分叉幣,分叉幣的成本很高,須要有本身的錢包,包括交易所要開發錢包技術來支持。不少錢包是支持EIP-20代幣的,有了這種支持,成本天然就降低了,因此EIP-20至關於創建了一個很好的生態,不須要本身的錢包、不須要交易所支持、不須要額外進行復雜的開發,就能夠完成轉帳、提現等功能。
以太坊單位
這是以太坊的一些單位,最小的單位是wei。轉帳的時候可能會涉及到一些比較高級的模式,好比自動轉帳費,用積分比較多。通常轉帳網絡大概是兩三Gwei的樣子,擁堵的時候多是五六Gwei。以太坊謎戀貓遊戲出來時,不少玩家在玩,形成擁堵,最火爆的時候,大概12月初,基本上轉帳得花六十幾Gwei,才能短期被接受,那個遊戲最火的時候把以太網整個網絡都拖垮了。
以太坊的交易及費用
以太坊的手續費和比特幣不太同樣,比特幣的話直接一個值多少按照字節數,一個字節多少。以太坊有一個gas_price的概念,就是轉帳須要必定的燃料,而後須要燃料的價格,你給它設定一個價格,總共的手續費就等於這個燃料數量*燃料價格。
以太坊有兩種帳戶:普通帳戶和合約帳戶。普通帳戶轉帳21000就能夠了。合約帳戶的額度會大一些,由於合約帳戶除了轉帳之外,可能還會涉及到一些代碼操做和執行,合約帳戶的gas使用量視狀況而定,和指令類型、數量和存儲相關,存一個名字代價確定就小,但若是存一張圖片,代價就很高了,由於這意味着全部區塊和節點都要幫你存這張圖片,費用固然就很高了。
**異常發生時,不會修改數據,但會消耗gas。**就是說好比你想轉1個以太幣,可是額度只有0.5了,額度不足會產生異常,異常以後數據不會發生改變,可是會消耗gas
多餘的gas會退回。正常狀況下,轉帳的時候gas值是手動設置的,好比我轉帳設成110000,實際上只須要12000,那剩下的79000是會退回去的。
每交易一次,nonce++。對以太坊帳戶來講,它內部有個技術初始化是0,每轉帳一次,每進行一個交易就會加1。
未被打包時,相同的nonce值能夠覆蓋以前的交易。舉個例子,我如今轉帳給你,我轉5個,設置1Gwei,而後發現網絡擁堵,根本沒到帳,這時我能夠改一下,再作一次一樣的轉帳,可是設置改爲10Gwei,這時這個轉帳操做會覆蓋以前的,改爲10Gwei後很快就能夠轉帳成功了。
若是有低nonce值還未被打包,新的交易須要先等低nonce值的交易被打包。這是我在實際開發過程當中遇到的問題,個人帳號自己就有程序代碼在跑,手動模式下也能夠操做,我爲了省手續費就設置了1Gwei,程序自動買賣。有一天中午,我認爲謎戀貓編號3000之內的低於0.5,就是遠低於市場價格,而後真有人掛出來了,是0.5,我那個程序立刻就執行自動買入,但過了一下子我發現這個貓還沒成交,當時正在和別人討論也沒注意,後來我打開交易數據看到提示說:有一個編號更低的交易還在排隊,因此這個交易滯後了。這時那個貓已經被被人買走了,我趕快手動操做,用另外的帳號以0.51買入了,要是當時沒有這個問題,我可能能夠同時買到兩隻貓。
謎戀貓的智能合約一共有四個,在區塊鏈上的有三個是開源的,其核心部分包括拍賣、出售、配種相關的是開源的,基因部分沒開源,主要是你們都知道那部分代碼開源的話,部分玩家能夠經過這些代碼生成一些限量版的貓。雖然基因部分沒有開源,但其實也猜的差很少了,有一些規則找出來,就能夠破解。
這個網站自己至關於一個去中心化的交易所,是一個DApp。DApp是什麼概念呢?有一部分代碼運行在區塊鏈上,這一部分稱爲去中心的,還有一部分代碼,好比用戶交互,總不能讓普通用戶在電腦上敲命令代碼執行或調用API,這不太現實,因此須要普通APP來包裝,好比經過手機APP或網頁瀏覽器的形式來實現。因此DApp包含兩部分,一部分是智能合約代碼,另外一部分就是傳統的那種網站應用或手機APP應用。
圖中我提出一個問題:**智能合約的代碼可否修改?**一旦部署上去以後,單獨看那份代碼是不能改的,但實際上也不是說絕對不能改,由於你能夠部署新的代碼,它有指針的概念,你能夠換一個東西,把那個地址指向另一個合約,這樣的話就能夠升級了,不然一旦發佈就可能會有bug,因此通常都會設計一套機制。
咱們來看它的代碼,這個代碼沒多少,整個函數的代碼大概是2000行,出售相關的更少一些,配種相關的大概五六百行,因此一共大概3000行代碼。固然基因那部分不知道,不過也不會太多,估計就幾百行。因此它總共在智能合約上的代碼是不多的,大部分仍是在中心化服務器上。區塊鏈上的應用來講沒有那麼難,通常是應用最核心的一部分邏輯在區塊鏈上,比較少的代碼就完成了。
簡單看一部分,好比生貓的函數,它內部會傳參數,媽媽的ID、爸爸的ID、第多少代、基因是什麼等,會有一些操做觸發事件,觸發事件後你能夠根據這個來作一些事情。我經過看代碼發現一些規律,它裏面有一塊冷卻時間,就是每生一次貓以後,下次生貓的時間就會變長。這個冷卻時間一直在變,從一分鐘兩分鐘到五分鐘,最後變成七天了。
這就意味着每生一次貓以後這個冷卻時間會日後加,好比貓剛買回來的時候,可能一兩分鐘就能生一隻小貓,生了幾回以後,須要等的時間愈來愈長,這套機制已經寫在裏面了,無法篡改的。
ETH錢包即用戶ID
我玩這個遊戲最大的啓發就是這句話:ETH錢包就是用戶ID。歷來任何涉及到用戶我的數據的,好比帳號、ID碼,都是郵箱或者手機號、微信號等,謎戀貓這個遊戲,是經過錢包登陸,不須要註冊帳戶,它裏面有一個It must的插件,這是以太幣的錢包服務提供商作的錢包應用。固然也會涉及到用戶的驗證,即當前用戶究竟是誰,因此會有簽名的概念。公鑰私鑰理論就不展開講了,能夠經過這套機制來驗證。
買貓
這是買貓的頁面,買貓的時候你能夠在搜索主頁上按價格或其餘類型排序。若是想買貓能夠登陸這個網站,買兩隻最低價格的貓,兩隻貓能夠生出一隻小貓,而後把你的貓掛到市場上去,體驗一下。
賣貓、繁殖、贈送
貓的投資類型能夠從代數、休息時間、種類等方面來看。
首先看一下價格,從高到低,從低到高,最低的是0.002。可能你要是掛0.01的話,應該很快就會被買走,可是若是掛0.002的話,就不必定了,由於大概好幾頁的價格都是這樣,貓太多了。
還能夠按照代數來篩選,好比0代貓,這樣數量就有限了。如今市場上賣的一共是1291只貓,其中0代貓並不太多,由於總共上限才10000只左右,因此市場上大概只有1000多隻0代貓。
還能夠根據休息時間來作篩選。還有普通貓和限量貓,限量貓的數量不多,價格也會很高。有些貓可能會獎勵給運營、推廣或其餘一些幫助運營社區的用戶,有5000只0代貓用於運營推廣。
掛單的價格會有階梯價格,官方平臺每期發佈一隻0代貓,價格會從一個初始價格降到0。我的用戶的話取決於本身的設置,實行一個起止時間,買賣貓的時候能夠設計開始的時間和終止的時間,若是到了那個時間以後還沒人買,那麼最後的價格就變成一個終止的價格一直掛着,除非你不想賣給別人了,取消這個拍賣,這樣的話就買不到了。若是想賣了,能夠在喂貓的頁面裏選擇相關的按鈕,好比出售、贈送等。
生貓規則
生貓的規則:
任意貓均可以充當爸爸或媽媽的角色。
交配時不能亂倫。
每生育一次,回覆時間變長,直到須要7天時間恢復。這裏有個小技巧,想快速傳播的話,要選擇恢復時間快的做爲媽媽,由於這個生貓時間取決於媽媽的恢復時間。
孕期=懷孕後媽媽的恢復時間。
小貓代數=max(爸爸的代數,媽媽的代數)+1。若是爸爸媽媽都是0代,生出來的小貓就是1代;若是爸爸媽媽一個是1代一個是2代,生出來的小貓就是3代。
小貓恢復時間cooldown_index=min(小貓代數/2,13)。小貓恢復時間取決於小貓自身的代數,它是取小貓代數除以2,而後和13二者之間取一個小的。最大恢復時間是一週。以下圖。
在其餘條件相同的狀況下,貓的恢復時間越短,市場價格越高。
在基因工程方面也有一些生貓規則,好比你想用兩隻普通的貓生出一隻價格相對高一些的貓,有一些屬性。推薦兩篇文章《變異》《生育結果》,感興趣的話能夠看看。
關於基因這塊我尚未進行過深刻研究,有些玩家玩得特別溜,官方每次發佈一些新貓或限量貓都會給一些提示,這些玩家就能夠根據提示從貓庫裏找出合適的貓來生,由於第一個出現限量貓以後,每每都是比較值錢的,而他們利用提示和基因研究,用普通貓來生限量貓,成本更低。固然這也不是100%就能成功的。
我用的是一種比較笨的辦法,就是買兩隻限量貓讓它們生出一隻限量貓。
這是限量版貓,在網站中能夠點擊查看限量多少隻,每隻貓的編號多少。限量貓有一個市場價格,在買家之間造成必定的規律。
0代貓共5萬隻,其中5000只用於推廣,另外4.5萬隻每15分鐘發佈一隻,2018年11月份發佈完。
新發布0代貓的最高價=近5萬隻平臺發佈的0代貓第一次成交價格平均值*1.5。
新發布0代貓的最低價=0,階梯價格時間24小時。
少許專供貓。
每種奇異貓都限量發行,剛開始不限量,2018年3月份剛修改的規則。
上圖雖然是開個小玩笑,可是真的有人滿倉0代貓。
有一個圈內很是有名的玩家,上圖的帳號裏大概存了616只0代貓,他在買入了不少貓,直接致使市場上的0代貓價格大漲,從原來的每隻0.1ETH到後來的1.5 ETH。他應該還有其餘帳戶,加起來大概買了市場流通的0代貓的1/10,目前市場上流通的0代貓爲1萬隻左右,他買了1000左右。
這也是一位屯貓大戶,有15只100編號之內的0代貓,100編號之內的0代貓最近成交價格最低的是20ETH,也有30/40/50/60甚至100多的,取決於市場價格,有一些他可能沒掛出來,認爲還會升值。
這是一個生貓小王子,已經把貓生到657代了,意味着至少要生657次,由於每次代數只能加1,應該短期內沒人能遇上他了。
還有一些編號,你們會有一種共識以爲很值錢,好比五位的QQ號,「888」的電話號等,因此編號爲888的貓也會比較值錢。還有一些有名字你們以爲會有特殊意義,也會比較值錢。限量版的就更不用說了,稀缺性。 貓的價格取決於市場,有人承認就有價格。
謎戀貓社區
目前用的社區是Discord(http://discord.gg/3sUdunT),分頻道,相似YY這種。國內建了一個QQ羣(QQ羣號:728507998)、微信羣、貼吧(謎戀貓吧),還有一些玩家本身建了網站和im羣。
這是discord的頁面,左側是導航區,分頻道的,會有官方消息區域、買賣貓的區域、意見反饋區域等。上圖示例中是公告區,普通用戶不能發言,截圖中公告區有謎戀貓官方公衆號、謎戀貓社區公衆號。
微信羣是以相似貓那樣0代、1代、2代…命名的。
這是國外一個玩家建的社區網站,網站會發布一些生奇異貓的攻略等,好比經過什麼特性或屬性的組合能提升生限量貓的機率。
這個網站會提供全部的貓的歷史價格和數據統計。好比咱們看到的這個貓,11月23日的時候才0.01ETH,12月10日的時候就到了2.65ETH。
爲何謎戀貓能火起來?
它是第一個區塊鏈遊戲,激發了不少人,特別是圈內人的好奇心,想體驗一下這是怎麼回事。
擁有稀缺的貓是一種身份象徵。限量版貓和特殊號碼貓有必定的收藏價值。
經過研究貓的基因,高級玩家能生出價值高的貓,能賺到錢。
創建了很好的社區,玩家之間的溝通和傳播會帶來新用戶。
稟賦效應,當我的一旦擁有某項物品,那麼他對該物品價值的評價要比未擁有以前大大增長。
天天生貓數量,火爆期大概3萬多隻貓生出來,以後立刻下降,12月是最高峯,就是在那個時間致使以太坊網絡擁堵。由於天天須要執行的合約量太大了,每秒鐘推出來幾十只貓,玩貓的人又很能賺錢,設置最高的手續費,致使普通交易就被堵在上面。
後來開始降低,到必定程度,最近又上升了,基本上是由於官方宣佈限量,剛宣佈以後,不少人就想讓貓在幾天以內把限量的貓都生完,而後以較高的市場價格賣出去。因此最近數據比以前那段數據活躍不少,生貓數量也會多一些。
天天貓的成交數量,和生貓數量相似,活躍度剛開始很高,後來下降。最高的時候一天大概16000。
這是天天以太幣的成交額。當大戶批量購買一些貓的時間點成交額會提升。
這是貓的平均成交價格。0代貓和限量貓的價格會比普通貓高不少。
謎戀貓的一些數據(2018-03-10):
18號貓以253ETH(約109萬人民幣)成交,有32只貓的售價超過100ETH。
根據玩家錢包地址去重統計,約6萬人買過貓。
平臺公有61萬隻貓,這個數量還一直在增加。其中約1萬隻是平臺發佈的0代貓。
總交易額3.96萬ETH(約1.7億人民幣),總交易次數29.8萬。
謎戀貓官方收入估算(截止到2018-03-10的預估數據)
賣0代貓收入約8611ETH,0代貓第一次賣出的收入是官方的收入,第二次賣出開始就是買賣雙方的交易。
手續費收入約712ETH。
總收入=賣0代貓收入+手續費收入=9234ETH。
總交易額爲3.96萬ETH。
經過技術手段賺ETH
獲取全部貓的屬性數據
獲取全部成交價格,熟悉各類貓的市場價格,這樣就能夠知道某一隻貓的價格究竟是低於市場價仍是高於市場價,低於市場價時能夠買入,而後再以一個高的價格賣出。
監控合約時間,第一時間獲知貓開始賣的消息。持續監控價格,達到預期價格後自動買入,低買高賣。若是不會技術的話天天刷網頁很麻煩,懂技術的話能夠本身寫個程序設置好價格,低時第一時間自動買入。
**批量生貓,搶好的號碼。**我本身搶過一個號碼「520」,當時批量生了大概20幾隻貓,快到那個時間節點的時候,我執行了腳本挑選那些快速生貓的貓,連續生了幾十只,那個編號就被我搶到了。固然這個操做也不是100%能搶到,還取決於實際狀況和機率。
**研究基因,自動生出高價值的貓。**這個須要花一些時間來研究,看經過什麼基因的組合能使普通貓生出高價值的貓。
**調用giveBirth(Kittyld),賺貓接生費。**這是平臺給開發者的機制,接生貓是有接生費的。目前是0.008ETH。這個錢是給接生者,前面提到以太坊是準圖靈完備性,它不能在指定時間觸發事件,官方又想將生貓這個情景模擬得儘可能真實,貓懷孕以後須要過一段時間才能生小貓。因此須要在生貓的時間調用giveBirth才能生出來,提早調用就生不了,延後調用能夠,可是若是生過了也不能夠。
這也是個競爭的過程,每次調用函數都須要花手續費,兩個開發者同時在競爭,先搶到的那個能夠獲得0.008ETH的接生費。調用一次giveBirth只能生一隻貓,有些玩家可能就本身再寫個智能合約,批量調用giveBirth,就能夠一次手續費批量生貓。
這是一些技術資料連接。
最後值得注意的是,本次分享只爲解析謎戀貓遊戲,不作投資建議。我我的並不建議你們花太多時間和金錢買貓,風險很大。
(每期活動預告及分享實錄都會在本公衆號發佈,請關注)
內容來源:由HiBlock區塊鏈社區和BlockClub區塊鏈技術社羣聯合組織的區塊鏈技術沙龍(第二期)
分享者:崔廣斌
整理編輯:Cynthia 區塊鏈技術社羣
如下是咱們的社區介紹,歡迎各類合做、交流、學習:)