« 如何只基于请求回应模式实现 MMO 级别的场景服务 | 返回首页 | Skynet 1.0.0 发布 »

一元购庄家如何作弊

今天见同事贴了张照片,是网易大楼前有人拉横幅声讨“一元购” 这个产品的。

我之前没有听说过,上网搜了一下,发现最近搞这个的满多。大概就是说,每个玩家出一块钱买一个很贵的东西。然后系统把这些人凑在一起抽签,抽到谁谁就拿走那个东西。

比如一部手机卖 5000 块,有 5000 个人想买,一个人出一块钱,最后也只有一个人拿到货,其他人都损失了一块钱。

这不就是卖彩票么?

当然凑不到 5000 个人也没关系,系统(庄家)可以买走大部分票,这并不影响个人参与者中奖概率。当然,前提是庄家没有作弊,抽签是公平的。

那么庄家有没有办法作弊呢?

我们来看看网易“一元夺宝”的规则

摘录如下:

  1. 商品的最后一个号码分配完毕后,将公示截止该时间点本站全部商品的最后50个参与时间;

  2. 将这50个时间的数值进行求和(得出数值A)(每个时间按时、分、秒、毫秒的顺序组合,如20:15:25.362则为201525362);

  3. 为保证公平公正公开,系统还会等待一小段时间,取最近下一期中国福利彩票“老时时彩”的揭晓结果(一个五位数值B);

  4. (数值A+数值B)除以该商品总需人次得到的余数 + 原始数 10000001,得到最终幸运号码,拥有该幸运号码者,直接获得该商品。

其实能保证公平的关键在 3 ,引入了一个第三方看起来比较公正的随机数。除此之外的所有参数都是可以庄家作假的。


我想讨论一下,如果这个第三方随机数是公正的前提下,一元购的庄家还有没有机会作弊。

首先,这个外部随机数是个 5 位数,如果参与人数并非固定,那么经过对人数取模后,每个号码的分布并不是完全一致的,虽然偏差很小,但是有一定的作弊空间。所以、规则上若想回避,参与人数不可以大于 5 位数,且最后能除尽 100000 。直观上说,每组人数最好是 100 , 1000, 5000 这样的。

其次,我觉得最大的规则漏洞是,同时进行的多组抽签都依赖了这个单一随机数,这使得庄家很容易钻空子。比如,如果每组人数是 100 的话,庄家只要同时开 100 组。如果第三方随机数是多少,他都有办法在其中一组中作弊成功。通俗点讲,庄家在不同组买全了所有号码,且这个购买是无需支付差价成本的(差价指每注的实际价值和标价间的差距,比如 100 个人去抽实际价值 80 块的东西,每注的实际价值只有 8 毛,差价就是 2 毛)。它要做的只是操作其它变量看起来符合结果就够了。

以上讨论仅仅只是说明庄家有没有作弊的空间,并非说网易或是别家经营这个业务的庄家真的有作弊行为。我相信这个玩法的盈利点和卖彩票差不多,根本不必靠作弊就可以赚钱。只需要把 3000 块成本的商品在平台上标 5000 就自然可以赚大头了。

本质上就是赌博,我是很不喜欢的。


如果不考虑用户的操作成本和理解成本,有没有可能指定一个更好更公平的规则,尽量回避庄家作弊呢?

我想最简单的做法是不依赖第三方随机数,而让参与人变成随机数提供者。

比如:如果有 100 个人参加抽签,那么先给 100 人发号。然后每个人自己产生一个随机数(自己想的还是自己用工具 app 产生的无所谓),并给一个足够长的随机串做盐。

大家用一个公开 hash 算法计算 hash(随机数 , 盐) 得到一个 hash 串,提交给组织者(庄家)。以上过程可以由 app 完成,为了提高 app 可信度,允许用户自己在 app 外计算,只提交 hash 串;同时给信任 app 的人提供更方便的自动计算功能。

等所有人提交完后,公示每个人的提交串,然后进入开奖流程。

开奖流程要求每个参与者提交原始随机数和随机盐,服务器和之前的 hash 串比对。任何一个人错误提交或不提交,都会导致这局游戏流掉。系统没收资本,扣除个人信誉值,并把其它投注退还给遵守规则的参与者。

如果所有人都提交,把数字加起来,得到中奖人的号码。

在这套规则里,任何人不参与开奖流程都会导致无法开奖,所以是相对公平的。如果有人恶意不开奖,或庄家做假(发现自己开了后会导致真正玩家中奖而不开),用户就得依靠查阅同组人的信誉值甚至历史来决定自己是否要跟他们玩了。

