最近做一个区块链的项目,需要彻底分析FOMO3D的智能合约,顺便熟悉一下区块链的开发流程。

首先为了能跑FOMO3D的智能合约我尝试了truffle+galanche,对我来说不太理想,我就自己用python+solc做了一个类似的框架。

可以编译部署发布合约,自动生成前端的JS合约对象以及跑一个aiohttp的测试环境,该环境已经开源https://github.com/bluehook/pyw3c.git,

示例就是全套FOMO3D的智能合约,在分析的过程中我又重新写了一遍FOMO3D也放在示例合约中叫TinyF3D,把所有功能都整合在这一个合约里面,所有FOMO3D实现的功能,Tiny3D都有实现,并且函数名称也保持一致,可以复制到remix里面部署方便测试,交流可加微信号:bluehook。

网上已经有一些FOMO3D的分析文章,我尽量写一些没有分析到的部分。

从另外一个怪异的角度介绍一下FOMO3D这个项目,这个项目的核心是一个函数,这个函数的公式是这样f(x)=sqrt(totala+b^2)-b)/c。

公式不重要,只需要知道这个函数是递增的,比如x=1,f(x)返回1000,x=2,f(x)返回1100,每次x传一样的值返回都一样,了解这个就够了。

现在有这么一个机制:我用x代表奖池的值,f(x)就是整个公式的返回代表当前奖池的值为x时,能够购买的key数量。

这个假设清楚了就继续,那么我现在要购买0.1以太币的keys,我不知道买多少个,反正我就买这么多以太币的,那么可以买多个呢?因为函数是固定的,每一局游戏开始时奖池都是从0开始,也就是说都是从x=0开始,那么我当时能够购买多少keys,反过来想就是要确定当我买了0.1以太币时奖池总奖金x能购买多少keys再减去现在我没有买时奖池总奖金x能购买的keys数量就是我出0.1以太币这一段能买到的keys,

看看公式不难理解:
0.1eth / ( (sqrt((total+0.1)a+b^2)-b)/c) - (sqrt(totala+b^2)-b)/c) ),其中total代表当前总奖池金额。

上面一段是FOMO3D最核心的公式,也是最复杂的公式,剩余的就是流程逻辑,现在来结合流程把上面的函数组合进去。

首先这个合约需要部署,原合约有5个主合约太繁琐,我用我重写合并成的1个主合约TinyF3D来讲,同样适用于FOMO3D,只是不用在合约之间切换。

合约部署后,要开始运行,需要第一个调用的是activate(),这个里面初始化5个地址,第1个是合约的管理者,后面4个是合约的资金流向账户,原FOMO3D通过一个1/N多重签名合约来管理资金,这个模块可以完全根据需要去除让资金自己留向4个账户就可以了。activate()后面再设置开始局的开始时间和结束时间,局ID,最重要是把激活标志设置为activated_ = true;

调用activate()之后,就可以调用一个叫registerNameXID的方法注册一个游戏ID,拿到游戏ID之后,调用buyXid()购买keys,这里就需要上面的公式了,我向buyXid()传入我要购买的金额:0.1以太币,

通过上面的公式:在奖池0的情况下f(0)返回1331个,也就是可以买1331个keys,

如果你再继续买0.1以太币,那么相当于就是f(0.1)(上次花费的钱不可能全部进奖池,这里只是方便)返回1328个,

也就是奖池x=0.1的时候,同样0.1以太币智能购买1328个keys,这就是FOMO3D这个游戏越到后期购买keys越贵的原理,

也是这个游戏最难理解的部分,如果这个理解了,其他基本上没有上面难度,只是有些流程比较绕,所以我重写了FOMO3D合约,去除了多重签名,把playerbook合约的功能集成到了主合约,直接查看TinyF3D就能清楚整个DAPP的游戏逻辑。

只要理解了上面就理解了整个核心逻辑,剩下的枝节我相信有开发经验的都能明白。

