导读:10月14日,Cheeze Wizards在以太坊主网上线。不到24小时内,玩家@samczsun向官方反映,游戏合约存在一个严重的Bug,使用这个bug可以利于不败之地。随后Cheeze Wizards决定采用分叉的解决方案来保护用户的权益。Cheeze Wizards已经修复了此Bug并部署了新的智能合约,奖池中损失的178ETH也已经被补上,但CW并没有关闭有问题的游戏而是让它成为了一个黑客乐园。

独孤求败的Bug

我们先来看看一场正常的芝魔师对决是如何进行的:

  1. 玩家A挑战玩家B

  2. 玩家B接受并提交出招

  3. 玩家A回应并提交出招

  4. 玩家A揭示出招

  5. 玩家B揭示出招

  6. 智能合约裁决战斗结果

  7. 决斗动画在cheezewizards.com上生成,玩家可以看结果

再来看看如果玩家B利用“死亡之铃”Bug后的对决方式:

  1. 玩家A挑战玩家B

  2. 玩家B接受并提交出招

  3. 玩家A回应并提交出招

  4. 玩家A揭示出招

  5. 玩家B故意超时而不揭示出招(90分钟)

  6. 玩家B恶意调用resolveTimedOutDuel(rTOD)函数,将两名参赛者都变为玩家A,导致玩家A既是胜利者又是失败者的bug

恶意调用:函数resolveTimedOutDuel(WIZARD-A,WIZARD-A)

正常调用:函数resolveTimedOutDuel(WIZARD-A,WIZARD-B)

不难发现,二者的区别在于在第5步,本该揭示出招的玩家B采用拖延战术耗完时间,然后恶意调用上述函数(一个解决对决时间耗尽的函数),实现稳赢。

恶意调用函数将耗尽芝魔师A的能量,玩家A被判定为负,不过芝魔师B也将处于无效状态。这时玩家B再次调用resolveTimedOutDuel(WIZARD-B, WIZARD-B)修复该错误状态。

此时,芝魔师A的能量消失的事实无法更改,而芝魔师B毫发无损。(请注意,在利用这个bug的过程中,能量没有从A转移到B)。当然,恶意第三方也可以调用rTOD合约来消灭芝魔师A的能量,不一定非得由玩家B触发。

Cheeze Wizards的智能合约是经过精心设计的,因此一旦发布,将无法取出奖池内的奖金(或以其他方式更改任何锦标赛状态)。因此,解决这个bug的唯一方法是部署新合约。

问题合约中已有150个钱包地址中的芝魔师,总价值175 ETH。现在,40,000美元已锁定在该合约中,在当前的战斗逻辑下赢得锦标赛是取出这笔奖金的唯一办法

坏消息是,目前在编号6133以下的一些芝魔师受到了影响。游戏官方提供了Txhash供玩家参考:

https://etherscan.io/tx/0x0d497ea959406909edad945d332d0aa1ed2a41273c694ad385910720af2f86f3

好消息是,该bug并不会破坏整个游戏,作为一名普通玩家,你几乎不受任何影响。而且在允许上述这种肮脏的战斗方式存在的情况下,芝魔师锦标赛依然可以继续进行。官方称其为Cheeze Wizard:未杀菌版(Unpasteurized)。

所谓的未杀菌版是指Dapper Labs于2019年10月14日部署的Cheeze Wizards智能合约的版本。未杀菌版包含上述的bug,恶意玩家可以利用该bug攻击普通玩家的能量,尤其是那些使用Web界面访问游戏的玩家。但Cheeze Wizards官方表示,此bug对某些喜欢耍花招的技术型玩家来说,会让游戏变得更加有趣。

出了bug哪里"有趣"?

如上所述,似乎玩家A一直只能是受害者。他们按规则地展示了自己之前提交的游戏招式,然后他们的能量竟然就没了。当然玩家B并不能吸收这些能量,但是他成功地淘汰了对手让玩家A无法再继续参与游戏了。

除非……有趣的地方来了。

玩家B冒着风险没有揭示自己的招式,按照Cheeze Wizards的规则,不揭示已经成功提交的招式意味着自动弃权。

这种时候,如果在玩家B恶意调用rTOD之前,玩家A或者系统使用正确的方式调用rTOD方法,提交正确的参数: function resolveTimedOutDuel(WIZARD-A, WIZARD-B),玩家A将会取得胜利并且获得玩家B的所有能量!

