查看原文
其他

干货 | 区块链游戏谜恋猫 CryptoKitties 剖析

2018-03-20 平行区块链



本文转载自“区块链社区HiBlock”

原文作者:崔广斌

整理编辑:Cynthia

点击阅读原文可跳转至原文链接


谜恋猫这个游戏大概是从去年12月份开始火起来的,那时候我也花了些时间在玩,后来我发现一个很有意思的现象:一些技术玩家可以对很多数据进行统计。当时我就想他们能做到我也可以。后来我就结合这个游戏学习以太坊技术,包括自己写程序,现在我可以自动实现买猫卖猫,比如在我现在这个分享的过程中,如果有一只猫低于我的预计价格,就可能会自动买入。今天我将从七个方面和大家分享区块链游戏谜恋猫 CryptoKitties。


1

谜恋猫游戏简介


如图所示是谜恋猫的官方首页,每只猫都会标注上主要特点:可收藏、可繁殖、讨人喜欢等。底下是它的主页,大家想玩的话可以登录这个网址。



上图展示的是谜恋猫的一些官方介绍,谜恋猫是世界首款区块链游戏,这里最关键的是说每只猫都是独一无二的,100%归你所有,无法被复制、拿走或销毁。其实这里我是有疑问的,无法被复制或拿走,就相当于什么都在区块链上,猫的使用权、猫的ID(每个猫都有一个编号)、猫的基因,这个字符串都在区块链上。但是猫的图片是在中心化的服务器上,包括猫的一些其他属性,可能就是在它们公司的服务器上,并不是说100%都在区块链上面,这一点大家要理解。


可能有些人对它有误解,以为所有的数据都在区块链上面,实际上它的很多数据,特别是图片数据存在区块链上的成本太高了,所以还是在它们公司服务器上保存着。猫的买卖主要是通过区块链进行的,拍卖机制在区块链上,包括出售、配对等。



与传统的收藏品不同的是,两只谜恋猫可以交配繁殖生出一个全新的猫,这也是这个游戏有趣的地方,你可以自己买两只猫,然后可以逐渐生出很多猫,而且在生产的过程中也会有一些惊喜,比如可能两只普通的猫可以生出限量版的猫,限量版的猫会比一般猫值钱。


下面我们来看几只典型的猫



这是1号猫,1号猫是0代猫,0代猫一共5万只,系统在写到合约代码中的时候就有一个上限:5万。1号猫也是专供猫,意味着图片经过专门设计,而不是通过程序生成。还称为创始猫,创始猫一共100只,编号从1-100,这个猫的成交价格是246.9ETH,相当于100万人民币左右。



这是18号猫,这个图片是程序自动生成的,这个猫的成交价格是253.3ETH,是所有猫的成交价格记录中最高的,这是我通过数据库统计出来的。



这只猫是前几天刚成交的一只0代猫,这个就很便宜了,0.18ETH成交。因为0代猫的价格有一定的机制,基本取决于市场供求,买的人多价格就高,买的人少价格就低了。



上图右上角是一只猫,它有自己的父母和后代,还有一些自己独有的属性。



还有部分限量版的奇异猫(fancy),是公司专门找设计师设计出来的图片,并不是通过程序生成的,每种类型都有上限。刚开始的时候是没有上限的,但是后来玩家买的多了,繁殖的也多了,量一多就不值钱了,所以公司才决定,变成限量版。限量版相对更有收藏价值。


2

谜恋猫用到的区块链技术:以太坊

以太坊:可编程的区块链



比特币是公认的区块链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买入了,要是当时没有这个问题,我可能可以同时买到两只猫。


3

谜恋猫区块链代码剖析


谜恋猫的智能合约一共有四个,在区块链上的有三个是开源的,其核心部分包括拍卖、出售、配种相关的是开源的,基因部分没开源,主要是大家都知道那部分代码开源的话,部分玩家可以通过这些代码生成一些限量版的猫。虽然基因部分没有开源,但其实也猜的差不多了,有一些规则找出来,就可以破解。


这个网站本身相当于一个去中心化的交易所,是一个DApp。DApp是什么概念呢?有一部分代码运行在区块链上,这一部分称为去中心的,还有一部分代码,比如用户交互,总不能让普通用户在电脑上敲命令代码执行或调用API,这不太现实,所以需要普通APP来包装,比如通过手机APP或网页浏览器的形式来实现。所以DApp包含两部分,一部分是智能合约代码,另一部分就是传统的那种网站应用或手机APP应用。


图中我提出一个问题:智能合约的代码能否修改?一旦部署上去之后,单独看那份代码是不能改的,但实际上也不是说绝对不能改,因为你可以部署新的代码,它有指针的概念,你可以换一个东西,把那个地址指向另外一个合约,这样的话就可以升级了,否则一旦发布就可能会有bug,所以一般都会设计一套机制。


