完全
由庄决定EOSBet https://dice.eosbet.io 自己做庄, 自己裁判, 仅将EOS区块链当作银行, 赚取EOS token, 关键的随机数产生并没有运行在区块链上, 输赢
流程图
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决定.
混淆耳目的花招
Reveal spoiler
以上为官网的故弄玄虚, 事实上, eos与ethereum一样, 并不能在链上产生不可预知的随机数
合约代码量不大(见下面命令行工具), 即便不开源, 也不难看懂, 为何还要装神弄鬼, 糊弄用户?
命令行工具
#获取合约ABI和wast
cleos get code -a dice.abi -c dice.wast eosbetdice11
正确且唯一的对赌方式
必须经过以下步骤:https://developers.eos.io/eosio-cpp/docs/random-number-generation
- 双方使用各自的
<秘钥>
将<原始数据>
加密后发送到区块链. - 双方数据都送达, 则锁定数据, 并进入决定阶段.
- 决定阶段, 双方各发送自己的
<秘钥>
到区块链 - 区块链使用双方的
<秘钥>
, 解密出各自<原始数据>
, 决定最终结果, 并执行结果
关于随机数
我们程序员往往把区块链上随机数的产生看作技术问题, 其实能否产生它, 是个数学问题:
y=f(x) 不管方程f多复杂, 给定一个x都最多只有一个确定的y. 所以y=random(seed), 你必须让seed具有不可预见性. 而我们知道计算机世界是没有随机数的(通常用系统时钟作seed), 对于区块链, 在没有任何输入参数的情况下, 链上一切都是注定的, 你若想自己不被预知, 在条件固定之前, 必须至少保留一项只有你知道的参数
而对于赌博方程, 用户的seed在开牌之前, 只能用户自己知道.
如果你不想思考数学问题
试想, 如果有那么简单优雅的方法(像EOSBet声称的并且也是这么做的, 不需要用户两次参与的), 那么像 github/EOSIO/dice这样做, 是多么的丑陋和多此一举!
最后
Oracles, blockhash, commit reveal? 无论你用什么技术, 都改变不了简单的数学逻辑, 即: 你必须让用户在开点之前, 保留seed(或seed的参数: 秘钥), 然后锁定后再提交.
另外telegram/eosbetcasino/admin一口一个FUD, 他难道不知道FUD的另外一个意思吗?
Congratulations @xoo! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!