网红菠菜游戏EOSBet第三次被盗,究竟是投资者的天堂还是黑客的温床?

据 IMEOS 报道,EOSBet 电报消息称, EOSBet 再次遭到黑客攻击,资金被盗近14万,目前已被交易所锁定,从今日下午两点开始,EOSBet 合约服务暂停。攻击者利用EOSBet 合约在检验收款方时存在的漏洞,伪造转账通知,给自己的智能合约账号(eosbethack)转真EOS。总计从EOSBet 获利约14万个EOS。黑客曾使用 whoiswinner1 账号进行攻击尝试。


EOSBet 是运用区块链技术基于EOS 公链开发的一款菠菜游戏。


上线仅两个月,盈利近百万的 EOSBet 昨日又因营销活动推向了一个小高潮,日活突破千人, 稳坐 EOS DAPP 当日榜首。

不过好日子才兴奋了一天, EOSBet却因代码漏洞,再次被黑客攻击了。

这是 EOSBet 上线以来第三次被攻击了!

EOSBet是投机客的天堂,却更是黑客的温床。我们来看看EOSBet存在的问题。

 EOSBet工作流程图


ABI

"actions": [{

      "name":"initcontract",

      "type":"initcontract",

     "ricardian_contract": ""

    },{

      "name":"newrandkey",

      "type":"newrandkey",

     "ricardian_contract": ""

    },{

      "name":"suspendbet",

      "type":"suspendbet",

     "ricardian_contract": ""

    },{

      "name":"resolvebet",

      "type":"resolvebet",

     "ricardian_contract": ""

    },{

      "name":"betreceipt",

      "type":"betreceipt",

     "ricardian_contract": ""

    },{

      "name":"refundbet",

      "type":"refundbet",

      "ricardian_contract": ""

    }

  ]

流程与代码的解释

用户发送EOS Token到合约eosbetdice11

eosbetcasino@random调用合约函数 resolvebet 触发合约决定输赢,

绕了一圈, 最终输赢完全由庄家后台程序用账户eosbetcasino@random决定.

混淆耳目的技术:


以上为官网的故弄玄虚, 事实上, eos与ethereum一样, 并不能在链上产生不可预知的随机数合约代码量不大(见下面命令行工具), 即便不开源, 也不难看懂, 为何还要装神弄鬼, 糊弄用户?

命令行工具

#获取合约ABI和wast

cleos get code  -a dice.abi -cdice.wast eosbetdice11

正确且唯一的对赌方式

https://developers.eos.io/eosio-cpp/docs/random-number-generation

必须经过以下步骤:

双方使用各自的<秘钥>将 <原始数据> 加密后发送到区块链.

双方数据都送达, 则锁定数据, 并进入决定阶段.

决定阶段, 双方各发送自己的 <秘钥>到区块链

区块链使用双方的<秘钥>, 解密出各自<原始数据>, 决定最终结果, 并执行结果

BM在这里讨论过:

https://eosio.stackexchange.com/questions/41/how-can-i-generate-random-numbers-inside-a-smart-contract

关于随机数

我们程序员往往把区块链上随机数的产生看作技术问题, 其实能否产生它, 是个数学问题:

y=f(x) 不管方程f多复杂, 给定一个x都最多只有一个确定的y. 所以y=random(seed),你必须让seed具有不可预见性. 而我们知道计算机世界是没有随机数的(通常用系统时钟作seed), 对于区块链, 在没有任何输入参数的情况下, 链上一切都是注定的, 你若想自己不被预知, 在条件固定之前,必须至少保留一项只有你知道的参数

而对于赌博方程, 用户的seed在开牌之前, 只能用户自己知道.

如果你不想思考数学问题

试想, 如果有那么简单优雅的方法(像EOSBet声称的并且也是这么做的, 不需要用户两次参与的), 那么像github/EOSIO/dice这样做, 是多么的丑陋和多此一举!

最后

无论你用什么技术, 都改变不了简单的数学逻辑, 即: 你必须让用户在开点之前, 保留seed(或seed的参数: 秘钥), 然后锁定后再提交.

 以上逻辑说明,EOSBet 是玩家们的绞肉机,黑客的温床

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,273评论 19 139
  • 四点四十起床,到昨天早上去的地方,准备把没画完的雾松画完,挑工们已经忙碌起来,有的已经挑第二趟了,从我身边来来往往...
    焦海洋漫画阅读 3,677评论 0 3
  • 【七招让90后工作有士气--01】 作为管理者得会安排工作,会布置任务,不仅仅是告诉员工你需要做件什么事,还需要说...
    自如得己阅读 1,112评论 0 0
  • 花开花落,有始有终。我想所有一切的岁月尘埃都是遵循这个道理吧。在经过前几天的沉重打击后,我的心真的受伤了。也许...
    柔眸北海旧梦阅读 2,953评论 0 1
  • 我们经常会遇到对象需要copy的时候,也许你会写一个私有方法为新建对象的所有字段赋值,当然没问题,但是当一个对象有...
    joymake阅读 4,655评论 0 2

友情链接更多精彩内容