我们来看它的代码,这个代码没多少,整个函数的代码大概是2000行,出售相关的更少一些,配种相关的大概五六百行,所以一共大概3000行代码。当然基因那部分不知道,不过也不会太多,估计就几百行。所以它总共在智能合约上的代码是很少的,大部分还是在中心化服务器上。区块链上的应用来说没有那么难,一般是应用最核心的一部分逻辑在区块链上,比较少的代码就完成了。


简单看一部分,比如生猫的函数,它内部会传参数,妈妈的ID、爸爸的ID、第多少代、基因是什么等,会有一些操作触发事件,触发事件后你可以根据这个来做一些事情。我通过看代码发现一些规律,它里面有一块冷却时间,就是每生一次猫之后,下次生猫的时间就会变长。这个冷却时间一直在变,从一分钟两分钟到五分钟,最后变成七天了。


这就意味着每生一次猫之后这个冷却时间会往后加,比如猫刚买回来的时候,可能一两分钟就能生一只小猫,生了几次之后,需要等的时间越来越长,这套机制已经写在里面了,没法篡改的。


4

谜恋猫游戏规则

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月份刚修改的规则。


5

谜恋猫社区和玩家


上图虽然是开个小玩笑,但是真的有人满仓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。


为什么谜恋猫能火起来?


  • 它是第一个区块链游戏,激发了很多人,特别是圈内人的好奇心,想体验一下这是怎么回事。

  • 拥有稀缺的猫是一种身份象征。限量版猫和特殊号码猫有一定的收藏价值。

  • 通过研究猫的基因,高级玩家能生出价值高的猫,能赚到钱。

  • 建立了很好的社区,玩家之间的沟通和传播会带来新用户。

  • 禀赋效应,当个人一旦拥有某项物品,那么他对该物品价值的评价要比未拥有之前大大增加。


6

谜恋猫数据统计


每天生猫数量,火爆期大概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。


7

技术玩家如何通过谜恋猫赚以太币

通过技术手段赚ETH


  • 获取所有猫的属性数据


  • 获取所有成交价格熟悉各种猫的市场价格,这样就可以知道某一只猫的价格到底是低于市场价还是高于市场价,低于市场价时可以买入,然后再以一个高的价格卖出。


  • 监控合约时间,第一时间获知猫开始卖的消息。持续监控价格,达到预期价格后自动买入,低买高卖。如果不会技术的话每天刷网页很麻烦,懂技术的话可以自己写个程序设置好价格,低时第一时间自动买入。


  • 批量生猫,抢好的号码。我自己抢过一个号码“520”,当时批量生了大概20几只猫,快到那个时间节点的时候,我执行了脚本挑选那些快速生猫的猫,连续生了几十只,那个编号就被我抢到了。当然这个操作也不是100%能抢到,还取决于实际情况和概率。


  • 研究基因,自动生出高价值的猫。这个需要花一些时间来研究,看通过什么基因的组合能使普通猫生出高价值的猫。


  • 调用giveBirth(Kittyld),赚猫接生费。这是平台给开发者的机制,接生猫是有接生费的。目前是0.008ETH。这个钱是给接生者,前面提到以太坊是准图灵完备性,它不能在指定时间触发事件,官方又想将生猫这个情景模拟得尽量真实,猫怀孕之后需要过一段时间才能生小猫。所以需要在生猫的时间调用giveBirth才能生出来,提前调用就生不了,延后调用可以,但是如果生过了也不可以。


    这也是个竞争的过程,每次调用函数都需要花手续费,两个开发者同时在竞争,先抢到的那个可以得到0.008ETH的接生费。调用一次giveBirth只能生一只猫,有些玩家可能就自己再写个智能合约,批量调用giveBirth,就可以一次手续费批量生猫。



这是一些技术资料链接。


最后值得注意的是,本次分享只为解析谜恋猫游戏,不做投资建议。我个人并不建议大家花太多时间和金钱买猫,风险很大。


什么是数字货币博弈论?

区块链与游戏的融合:巨变将会产生

区块链Token与分布式商业模式的黎明

比特币和以太坊的去中心化

在风口之前就领跑的区块链公司Top 10

区块链可扩展性技术梳理

区块链是生产关系的革命吗?

加密猫距离成为区块链杀手级应用还有多远?

十年过去了,还没人真正地为区块链找到突破性运用

周小川发言给“虚拟货币”定调

贵阳、杭州、成都争相“上链”,城市运营进入区块链时代

央行姚前:央行数字货币的技术考量

观点 | 为什么要用区块链代替数据库?

亲历互联网泡沫,我从中为区块链发展汲取了这些经验

对烈火烹油的区块链,有些话我不吐不快

扫描上方二维码,关注公众号“平行区块链”,获取更多精彩内容!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存