所以新的游戏玩法诞生了。如果玩家判断对手准备利用bug来对付自己,那么就可以反过来利用正确调用rTOD的方法来夺走对手的能量。胜负的关键在于谁率先调用rTOD(DR小伙伴注: 即便是同一时刻调用,gas fee高的交易会更快被矿工打包)。

不过诚实的玩家更有优势: 他们获胜时可以淘汰掉不诚实玩家并吸收他们的能量,而不诚实玩家即便获胜了,也只是将诚实玩家淘汰,并不能让自己获得更多能量。

而且不要忘了,Cheeze Wizards官方一直运行着后台程序监测有没有超过90分钟未揭示招式的比赛,一旦发现会自动触发正确的rTODs方法

需要注意的是: 未杀菌版芝魔师并不适合所有玩家。参与者需要完全意识到风险。很多玩家将会运行自动化脚本来保证自己率先触发rTODs方法,不管是作为诚实方还是不诚实方。玩家需要想想自己是否有胆量来玩这个有趣的游戏。所以,找到适合自己的方式再来参与未杀菌版芝魔师吧。

接下来让我们深入到代码层面。

在代码层面检视bug

事情的起因是,两位玩家在战斗中相互提交招式,其中一位有意或无意地不揭示他放出的招式。这时,为了让另一个玩家可以结束这场漫长的战斗,Cheeze Wizards允许玩家发起一个"单边揭示"的交易。这其实是一个特殊情况,正常的游戏中不会遇见。

rTOD漏洞只在一种情况下发生,也就是在战斗中。一位玩家已经揭示了招式,另一位玩家一直不揭示招式直到时间截止(90分钟)。当只有一边揭示招式然后另一边等待到时间截止时,任何一个怀有恶意的用户,都可以用错误的方式调用rTOD合约,以此来冻结诚实玩家的能量

假设诚实的玩家A正在使用号码#1000芝魔师与使用号码#2000芝魔师的玩家B作战,玩家B打算使用”死亡之铃“bug。两位巫师都选择了自己的招式进入决斗。玩家A展示了自己的出招,而玩家B等待决斗超时,并调用resolveTimedOutDuel(1000,1000)。让我们来看一下智能合约中的部分代码:

