谜恋猫这个游戏大概是从去年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 区块链技术社群
如下是咱们的社区介绍,欢迎各类合做、交流、学习:)