买不起币圈叫价77万的以太猫,于是我破解了它的遗传规律
jopen 7年前
<p style="text-align:center"><img alt="买不起币圈叫价77万的以太猫,于是我破解了它的遗传规律" src="https://simg.open-open.com/show/91b5c8721de8b2a5d6af478e02564dd4.jpg" /></p> <p>约访人:某知名互联网公司算法工程师·蔡志威</p> <p>去年,一款名为《以太猫》(CryptoKitties)的游戏开创了区块链游戏的风潮。</p> <p>与普通游戏不同的是,区块链游戏不仅是作为玩乐的游戏,也成为了各大用户们的一大投资手段。</p> <p><strong>有媒体曝出,价格最高的一只以太猫,以 246.95 个以太币的价格成交,约为 11.8 万美金、77 万人民币。</strong></p> <p>近日,一位互联网行业的算法工程师向区块链探长(微信公众号 ID:qqtanzhang)透露,自己破解了以太猫属性的遗传规律,用普通特征属性的猫配种出高属性的猫来售卖,并给广大读者们分享了这段“操作心得”。</p> <p><strong>以下为蔡志威的分享内容:</strong></p> <p>去年 12 月,以太坊上的养猫游戏大火,也吸引了一大批的用户入局。</p> <p>这个游戏也吸引了我的关注,规则也很简单:买两只猫,每隔一段时间进行交配,然后生出一只新的小猫,小猫的属性跟猫父母有一定关联性。</p> <p>以太猫的价格一点儿也不比现实中的猫便宜,猫的外形特征和属性决定了自身的价格,而属性特征都是由猫的基因决定的。</p> <p>因此我生出了一个想法:如果能研究出猫属性遗传的规则,是否可以用普通的小猫生育出稀有的小猫来售卖呢?</p> <p><strong>最后通过研究,我破解了以太猫属性的遗传规律。总体来说,破解的法则流程一共有四步:</strong></p> <p><strong>第一步:从区块链</strong></p> <p><strong>中</strong><strong>读取到猫的基因信息</strong></p> <p>从游戏网站[1] 中,我们能看到一些小猫的基因,但是网站的数据更新很慢,最好是一次性得到所有小猫的基因和属性来分析,所以我从区块链方面入手。最后发现,可以从执行转帐的地址[2]中看到以太猫的合约地址。</p> <p><strong>具体操作是,首先在以太坊上的智能合约中,通过转账去执行一段代码,那么代码执行的结果会被写入到区块链中。</strong></p> <p>而读取的代码(比如读一个猫的基因)并不需要通过转帐。在本地的客户端同步数据后,便可以直接从本地的接口读取到。</p> <p style="text-align:center"><img alt="买不起币圈叫价77万的以太猫,于是我破解了它的遗传规律" src="https://simg.open-open.com/show/4522a1a40e3ab98af9372048afddd3e9.jpg" /></p> <p>因此,我从工具页面[3](如上图)中读取到了以太猫的合约接口,其中 GetKitty 接口可以传入 ID,这样便可以得到猫的基因、父母 ID、生育状态等信息。</p> <p><strong>第二步:了解哪种</strong></p> <p><strong>特征属性的猫</strong><strong>需要哪些基因</strong></p> <p><strong>得到了猫的基因信息后,就要了解基因与特征之间的关系,明白什么样的基因能生出什么特征的小猫。</strong></p> <p>我看到很多人都尝试过去分析基因与猫的特征的关系,但其实大部分人其实看到的是十六进制的数据,这样获得的有效信息会很少。</p> <p>因此我改从二进制信息入手,用机器学习中常用的“决策树”的方法:按猫的基因的 256 位作为 256 个特征(注:在这个游戏中,猫的基因是一段 256 位的序列),来分别预测猫是否有对应的特征。</p> <p>猫的特征在某些位等于某个值的时候,基因就会有某个特征。比如说第 234 和 235 位都是 1 时,就会出现 jagur(猫的一个属性)特征。通过之后的尝试,这个猜想得到了验证,通过这个结果模型训练出来的预测准确率为 100%。关系如图(以第 230 位为例):</p> <p style="text-align:center"><img alt="买不起币圈叫价77万的以太猫,于是我破解了它的遗传规律" src="https://simg.open-open.com/show/1d37f9aea35e16e8e7989ad58b1b90b7.jpg" /></p> <p>至此,我们已经可以知道,如果要生出具有某种特征的小猫需要有什么样的基因。</p> <p><strong>第三步:了解哪些</strong></p> <p><strong>猫父母</strong><strong>能生出特定基因的小猫</strong></p> <p>接下来,还需要知道选什么猫来当父母,才可以生出特定基因的小猫。</p> <p>在合约[4]中,我输入要交配的猫的基因,以及出生的 block 数,得出了可以生出的小猫的基因。</p> <p>因为要大量的数据统计才能分析出猫的每个属性是跟哪些基因位相关的。所以我通过机器学习的方法学习出父母的基因,合成后代基因的算法,抓取了所有小猫的代码。</p> <p>接着,我把猫父母基因的二进制作为一个特征,再选用决策树这种可解释性更强的算法,训练出树, 如图(以第 230 位为例):</p> <p style="text-align:center"><img alt="买不起币圈叫价77万的以太猫,于是我破解了它的遗传规律" src="https://simg.open-open.com/show/688c3ac32c4879586d6fdb2c95b4c35c.jpg" /></p> <p>通过训练树的方法后,我有两点总结:</p> <p><strong>第一,每一个猫后代的基因跟猫父母的每一位是对应的。</strong>比如说猫父母的第 134 位都是1,那么后代第 134 位也是 1 的概率很大,这个几率高达 50% 以上。</p> <p><strong>第二,相邻位的基因同时遗传给下代的概率会更大。</strong>(比如说父母 133 和 134 位分别是 10 和 01 时,后代基因一般都是 10 或 01,很少会出现 11 或 00 的情况)。</p> <p><strong>第四步:推理出</strong></p> <p><strong>两只普通猫生出稀有猫的方法</strong></p> <p>根据以上三步的发现,我得到了一种策略去生出任何我们想要的稀有猫。具体流程总结如下:</p> <p><strong>首先,搜索现在所有在出售的小猫,找两只猫进行配对。</strong></p> <p>这两只猫需要满足两个条件:首先是基因里仅有 1 位不满足猫的稀有属性,并且两个猫不满的基因位要不相同、也不能相邻。</p> <p>举个例子,你需要第 125 位是0,234 位是1,235 位是 0 属性的小猫,那么需要找两只配对的属性应该如下:一只猫是 125,234,235 位分别是1,1,0 的,另外一只猫 125,234,235 位分别是1,0,0。</p> <p>然后让这两只猫不断重复生育,在足够次数之后一般都能生出想要的猫。</p> <p>从成本来看,我一共用了 10 个左右的以太币来买猫(按当时的价格来算,大约是 8 万左右人民币)。而通过得出的方法,我在两天内程序自动买了几十只猫,生育了约 500-600 只小猫,得到了 50 多只的稀有的僵尸猫和 Mistletoe 猫(约合人民币 20 万左右)。</p> <p><strong>最后,我在两周内一共赚了价值 12 万人民币左右的以太币</strong>。但后来因为市场萎缩得太快,没什么新人入场买猫,我就没有再继续卖猫了。</p> <p>来自: 区块链探长</p>