pragma solidity >=0.4.21 <0.6.0; contract Casino { address payable public owner; event Play(address payable indexed player, uint256 betSize, uint8 betNumber, uint8 winningNumber); event Payout(address payable winner, uint256 payout); constructor() public { owner = msg.sender; } function kill() external { require(msg.sender == owner, "Only the owner can kill this contract"); selfdestruct(owner); } function fund() external payable {} function bet(uint8 number) external payable { require(msg.value <= getMaxBet(), "Bet amount can not exceed max bet size"); require(msg.value > 0, "A bet should be placed"); uint8 winningNumber = generateWinningNumber(); emit Play(msg.sender, msg.value, number, winningNumber); if (number == winningNumber) { payout(msg.sender, msg.value * 10); } } function getMaxBet() public view returns (uint256) { return address(this).balance / 100; } function generateWinningNumber() internal view returns (uint8) { return uint8(block.number % 10 + 1); // Don't do this in production } function payout(address payable winner, uint256 amount) internal { assert(amount > 0); assert(amount <= address(this).balance); winner.transfer(amount); emit Payout(winner, amount); } }
测试代码:
const Casino = artifacts.require('Casino'); const assert = require("chai").assert; const truffleAssert = require('truffle-assertions'); contract('Casino', (accounts) => { let casino; const fundingAccount = accounts[0]; const bettingAccount = accounts[1]; const fundingSize = 100; // build up and tear down a new Casino contract before each test beforeEach(async () => { casino = await Casino.new({ from: fundingAccount }); await casino.fund({ from: fundingAccount, value: fundingSize }); assert.equal(await web3.eth.getBalance(casino.address), fundingSize); }); afterEach(async () => { await casino.kill({ from: fundingAccount }); }); it("should lose when bet on the wrong number", async () => { let betSize = 1; // we know what the winning number will be since we know the algorithm let betNumber = (await web3.eth.getBlock("latest")).number % 10 + 1; let tx = await casino.bet(betNumber, { from: bettingAccount, value: betSize }); // player should be the same as the betting account, and the betted number should not equal the winning number truffleAssert.eventEmitted(tx, 'Play', (ev) => { return ev.player === bettingAccount && !ev.betNumber.eq(ev.winningNumber); }); // there should be no payouts truffleAssert.eventNotEmitted(tx, 'Payout'); // check the contract's balance assert.equal(await web3.eth.getBalance(casino.address), fundingSize + betSize); }); it("should win when bet on the right number", async () => { let betSize = 1; // we know what the winning number will be since we know the algorithm let betNumber = ((await web3.eth.getBlock("latest")).number + 1) % 10 + 1; let tx = await casino.bet(betNumber, { from: bettingAccount, value: betSize }); // player should be the same as the betting account, and the betted number should equal the winning number truffleAssert.eventEmitted(tx, 'Play', (ev) => { return ev.player === bettingAccount && ev.betNumber.eq(ev.winningNumber); }); // player should be the same as the betting account, and the payout should be 10 times the bet size truffleAssert.eventEmitted(tx, 'Payout', (ev) => { return ev.winner === bettingAccount && ev.payout.toNumber() === 10 * betSize; }); // check the contract's balance assert.equal(await web3.eth.getBalance(casino.address), fundingSize + betSize - betSize * 10); }); });
相关推荐
《Thinkphp战国乱世王者养成游戏区块链游戏源码》是一个基于Thinkphp框架开发的游戏源码,结合了战国历史背景和区块链技术,旨在提供一个独特的游戏体验。在这个项目中,开发者运用了Thinkphp作为后端开发的主要工具...
区块链模式茶场游戏源码带商城 虚拟农场+在线商城 带系统交易,茶叶种植系统,带交易大厅,带游戏玩家游戏获得的茶叶可以与商城结合的系统 区块链模式 游戏规则: 佣金规则 茶场分五个级别: 1、茶工级别:免费...
Cocos creator 2.X 数字合十 消消乐 游戏源码下载,完整可运营版本,可二次开发做区块链游戏,代码是TS的代码,方便阅读,容易修改。 Cocos creator 2.X 数字合十 消消乐 游戏源码下载,完整可运营版本,可二次开发...
小游戏 游戏系统设计、开发,供相关人员学习参考,提供说明材料+源代码 小游戏 游戏系统设计、开发,供相关人员学习参考,提供说明材料+源代码 小游戏 游戏系统设计、开发,供相关人员学习参考,提供说明材料+源代码...
这是一个真正的区块链去中心化游戏 下载运行之后就可以连接到以太坊智能合约 所有人的游戏数据都保存在区块链上 无论是谁,无论在何地运行的游戏都可以连接到相同的数据 这个程序是根据 https://cryptozombies.io/ ...
养蘑菇区块链技术投资理财游戏源码可随便二开源代码介绍
今天我们要探讨的是一个特别的资源包——《水浒传街机游戏源码HGE水浒传完整源码+库存+前控制代码》,这份资源包为游戏开发者提供了一个了解和学习游戏开发全过程的宝贵机会。 首先,让我们聚焦于资源包中的C++编程...
这个资源包包含多个项目,帮助你从头开始构建自己的区块链、数据库系统、版本控制系统(如Git)、游戏、操作系统基础、Web服务器、各种编程语言的理解、Shell脚本编写、物理引擎的构建、3D渲染技术和前端开发框架的...
Mage Duel 是作为 LINE 区块链示例服务实现的 TCG(交易卡游戏)。玩家互相决斗,使用他们的卡片组。法师决斗由服务器和客户端组成。此存储库仅包含服务器端代码。
毕业设计 基于区块链的宠物游戏源码+项目资料齐全+部署文档(优秀项目).zip毕业设计 基于区块链的宠物游戏源码+项目资料齐全+部署文档(优秀项目).zip毕业设计 基于区块链的宠物游戏源码+项目资料齐全+部署文档...
区块链 基于以太坊的水果机游戏源码+项目资料齐全+部署文档 高分项目.zip区块链 基于以太坊的水果机游戏源码+项目资料齐全+部署文档 高分项目.zip区块链 基于以太坊的水果机游戏源码+项目资料齐全+部署文档 高分项目...
区块链 基于以太坊的共享画布游戏源码+项目资料齐全+部署文档 高分项目.zip区块链 基于以太坊的共享画布游戏源码+项目资料齐全+部署文档 高分项目.zip区块链 基于以太坊的共享画布游戏源码+项目资料齐全+部署文档 ...
区块链 基于以太坊的健身养成游戏源码+项目资料齐全+部署文档 高分项目.zip区块链 基于以太坊的健身养成游戏源码+项目资料齐全+部署文档 高分项目.zip区块链 基于以太坊的健身养成游戏源码+项目资料齐全+部署文档 ...
区块链 基于以太坊的三连棋游戏源码+项目资料齐全+部署文档 高分项目.zip区块链 基于以太坊的三连棋游戏源码+项目资料齐全+部署文档 高分项目.zip区块链 基于以太坊的三连棋游戏源码+项目资料齐全+部署文档 高分项目...
区块链 基于web3.js 以太坊的投注游戏源码+项目资料齐全+部署文档 高分项目.zip区块链 基于web3.js 以太坊的投注游戏源码+项目资料齐全+部署文档 高分项目.zip区块链 基于web3.js 以太坊的投注游戏源码+项目资料齐全...
基于tendermint区块链的宠物游戏源码+全部资料(毕业设计).zip基于tendermint区块链的宠物游戏源码+全部资料(毕业设计).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心...
基于tendermint区块链的宠物游戏全部资料+详细文档.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心...
区块链 基于以太坊的水果机游戏的设计与实现+详细文档+全部资料(优秀项目).zip区块链 基于以太坊的水果机游戏的设计与实现+详细文档+全部资料(优秀项目).zip区块链 基于以太坊的水果机游戏的设计与实现+详细文档...
区块链 基于以太坊的健身养成游戏的设计与实现+详细文档+全部资料(优秀项目).zip区块链 基于以太坊的健身养成游戏的设计与实现+详细文档+全部资料(优秀项目).zip区块链 基于以太坊的健身养成游戏的设计与实现+...
区块链毕业设计 基于Solidity智能合约开发的僵尸养成游戏源码+项目资料齐全+部署文档(优秀项目).zip区块链毕业设计 基于Solidity智能合约开发的僵尸养成游戏源码+项目资料齐全+部署文档(优秀项目).zip ...