買不起幣圈叫價77萬的以太貓,于是我破解了它的遺傳規律
約訪人:某知名互聯網公司算法工程師·蔡志威
去年,一款名為《以太貓》(CryptoKitties)的游戲開創了區塊鏈游戲的風潮。
與普通游戲不同的是,區塊鏈游戲不僅是作為玩樂的游戲,也成為了各大用戶們的一大投資手段。
有媒體曝出,價格最高的一只以太貓,以 246.95 個以太幣的價格成交,約為 11.8 萬美金、77 萬人民幣。
近日,一位互聯網行業的算法工程師向區塊鏈探長(微信公眾號 ID:qqtanzhang)透露,自己破解了以太貓屬性的遺傳規律,用普通特征屬性的貓配種出高屬性的貓來售賣,并給廣大讀者們分享了這段“操作心得”。
以下為蔡志威的分享內容:
去年 12 月,以太坊上的養貓游戲大火,也吸引了一大批的用戶入局。
這個游戲也吸引了我的關注,規則也很簡單:買兩只貓,每隔一段時間進行交配,然后生出一只新的小貓,小貓的屬性跟貓父母有一定關聯性。
以太貓的價格一點兒也不比現實中的貓便宜,貓的外形特征和屬性決定了自身的價格,而屬性特征都是由貓的基因決定的。
因此我生出了一個想法:如果能研究出貓屬性遺傳的規則,是否可以用普通的小貓生育出稀有的小貓來售賣呢?
最后通過研究,我破解了以太貓屬性的遺傳規律。總體來說,破解的法則流程一共有四步:
第一步:從區塊鏈
中讀取到貓的基因信息
從游戲網站[1] 中,我們能看到一些小貓的基因,但是網站的數據更新很慢,最好是一次性得到所有小貓的基因和屬性來分析,所以我從區塊鏈方面入手。最后發現,可以從執行轉帳的地址[2]中看到以太貓的合約地址。
具體操作是,首先在以太坊上的智能合約中,通過轉賬去執行一段代碼,那么代碼執行的結果會被寫入到區塊鏈中。
而讀取的代碼(比如讀一個貓的基因)并不需要通過轉帳。在本地的客戶端同步數據后,便可以直接從本地的接口讀取到。
因此,我從工具頁面[3](如上圖)中讀取到了以太貓的合約接口,其中 GetKitty 接口可以傳入 ID,這樣便可以得到貓的基因、父母 ID、生育狀態等信息。
第二步:了解哪種
特征屬性的貓需要哪些基因
得到了貓的基因信息后,就要了解基因與特征之間的關系,明白什么樣的基因能生出什么特征的小貓。
我看到很多人都嘗試過去分析基因與貓的特征的關系,但其實大部分人其實看到的是十六進制的數據,這樣獲得的有效信息會很少。
因此我改從二進制信息入手,用機器學習中常用的“決策樹”的方法:按貓的基因的 256 位作為 256 個特征(注:在這個游戲中,貓的基因是一段 256 位的序列),來分別預測貓是否有對應的特征。
貓的特征在某些位等于某個值的時候,基因就會有某個特征。比如說第 234 和 235 位都是 1 時,就會出現 jagur(貓的一個屬性)特征。通過之后的嘗試,這個猜想得到了驗證,通過這個結果模型訓練出來的預測準確率為 100%。關系如圖(以第 230 位為例):
至此,我們已經可以知道,如果要生出具有某種特征的小貓需要有什么樣的基因。
第三步:了解哪些
貓父母能生出特定基因的小貓
接下來,還需要知道選什么貓來當父母,才可以生出特定基因的小貓。
在合約[4]中,我輸入要交配的貓的基因,以及出生的 block 數,得出了可以生出的小貓的基因。
因為要大量的數據統計才能分析出貓的每個屬性是跟哪些基因位相關的。所以我通過機器學習的方法學習出父母的基因,合成后代基因的算法,抓取了所有小貓的代碼。
接著,我把貓父母基因的二進制作為一個特征,再選用決策樹這種可解釋性更強的算法,訓練出樹, 如圖(以第 230 位為例):
通過訓練樹的方法后,我有兩點總結:
第一,每一個貓后代的基因跟貓父母的每一位是對應的。比如說貓父母的第 134 位都是1,那么后代第 134 位也是 1 的概率很大,這個幾率高達 50% 以上。
第二,相鄰位的基因同時遺傳給下代的概率會更大。(比如說父母 133 和 134 位分別是 10 和 01 時,后代基因一般都是 10 或 01,很少會出現 11 或 00 的情況)。
第四步:推理出
兩只普通貓生出稀有貓的方法
根據以上三步的發現,我得到了一種策略去生出任何我們想要的稀有貓。具體流程總結如下:
首先,搜索現在所有在出售的小貓,找兩只貓進行配對。
這兩只貓需要滿足兩個條件:首先是基因里僅有 1 位不滿足貓的稀有屬性,并且兩個貓不滿的基因位要不相同、也不能相鄰。
舉個例子,你需要第 125 位是0,234 位是1,235 位是 0 屬性的小貓,那么需要找兩只配對的屬性應該如下:一只貓是 125,234,235 位分別是1,1,0 的,另外一只貓 125,234,235 位分別是1,0,0。
然后讓這兩只貓不斷重復生育,在足夠次數之后一般都能生出想要的貓。
從成本來看,我一共用了 10 個左右的以太幣來買貓(按當時的價格來算,大約是 8 萬左右人民幣)。而通過得出的方法,我在兩天內程序自動買了幾十只貓,生育了約 500-600 只小貓,得到了 50 多只的稀有的僵尸貓和 Mistletoe 貓(約合人民幣 20 萬左右)。
最后,我在兩周內一共賺了價值 12 萬人民幣左右的以太幣。但后來因為市場萎縮得太快,沒什么新人入場買貓,我就沒有再繼續賣貓了。
來自: 區塊鏈探長