最终,智能合约执行一次能量转移,认为该合约将全部能量转移给获胜的芝魔师,然后抽干失败的芝魔师的能量。然而,由于双方 wiz1并wiz2都指向一个索引(#1000),所以先翻倍了#1000芝魔师的能量......然后抽干了他。‍值得庆幸的是,通过在函数顶部添加一个简单的require语句来确保两个芝魔师ID是不同的,可以轻松修复此错误。

require(wizardId1!= WizardId2,“Same Wizard”)

这个智能合约已经过Sigma Prime的正式安全审查,Cheeze Wizards相信没有其他问题可以阻止比赛按预期进行。

看到这里,想必大家已经了解,要玩转未杀菌版Cheeze Wizards还是需要一定技术门槛的。如果你是一个想要黑吃黑的黑客,请跳到unp.cheezewizards.com。普通玩家请依然在cheezewizards.com参赛吧。最后,对Cheeze Wizards感兴趣的小伙伴赶紧后台回复Party加入DappReview的芝魔师群吧!

------------

点击“阅读原文”,查看全球领先的Dapp数据排行榜

支持11大主链,超过3500+Dapps

DappReview必读文章索引

罗生门  | 一起来捉妖 | 报告 | 日本区块链 |  黑客

GDC | 区块链速成心法 | Bancor | Token经济

开发者 | EOS生态 | 极客解密 | 文艺复兴

行为挖矿 | 虚拟资产交易 | 我的世界

Coinbase | 万智牌 |  炉石传说

乌托邦 | 区块链文娱 | 乐高

Enjin平行宇宙 | 公链

微信与私链 | UGC

中本聪 | IBO

资产上链

链游

后台回复“游戏”,获取游戏类文章合集

后台回复“观点”,获取观点类文章合集

后台回复“行业”,获取行业类文章合集

后台回复“解谜”,获取解谜类文章合集

关于Dapp的一切,都在这里

奶酪巫师的黑客乐园 - 第一个进行硬分叉的区块链游戏?相关推荐

  1. 第一款真正意义上的区块链游戏是?

    自加密猫以后,区块链游戏逐渐涌现,如百度莱茨狗.小米加密兔.360区块猫.钜子玩客宠等相继推出.但这些区块链游戏被诟病最多的,就是作为一款游戏,它们也未免太不够好玩了点.仅仅只有一个购买.交易的行为, ...

  2. KuPlay平台:安全性对区块链游戏而言,依然是第一位

    微信公众号:酷玩区块 春风得意马蹄疾,一日看尽长安花. 说这是过去多年来中国互联网游戏厂商的真实写照不为过,然而这样春风得意的"黄金时代"却在渐行渐远.近日著名游戏人称:" ...

  3. 腾讯将发布第一款区块链游戏,快播称未参与任何区块链项目 | 区块链日报

     [腾讯将发布第一款区块链游戏] 4月12日,在"互联网+"数字经济峰会金融分论坛上,腾讯区块链业务总经理蔡弋戈表示,腾讯将于4月23日发布腾讯第一款区块链游戏. 另外,在今日 ...

  4. SV TechClub 第四届 美女与野兽 2019区块链游戏黑客马拉松

    SV TechClub 第四届 美女与野兽 2019区块链游戏黑客马拉松 程序员不是你们眼中的程序猿,是一种非常特殊的.可以从事程序开发.维护的动物. 一只优秀的程序猿对技术充满JI情(因为能够得到香 ...

  5. 给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识

    给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识 共识是区块链的核心机制,在一系列的区块链的发展历史当中,PoW/PoS/BFT等系列的共识算法都在各自的应用场景发挥了不同作用.在本体的第 ...

  6. 荷兰黑客将他孩子的乐高列车放在区块链上

    它实际上是一辆STEEM火车 区块链无处不在,我们得到它.但是你知道区块链现在正在为一辆小玩具火车提供动力吗? 荷兰黑客/爸爸Roeland P Lanparty将他儿子的LEGO Duplo玩具变成 ...

  7. 世界五百强第一的沃尔玛在用区块链做什么

    每一次的技术升级都是行业的洗牌,沃尔玛无疑为同业甚至其他领域的巨头做出了示范. <区块链应用案例>专栏04期 作者丨区块链落地小能手 图丨部分来源于网络 专栏简介 不知不觉区块链已经发展了 ...

  8. 第一百一十三期:去伪存真,区块链应用到底能解决什么实际问题?

    区块链技术仍然在发展初期,实践应用也停留在试水阶段.就金融等领域而言,区块链究竟意味着什么?今后实践应用的前景何在?在Libra的倒逼下,全球央行数字货币又将如何发展? 作者:第一财经 两周前,区块链 ...

  9. 基于java的公链,第一个基于Java的BFT区块链 – Alienchain外星链号称以太坊Java版

    什么是 Alienchain Alienchain 是一个实验性的高性能嵌入式平台,支持分散式应用. 它纯粹是在Java中编写的,由授权的 项目介绍 官网:http://alienchain.org/ ...

最新文章

  1. Java线程面试题 Top 50(转)
  2. Linux下运行C语言程序
  3. oracle 存储过程定义及调试,并终于被C# 调用 代码
  4. 轮廓线重建:二维平行轮廓线重建理论和方法
  5. 抢注“哔哩哔哩”商标卖成人用品?A站回应:不符合价值观 已申请注销
  6. 登录文件传输服务器,生信小技巧之:在本地与服务器间快速传输文件,无密码登录远端服务器...
  7. ❤️Spring注入集合❤️(建议收藏)
  8. bat批处理的注释语句
  9. 华硕电脑开机 C键和空格建不灵了怎么办
  10. 楼天城楼教主的acm心路历程(作为励志用)
  11. css属性之width
  12. aac +sbr +ps
  13. java实现上位机与下位机串口通信
  14. iPhoneX(刘海屏)适配
  15. 成为一名高级软件工程师
  16. 【VB】机房收费系统(结账)
  17. 央视网商城app_央视网商城“中国好产品联合招商大会”召开
  18. C语言15大头文件介绍
  19. RGB图片隐写术免杀
  20. 解决PS处理DIF后有重影的问题!

热门文章

  1. 最短公共超序列(最短公共父序列)
  2. android 获取设备的mac地址,Android编程获取设备MAC地址的实现方法
  3. 服务器96g运行内存,别被坑了,2019入手小米9到底选择6G运存还是8G?看完你就懂了!...
  4. C#语言实例源码系列-自定义ListBox背景
  5. 四大检索工具 和 论文查找网址大全
  6. 语文七年级计算机作文,七年级上册语文期末考试作文(精选11篇)
  7. SAP中汇率固定配置和应用分析测试
  8. bat使用命令解析-详细(转)
  9. Android之wifi工作流程
  10. 腾讯云国外服务器2核4G服务器新用户全攻略