区块链游戏FOMO3D智能合约核心分析相关推荐

  1. 编写区块链游戏学智能合约 教程2:僵尸攻击人类

    该教程来自 CryptoZombies 网址:https://cryptozombies.io/zh/course/ CryptoZombies 是个在编游戏的过程中学习 Solidity 智能协议语 ...

  2. 分享实录|区块链技术与智能合约入门(开发实例)

    2019独角兽企业重金招聘Python工程师标准>>> 1 什么是区块链 1.1白话讲解区块链 现在区块链特别火,可能大家都听说过区块链,听说过比特币,那到底什么是区块链? 前几天和 ...

  3. 【区块链DAPP】智能合约概述

    智能合约概述 智能合约是运行在区块链公链上的一种代码,该代码由Solidity编写,并通过区块链的智能合约虚拟机来执行,以达到对区块链编程的目标.可以将区块链公联理解为操作系统,Solidity是编写 ...

  4. 区块链中的智能合约是什么?

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. "智能合约是一套以数字形式定义的承诺,承诺控制着数字资产并包含了合约参与者约定的权利和义务,由计算机系统自动执 ...

  5. 行走在区块链上的智能合约

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 我和你打一个赌,我赌明天是雨天,你赌是晴天,赌注100大洋.假设明天是晴天,然后你跑过来管我要100大洋的赌金,我装疯卖 ...

  6. 区块链 Fisco bcos 智能合约(19)-区块链性能腾飞:基于DAG的并行交易执行引擎PTE

    在区块链世界中,交易是组成事务的基本单元. 交易吞吐量很大程度上能限制或拓宽区块链业务的适用场景,愈高的吞吐量,意味着区块链能够支持愈广的适用范围和愈大的用户规模. 当前,反映交易吞吐量的TPS(Tr ...

  7. tron区块链php对接,Tron区块链技术 - Tron智能合约概述

    Tron区块链技术:多年来,  以太坊  一直是分散世界中开发智能合约的主流平台之一.然而,最近TRON作为一个准备面对以太坊的竞争平台在分散网络中崛起. TRON区块链技术是什么? Tron区块链是 ...

  8. 区块链中的“智能合约”有何应用?

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 如刺金般闪耀的区块链时代,投资者的热潮还将持续升温,与此同时金融的大佬已经开始注意到区块链应用落地场景的实现,在金融界实 ...

  9. 区块链技术:智能合约入门

    什么是智能合约 一个智能合约是一套以数字形式定义的承诺(promises) ,包括合约参与方可以在上面执行这些承诺的协议.一个合约由一组代码(合约的函数)和数据(合约的状态)组成,并且运行在以太坊虚拟 ...

最新文章

  1. 工厂方法(父类定义创建对象的接口,通过多态让子类来创建具体的对象)
  2. 1 图片channels_【深度学习】卷积神经网络图片分类案例(pytorch实现)
  3. 全面收紧!继新加坡后,又一地拟暂停数据中心建设
  4. python如何删除文件夹下文件和文件夹?
  5. LIVE555再学习 -- FFmpeg + live555实现RTSP直播
  6. javascript数组的属性、方法和清空-最全!!!(必看)
  7. 电气期刊论文实现:考虑斜坡约束、开停机时间约束的电力机组组合(程序讲解)
  8. SpringMVC+uploadify文件上传
  9. 集成 websocket 的四种方案
  10. POJ 1252 Euro Efficiency
  11. Stackint stack = new Stackint报错原因
  12. SharePoint 2010-在ribbon上添加表单,将默认control加到自定义group中
  13. 幅值与峰峰值的计算_正弦波的幅度指的是峰值还是峰峰值
  14. 谷歌浏览器添加插件——json
  15. iPhone卡三格信号网络不通无服务
  16. 用python制作贺卡怎么显示人名_制作python程序来处理卡片的麻烦.
  17. 原来Mysql索引要这么设计才能起飞
  18. RabbitMQ Tracing插件使用
  19. VS2010 Ultimate 微软官网免费下载 VS2010终级版
  20. 米勒-拉宾素性检测算法

热门文章

  1. java开发图灵机器人
  2. android视频播放格式,Android视频以及视频播放器实例
  3. jetson nano csi摄像头 tensorrt 运行yolov8检测
  4. Angular2 中setTimeOut 回调函数未定义问题
  5. 奇安信2022秋招面经-技术支持岗
  6. Veracode推出技术联盟计划
  7. SpringCloud学习(六)----- Gatewayw网关完善(防止SQL注入)
  8. 修改转移表空间些许操作
  9. 充分利用大内存提升电脑速度
  10. Dorado7之BDF3框架初探