明星游戏 FOMO3D 代码剖析 | 直播预告

640?wx_fmt=png


本文转发自哈希1024社区。作者tyler将于9月12日周三晚进行网络直播,在线解析FoMo3D智能合约游戏的代码细节,机会难得,欢迎参加。参与方式见文末。



前段时间令人瞩目的明星游戏 FOMO3D,大家可能都有了解,也许一部分朋友也参与进去了,题图的游戏界面,大家感受下。


第一轮经过短暂的火热,之后处于近一个月的低迷,于8月22日下午三点左右终于结束,目前第二轮还在进行中。


第一轮游戏总共有约十万左右的用户参与游戏,总共投入约11万个 ETH,7月21日为参与高峰,约 12700 个用户参与,赢家获得一万多个 ETH,平台赚取约 3900 多个 ETH。


FOMO3D 游戏主要通过以太坊智能合约实现,核心代码不超过两千行,里面有很多精妙的设计,值得广大程序员学习,后续文章会陆续道来。


本文主要讲解 FOMO3D 游戏的规则,以及这个游戏的实现原理概览。(本文首发于哈希1024社区:hash1024.org


FOMO3D游戏的规则:


1.游戏有个倒计时机制,初始值为 24 小时,倒计时为零时,一轮游戏结束。


2.用户可以购买 key,每购买一个 key 会增加 30 秒(注意:24小时是上限)


3. 每一个购买了 key 的玩家,都会因为后入场玩家的每一次购买而享受分红,具体分红函数后续文章会详细介绍。


4. key的价格也会依照一个递增函数 缓慢增加。

(普通读者可以忽略以下公式:

初始价格为 0.000075 ETH,

f(x) = (0.78125x^2+0.74999921875x*10^24)/10^28

下一个key的价格是f(keys+10^18)-f(keys)其中keys表示这一轮到目前为止的key的数量)


5. 当一轮游戏结束的时候,最后购买key的玩家就是赢家,将获得奖池里的48%的 ETH。(本文首发于哈希1024社区:hash1024.org )


6.轮次间有一小时的冻结期,这期间是不可以买key(买不进去)


7. 在购买key的时候可以选择战队,有四个战队可供选择:SnekBullWhaleBear (本质上不同的战队意味着不同的利益分成方式,后面会有比较详细的讲解)


8.用户获得的分红可以继续复投(继续购买key) 


下面介绍下,在一轮游戏还没有结束时,玩家买key花费的eth具体是怎么分配的。

Team

Pot

F3D Player

P3D Player

Snek

20%

56%

10%

Bull

35%

43%

8%

Whale

50%

30%

6%

Bear

43%

43%

0%

比如玩家购买时选择蛇队,意味着玩家 eth 的 20% 进入池底,56%按比例分配给之前的游戏玩家,10% 给 P3D 玩家(注:P3D 这家公司的另一款产品,实际上也是一个合约,具体参考这里);其他战队分红方式也是类似。


以上表格可以看出,无论选择哪队,86% 的 eth 被分配了,还有14%的奖池分配如下:

  • 10%分配给玩家的推荐者(若没有推荐者,则分给P3D玩家),

  • 2%分配给社区基金,

  • 1%potswap, 

  • 1%用于空投。


注:玩家会有一定概率获得 eth 空投奖励;F3DPlayer 的金额是在一个玩家购买key 后,严格按照每个玩家拥有 key 的比例立即进行分配,后续文章会讲解。


玩家购买一个 key 后,可通过 etherscan 查看改交易的分配情况:


640?wx_fmt=png


一轮游戏结束后奖池里的ETH具体分配情况:

Team

Next Round

F3D Player

P3D Player

Snek

10%

20%

20%

Bull

10%

30%

10%

Whale

25%

15%

10%

Bear

25%

25%

0%

注:48% 的奖池属于最后一个买 key 的人,2% 属于社区。剩下 50% 的奖池,比如 Snek 队的玩家赢得了胜利,10% 的奖金滚到下一轮,20% 的奖金按照持Key比例分给F3D玩家,20%的奖金分给P3D玩家。其他情况类似。


上面比较详细地介绍了 FOMO3D 的游戏规则,下面介绍基于上述规则的用例图。

640?wx_fmt=png


说明:除了玩家的购买(复投)以及提现功能,还有一个注册功能,玩家可以注册一个自己喜爱的名字(会消耗 gas 哟),方便以后推荐别人时使用。

购买 key 时的功能图如下:


640?wx_fmt=png

从上图可以看出,玩家购买key(包含复投),会触发时间更新,推荐人奖励,F3D 玩家分红,同时触发外部分配;在购买key的过程中,玩家有机会获得空投奖励;当轮次结束,同样会触发外部分配与内部分配。


游戏的实现概述


相关的逻辑大部分被封装在了 FoMo3D 智能合约里,这个合约同时又与外部的其他合约交互 ( PotSwap 合约, JIincForwarder 合约是这个公司负责转发的合约,其中包含社区的合约地址, P3D 合约是这家公司的另一款游戏合约)


下面是各个合约以及DAPP的交互图:

640?wx_fmt=png

蓝色的DApp是前端应用,主要是用 web3 (js接口与区块链上的合约交互并把结果展示在浏览器。(本文首发于哈希1024社区:hash1024.org )


DApp 要从 FOMO3D 合约读取数据,包括每个玩家的买的 key 数量以及 earnings,还有游戏的全局数据,比如 key 的价格,剩余时间,各个战队的购买情况等等;同时 DApp 负责监听 FOMO3D 的事件,并作出相应响应;


DApp 还要与 FOMO3D, PlayerBook 交互进行地址/名字与后台的 playerId 的映射,方便后续的存储与引用;


F3DexternalSettings 合约负责游戏的时间间隔设置,主要是进行轮次间时间的设置,这个合约的代码没有开放 可能是这部分代码是这家公司的公共设置模块,不愿意开源)


购买key时智能合约调用过程: 


比如用户在 DApp 上点击购买 key,这是会由 DApp 触发 FOMO3D 合约的方法,FOMO3D 会与 PlayerBook 交互获取 PlayerId ,并执行内部核心的购买逻辑,同时会调用 P3D 合约,PotSwap 合约,JIincForwarder 合约进行相应比例金额的转账。


总结与直播预告:

本文介绍了 FOMO3D 游戏的详细规则及其概览实现,让读者对 FOMO3D 游戏整体结构有了初步的了解,为后续的系列文章做好准备。

 

后续文章会介绍 FOMO3D 游戏实现的巧妙之处,还会结合 FOMO3D 游戏的实现,讲解以太坊的合约编程与传统的编程思路的不同之处。相信通过学习这系列文章,无论是在智能合约编程还是区块链游戏开发方面,都会有很大收获!


(未完待续)


作者简介:tyler, 程序猿,就职于镍磐科技,哈希1024社区专栏作者,近十年开发经验,干过传统金融,继而转战互联网金融,现在从事区块链研究与开发工作,2012 年开始关注比特币,并对区块链产生了浓厚兴趣。希望和大家共同学习区块链,多多交流。


 

哈希夜话直播活动预告:


我们将在9月12日周三晚举行在线哈希夜话直播活动,本次主题为 FoMo3D 游戏智能合约剖析,希望参加直播的读者先加入哈希1024社区微信群,直播信息将在群里通知。名额有限,请尽快报名。报名方式:扫码关注公众号 哈希1024社区,在后台回复哈希即可。

640?wx_fmt=png

猜你喜欢

转载自blog.csdn.net/q48S71bCzBeYLOu9T0n/article/details/82598768