区块链游戏FOMO3D智能合约核心分析
最近做一个区块链的项目,需要彻底分析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智能合约核心分析相关推荐
- 编写区块链游戏学智能合约 教程2:僵尸攻击人类
该教程来自 CryptoZombies 网址:https://cryptozombies.io/zh/course/ CryptoZombies 是个在编游戏的过程中学习 Solidity 智能协议语 ...
- 分享实录|区块链技术与智能合约入门(开发实例)
2019独角兽企业重金招聘Python工程师标准>>> 1 什么是区块链 1.1白话讲解区块链 现在区块链特别火,可能大家都听说过区块链,听说过比特币,那到底什么是区块链? 前几天和 ...
- 【区块链DAPP】智能合约概述
智能合约概述 智能合约是运行在区块链公链上的一种代码,该代码由Solidity编写,并通过区块链的智能合约虚拟机来执行,以达到对区块链编程的目标.可以将区块链公联理解为操作系统,Solidity是编写 ...
- 区块链中的智能合约是什么?
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. "智能合约是一套以数字形式定义的承诺,承诺控制着数字资产并包含了合约参与者约定的权利和义务,由计算机系统自动执 ...
- 行走在区块链上的智能合约
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 我和你打一个赌,我赌明天是雨天,你赌是晴天,赌注100大洋.假设明天是晴天,然后你跑过来管我要100大洋的赌金,我装疯卖 ...
- 区块链 Fisco bcos 智能合约(19)-区块链性能腾飞:基于DAG的并行交易执行引擎PTE
在区块链世界中,交易是组成事务的基本单元. 交易吞吐量很大程度上能限制或拓宽区块链业务的适用场景,愈高的吞吐量,意味着区块链能够支持愈广的适用范围和愈大的用户规模. 当前,反映交易吞吐量的TPS(Tr ...
- tron区块链php对接,Tron区块链技术 - Tron智能合约概述
Tron区块链技术:多年来, 以太坊 一直是分散世界中开发智能合约的主流平台之一.然而,最近TRON作为一个准备面对以太坊的竞争平台在分散网络中崛起. TRON区块链技术是什么? Tron区块链是 ...
- 区块链中的“智能合约”有何应用?
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 如刺金般闪耀的区块链时代,投资者的热潮还将持续升温,与此同时金融的大佬已经开始注意到区块链应用落地场景的实现,在金融界实 ...
- 区块链技术:智能合约入门
什么是智能合约 一个智能合约是一套以数字形式定义的承诺(promises) ,包括合约参与方可以在上面执行这些承诺的协议.一个合约由一组代码(合约的函数)和数据(合约的状态)组成,并且运行在以太坊虚拟 ...
最新文章
- 工厂方法(父类定义创建对象的接口,通过多态让子类来创建具体的对象)
- 1 图片channels_【深度学习】卷积神经网络图片分类案例(pytorch实现)
- 全面收紧!继新加坡后,又一地拟暂停数据中心建设
- python如何删除文件夹下文件和文件夹?
- LIVE555再学习 -- FFmpeg + live555实现RTSP直播
- javascript数组的属性、方法和清空-最全!!!(必看)
- 电气期刊论文实现:考虑斜坡约束、开停机时间约束的电力机组组合(程序讲解)
- SpringMVC+uploadify文件上传
- 集成 websocket 的四种方案
- POJ 1252 Euro Efficiency
- Stackint stack = new Stackint报错原因
- SharePoint 2010-在ribbon上添加表单,将默认control加到自定义group中
- 幅值与峰峰值的计算_正弦波的幅度指的是峰值还是峰峰值
- 谷歌浏览器添加插件——json
- iPhone卡三格信号网络不通无服务
- 用python制作贺卡怎么显示人名_制作python程序来处理卡片的麻烦.
- 原来Mysql索引要这么设计才能起飞
- RabbitMQ Tracing插件使用
- VS2010 Ultimate 微软官网免费下载 VS2010终级版
- 米勒-拉宾素性检测算法