网红菠菜游戏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 是玩家们的绞肉机,黑客的温床

你可能感兴趣的:(网红菠菜游戏EOSBet第三次被盗,究竟是投资者的天堂还是黑客的温床?)