本文转发自哈希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的价格也会依照一个递增函数 f 缓慢增加。
(普通读者可以忽略以下公式:
初始价格为 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的时候可以选择战队,有四个战队可供选择:Snek,Bull,Whale,Bear (本质上不同的战队意味着不同的利益分成方式,后面会有比较详细的讲解)
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%的奖池分配如下:
注:玩家会有一定概率获得 eth 空投奖励;F3DPlayer 的金额是在一个玩家购买key 后,严格按照每个玩家拥有 key 的比例立即进行分配,后续文章会讲解。
玩家购买一个 key 后,可通过 etherscan 查看改交易的分配情况:
一轮游戏结束后,奖池里的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 的游戏规则,下面介绍基于上述规则的用例图。
说明:除了玩家的购买(复投)以及提现功能,还有一个注册功能,玩家可以注册一个自己喜爱的名字(会消耗 gas 哟),方便以后推荐别人时使用。
购买 key 时的功能图如下:
从上图可以看出,玩家购买key(包含复投),会触发时间更新,推荐人奖励,F3D 玩家分红,同时触发外部分配;在购买key的过程中,玩家有机会获得空投奖励;当轮次结束,同样会触发外部分配与内部分配。
游戏的实现概述
相关的逻辑大部分被封装在了 FoMo3D 智能合约里,这个合约同时又与外部的其他合约交互 ( PotSwap 合约, JIincForwarder 合约是这个公司负责转发的合约,其中包含社区的合约地址, P3D 合约是这家公司的另一款游戏合约)
下面是各个合约以及DAPP的交互图:
蓝色的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 游戏的实现,讲解以太坊的合约编程与传统的编程思路的不同之处。相信通过学习这系列文章,无论是在智能合约编程还是区块链游戏开发方面,都会有很大收获!
(未完待续