专栏名称: 创宇前端
目录
相关文章推荐
前端大全  ·  确定裁员了,很严重,大家做好准备吧! ·  昨天  
前端大全  ·  React已死,Vue已凉,前端AI彻底称王! ·  18 小时前  
前端早读课  ·  【第3523期】程序员专属提示词工程实战手册 ·  23 小时前  
前端之巅  ·  为什么2025/05/28和2025-05- ... ·  2 天前  
前端早读课  ·  【第3522期】扩展 React 服务端渲染的能力 ·  昨天  
51好读  ›  专栏  ›  创宇前端

区块链上编程:DApp 开发实战——来写个竞猜游戏吧!

创宇前端  · 掘金  · 前端  · 2018-10-10 06:00

正文

请到「今天看啥」查看全文


阅读 19

区块链上编程:DApp 开发实战——来写个竞猜游戏吧!

本文旨在引导对 DApp 开发感兴趣的开发者,构建一个基于以太坊去中心化应用,通过开发一款功能完备的竞猜游戏,迈出 DApp 开发的第一步,通过实例讲解 Solidity 语言的常用语法,以及前端如何与智能合约进行交互。

如果正在阅读的你,从未接触过 DApp 开发也不要紧,可以先阅读【 区块链上编程:DApp开发简介 】进行前置知识补充。


随着加密猫、FOMO3D 等游戏的火爆,去中心化应用在游戏领域遍地开花,下面就带着大家一起开发一款简单有趣的 DApp 游戏,帮助大家熟悉 DApp 开发。本 DApp 实现的合约功能:用户从 0-6 的数字中,任意组合三位数进行投注,合约计算出 3 位随机数,根据随机数的组合规则分别给予用户不同倍数的奖励,如随机数为 AAA ,A 等于 6 则奖励至少 20 倍投注金额,即奖池所有余额;A 不等于 6 则奖励 5 倍投注金额;随机数为 AAB,则奖励 2 倍投注金额;随机数为 ABC 则不奖励,同时用户可查看奖池余额和个人投注记录。

合约编写

可以看出合约需要实现用户投注、生成随机数、发放奖励、奖池余额查询的功能,接下来编写我们的合约代码。

新建 Lottery.sol 合约文件,声明合约版本, ^ 表示合约编译版本为 0.4.0 至 0.5.0(不含 0.5.0)。

pragma solidity ^0.4.0;
复制代码

定义合约基本内容,同时声明最低投注金额。

contract Lottery {
  uint public betMoney = 10 finney;
}
复制代码

生成随机数,通过区块难度 block.difficulty 和内置函数 keccak256 生成随机数,在 EVM 中常用的数据存储位置: memory storage ,函数的参数、返回值默认存储在 memory 中,状态变量默认存储在 storage 中,我们可以通过声明 memory storage 改变默认存储位置,两者的存储都需要消耗 gas ,但 storage 的开销远大于 memory

contract Lottery {
  ...
  function generateRandomNumber() private view returns(uint[]) {
    uint[] memory dices = new uint[](3






请到「今天看啥」查看全文