• 微课视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
微课江湖
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 微课视频
  • 安全教程
  • 安全设置
  • 杀毒防毒
  • 病毒查杀
  • 脚本攻防
  • 入侵防御
  • 工具使用
  • 业界动态
  • Exploit
  • 漏洞分析
  • 加密解密
  • 手机安全
  • 区块链
您的位置:首页 > 网络安全 >区块链 > 如何在Ethereum上编写自己的CryptoKitties风格的游戏

如何在Ethereum上编写自己的CryptoKitties风格的游戏

作者:以太坊爱好者 字体:[增加 减小] 来源:互联网 时间:2018-11-03

以太坊爱好者向大家分享了如何在Ethereum上编写自己的CryptoKitties风格的游戏,其中包含CryptoKitties游戏等知识点,遇到此问题的同学们可以参考下

CryptoKitties?做了很棒的工作,他展示除了简单的金融交易之外还可以使用区块链做什么。

我希望将来我们会看到更多创新的区块链用法,所以我想快速浏览CryptoKitties背后的代码,以展示它背后是如何实现的。

本文是为开发人员编写的,虽然这不是一个绝对的初学者对Solidity的介绍,但是我试图包含文档的链接,以便尽可能适合所有开发者。

让我们开始...

CryptoKitties源码

几乎所有的CryptoKitties代码都是开源的,因此找出它的工作原理的最好方法是阅读源代码。

总共大约有2000行,所以在这篇文章中,我只会讲解我认为最重要的部分。 但是,如果您想单独阅读,请参阅EthFiddle上的完整合约代码副本:

CryptoKitties Source Code:https://ethfiddle.com/09YbyJRfiI

总概:

如果你不了解CryptoKitties是什么,它基本上是一个购买,销售和繁殖数字猫的游戏。 每只猫都有一个独特的外观,由它的基因所定义,当你通过两只猫繁殖时,它们的基因以一种独特的方式结合在一起产生一个后代,然后你可以繁殖或出售它。

CryptoKitties 的代码分为许多相关的较小的合约, 而不是一个单一的包含所有东西的巨大文件

子合约像下面这样继承主kitty合约:

contract KittyAccessControlcontract KittyBase is KittyAccessControlcontract KittyOwnership is KittyBase, ERC721contract KittyBreeding is KittyOwnershipcontract KittyAuction is KittyBreedingcontract KittyMinting is KittyAuctioncontract KittyCore is KittyMinting

所以KittyCore是最终应用程序指向的合约地址,他继承了前面合约的所有的属性和方法
让我们一个一个的看看这些合约:

1. KittyAccessControl:谁控制合约?

这个合约管理只能由特定角色执行操作的各种地址和约束。这些角色叫CEO, CFO and COO.
这个合约是为了管理合约,根本不涉及到游戏的机制。他为CEO, COO 和CFO提供有“setter”方法, 他们(CEO, COO, CFO)是对合约具有特殊所有权和控制权的以太坊地址。
KittyAccessControl 定义一些modifier函数例如 onlyCEO(只有CEO才能执行),还有暂停/恢复合约的方法或者提现方法

modifier onlyCLevel() { ? ?require( ? ? ? ?msg.sender == cooAddress || ? ? ? ?msg.sender == ceoAddress || ? ? ? ?msg.sender == cfoAddress ? ?); ? ?_;}//...some other stuff// Only the CEO, COO, and CFO can execute this function:function pause() external onlyCLevel whenNotPaused { ? ?paused = true;}

pause() 函数可能被添加,以便开发人员可以更新一个新的版本,以防有任何不可预见的错误... 但正如我的同事Luke指出,这实际上将允许开发人员完全冻结合约,使其没有人可以转让,出售或繁殖他们的小猫! 并不是说他们会这么做 - 但是有趣的是,由于大多数人认为DApp完全是去中心化的,只是因为它在以太坊上。

继续。。。

2. KittyBase: Kitty是什么?

这是我们定义在整个核心功能中共享的最基本代码的地方。 这包括我们的主要数据存储,常量和数据类型,以及用于管理这些数据的内部函数。

KittyBase 定义了应用程序的很多核心数据。首先它将Kitty定义为一个结构体:

struct Kitty {
? ? uint256 genes;
? ? uint64 birthTime;
? ? uint64 cooldownEndBlock;
? ? uint32 matronId;
? ? uint32 sireId;
? ? uint32 siringWithId;
? ? uint16 cooldownIndex;
? ? uint16 generation;
}

所以一只kitty实际上只是一串无符号的整数...

展开每个属性:
?genes—代表猫的遗传密码的256位整数。 这是决定猫的长相的核心数据。
?birthTime—猫出生时的时间戳
?cooldownEndBlock—之后这只猫可以再次繁殖的最小时间戳
?matronId&sireId—分别是猫的母亲和父亲的ID
?siringWithId—如果猫当前怀孕,则设置为父亲的ID,否则为零
?cooldownIndex—目前这只猫的冷却时间(猫需要等待多久才能繁殖)
?generation—这只猫的“世代号”。 第一只猫被合约创造是0代,新一代的猫是他们的父母一代中较大的一个,再加上1.

请注意,在Crypto Kitties中,猫是无性的,任何2只猫都可以一起繁殖 - 因此猫没有性别。

KittyBase 合约定义了一个kitty 数据结构的数据

Kitty[] kitties;

这个数组包含了所有Kitty的数据,所以它就像一个Kitty的数据库一样。 无论何时创建一个新的猫,它都会被添加到这个数组中,数组的索引成为猫的ID,就像这个 ID为'1'的创世喵:

该合约还包含从猫的ID到其拥有者地址的映射,以跟踪拥有猫的人:

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2018-11-03如何使用Python编写一个简单且安全的区块链数据库API?
  • 2018-11-03区块链资产「地址、密码、私钥、助记词、Keystore 」
  • 2018-11-03配置区块链网络并利用该技术
  • 2018-11-03STO(合规通证发行)白皮书如何撰写
  • 2018-11-03什么是时间扭曲(Timewarp)攻击?
  • 2018-11-03如何安全地存储数字加密货币
  • 2018-11-03DEx交易规则及常见问题
  • 2018-11-03如何从加密货币里获得被动收益
  • 2018-11-03Catapult是什么?
  • 2018-11-03瑞波币(Ripple)领导团队及董事会成员简介

文章分类

  • 安全教程
  • 安全设置
  • 杀毒防毒
  • 病毒查杀
  • 脚本攻防
  • 入侵防御
  • 工具使用
  • 业界动态
  • Exploit
  • 漏洞分析
  • 加密解密
  • 手机安全
  • 区块链

最近更新的内容

    • Qtum钱包使用大全以及备份指南
    • 数字资产钱包有哪些类型?平时使用需要注意哪些事项?
    • BCOS平台的行业应用实践
    • 基于机器学习的可扩展HCGraph算法
    • 主流数字货币钱包下载汇总及轻钱包教程
    • 香港数字货币交易所Gatecoin教程
    • 智能合约与函数式编程语言
    • 如何使用深度学习硬件的空余算力自动挖矿
    • 区块链开发环境选择与建设
    • 中国赚钱的方式已经彻底变了

关于我们 - 联系我们 - 免责声明 - 网站地图

©2015-2018 All Rights Reserved. 微课江湖 版权所有