系统(庄家)可以帮助用户撮合信誉度高的用户在同一组里。

这套规则的一个风险是,庄家对玩家的信誉值作假;比如给一个机器人很高的信誉,这点需要玩家警惕,也比较容易被发现。庄家作弊风险很大。

另一个风险是,庄家如果拥有很强的计算力和很长的开奖时间,可能暴力解出玩家提交的随机数。这点需要通过加长盐和加大随机数的取值范围来缓解。

Comments

有是肯定有机会作弊的,毕竟这玩意不一定每次都有人中,就算有,那估计也是极少数,在后台insert一条数据进去并非没可能
@pangliang 我每一组本身就有20块"利润", 我为啥还需要去"作弊"? 因为对于特定商品,在短时间是很难凑齐人的。如果凑齐再开奖的话,那么单局需要的时间就长了。 也就是一天开 100 局游戏(赚 2000)还是一天开 20 局游戏(赚 400) 的区别。 机器人也就必不可少了。
如果随机用机器人填的话,真实用户(全体)有可能赚有可能赔。当然赚的可能性是少于赔的可能性的。 比如按两组那个简化例子,如果庄家随意。那么两个用户都有可能抽到奖,也就是用 2 块钱拿到了 3 块的奖品;当然也有可能 2 块钱全部没了,拿到 0 块的奖品。也就是,25% 赚一块,25% 赔两块,50% 赔 5 毛。 但机器人刻意以某种规则去填的话,就可以回避庄家赔的风险。用户变成了 100% 赔 5 毛。 庄家利润的数学期望没有变,但庄家风险变小。
按照简化的流程,分两组的例子,只能表明平台可以用机器人增加虚假交易,造成很多人在玩的假象,并不能给平台带去实际收益,玩家的获奖概率也没有受到影响,这种作弊没有意义吧。对于玩家来说,玩之前就已经注定2块钱的投入,就只能换回1块5啊。
其实并不是那么算的,我觉得风大主要的意思是,用户是有限的,不可能每个奖品都会被买满,那么这些没买满的,是要庄家填的,那么如果庄家填的这些作弊了,那么损失的就是买这个奖品的所有用户。其实就是等于其他用户投的钱都白投了。。。庄家完全可以吧奖品拿来做下一期礼品。。。0损失:)
不作弊: 收入5*100 = 500 (1组100个坑, 玩家填) 支出5*80 = 400 (一个奖品80的成本) 利润 = 100 作弊 收入5*80 = 400 (100个坑, 有20的坑是庄填的, 玩家只填了80个坑) 支出4*80 = 320 (作弊了一组少付一个奖品) 利润 = 80
我不是很理解; 有差价才有作弊空间? 就比如100 个人去抽实际价值 80 块的东西, 作弊空间是20, 也就是开 5组 , 0成本, 买完 1-100所有号码, 对吧? 那问题在于, 我每一组本身就有20块"利润", 我为啥还需要去"作弊"? 作弊5组得一组赚100(赚80吧?), 不作弊一组赚20得100
@锋 你说的对。机器人的作用在这里其实是用零成本零风险凑单,制造很多局游戏的假像(真实用户有限,不可能购买兴趣是同一种,所以必须开多局分成目标商品不同的多组,不够的人数用机器人补);或者是加入机器人去降低每注的实际价值。(比如 80 块的东西,如果开 80 注就是公平的,开 100 注的话,每注的价值就只有 8 毛) 如果不作弊直接加入机器人的话,庄家和真实玩家有同样的风险。但是如果庄家去操作结果的话,可以做到零风险。 我们简化一下,如果外部随机数就是个硬币,要么 0 要么 1 。 开两组,每组售卖 1 块 5 的东西, 每注 1 块。 每组一个真人一个机器人。机器人在第一组固定买 0 , 第 2 组固定买 1 。 无论外部随机数是什么,这两组合起来的结果一定是玩家买到一个,机器人买到一个(庄家不必支出)。 也就是玩家一共投入 2 注两块钱,一定只买到一个 1 块 5 的东西,没有任何随机性成分。
最后50参与者时间不算随机数?都是机器人?机器人应该要算成本吧?一个一元?还有怎样开100组都买同一个不用成本?不是很理解,这不是把彩票数字都买了一定中的意思吗?不理解,请教一下
如果用blockchain做随机数呢?
云大的沙发!

Post a comment

非这个主题相关的留言请到:留言本