继续上一节我们使用_generateRandomDna方法随机的产生DNA,如果了解过比特币的实现,其中有一块很重要的地方就是使用哈希函数来生成随机数,在区块链中随机的生成安全的随机数是一项比较难的工作,在本章中使用Ethereum内部散列函数来生成16位的随即数。

一.生成随机数

pragma solidity ^0.4.19;contract ZombieFactory {uint dnaDigits = 16;uint dnaModulus = 10 ** dnaDigits;struct Zombie {string name;uint dna;}Zombie[] public zombies;function _createZombie(string _name, uint _dna) private {zombies.push(Zombie(_name, _dna));}function _generateRandomDna(string _str) private view returns (uint) {uint rand = uint(keccak256(_str));return rand % dnaModulus;}
}

函数和Java也很类似,转换后类型强转也没什么说的。

二.组合函数
将随机生成dna的方法和创建僵尸的方法通过createRandomZombie组合在一起:

pragma solidity ^0.4.19;contract ZombieFactory {uint dnaDigits = 16;uint dnaModulus = 10 ** dnaDigits;struct Zombie {string name;uint dna;}Zombie[] public zombies;function _createZombie(string _name, uint _dna) private {zombies.push(Zombie(_name, _dna));}function _generateRandomDna(string _str) private view returns (uint) {uint rand = uint(keccak256(_str));return rand % dnaModulus;}function createRandomZombie(string _name) public {uint randDna = _generateRandomDna(_name);_createZombie(_name, randDna);}}

到这里我们的合约基本完成了,我们直接将代码复制到http://remix.ethereum.org/ 这个在线的IDE,当然用我们之前创建的truffle环境也可以,但这个使用起来更简单,直接右上角compile后在Run里点击create就创建一个合约实例了,输入相应参数点击createRandomZombie方法就产生了相应的一个僵尸了,再点击zombies数组直接看见我们创建的僵尸了:

三.事件
事件是合约和区块链通讯的机制,可以在前端来监听这些事件,并作出反应,来如当僵尸创建成功时,我们就通过事件返回它们:

pragma solidity ^0.4.19;contract ZombieFactory {event NewZombie(uint zombieId, string name, uint dna);uint dnaDigits = 16;uint dnaModulus = 10 ** dnaDigits;struct Zombie {string name;uint dna;}Zombie[] public zombies;function _createZombie(string _name, uint _dna) private {uint id = zombies.push(Zombie(_name, _dna)) - 1;NewZombie(id, _name, _dna);}function _generateRandomDna(string _str) private view returns (uint) {uint rand = uint(keccak256(_str));return rand % dnaModulus;}function createRandomZombie(string _name) public {uint randDna = _generateRandomDna(_name);_createZombie(_name, randDna);}}

event NewZombie(uint zombieId, string name, uint dna); 这个就是事件,在_createZombie方法中调用事件 NewZombie(id, _name, _dna);就能让前端监听到:

至于前端怎么监听事件显示数据,我们在后面继续学习!!!

学习区块链(五)--创建僵尸军团Ⅱ相关推荐

  1. 学习区块链(九)--创建僵尸军团进阶Ⅳ

    一.gas 我们知道,运行在以太坊上的智能合约每一步操作都需要消耗Gas,这些gas是真金白银的,一个 DApp 收取多少 gas 取决于功能逻辑的复杂程度.每个操作背后,都在计算完成这个操作所需要的 ...

  2. 如何学习区块链技术?

    2018年春节最火热的概念应该就是区块链了,从百度的莱茨狗和网易星球刷屏朋友圈,到3点钟区块链无眠群的大火,大佬们纷纷进军区块链,不了解区块链好像错过一个时代. 这里把学习区块链过程中的一些资料进行索 ...

  3. 怎么样才能更高效的学习区块链

    一.为什么选择区块链 选择区块链作为实践学习的案例,原因有三: 第一,区块链是我最近两三个月刚学习的领域,对我来说也是一门从零开始学习的领域,这样的学习案例最具有指导作用.因为时间没有隔太久,很多学习 ...

  4. 如何系统学习区块链技术-干货来袭

    区块链术涉及面很广,很多开发人员看了一些资料后,感觉似懂非懂. 如何系统的学习区块链技术,是很多想从事区块链开发的程序员的疑问,本文内容有点多,一次吸收不完可以收藏以后再用. 苦口婆心写在前面: 从事 ...

  5. 要凉?46%开发者表示短期内不考虑学习区块链技术,拿什么拯救你我的区块链人才荒...

    程序员应该选择什么技术领域才能获得最高的回报? 本文详细解读了 2018 年最热门的五大领域,对行业现状.薪资概况及具体的技能要求给出了深入的分析,希望给担心"入错行"的你提供些指 ...

  6. 通过python构建一个区块链来学习区块链

    了解区块链Blockchains如何工作的最快方法就是构建一个区块链.你来到这里是因为,和我一样,你对加密钱币的崛起感到很兴奋.而且你想知道区块链是如何工作的,想了解它们背后的基本技术. 但理解区块链 ...

  7. 【联邦学习+区块链】《联邦学习vs区块链:谁是“可信媒介”技术领域最强王者?》疑问解答

    联邦学习[1]VS 区块链 [问1]联邦学习,何为"联邦"? 作为一种分布式机器学习技术,联邦学习可以实现各个企业的自有数据不出本地,而是通过加密机制下的参数交换方式共建模型,即在 ...

  8. 【联邦学习 + 区块链】《联邦学习vs区块链:谁是“可信媒介”技术领域最强王者?》阅读记录与提问

    [注]块引用部分是博主自己的思考.. 题目:<联邦[1]学习vs区块链:谁是"可信媒介"技术领域最强王者?> [问1]联邦学习,何为"联邦"? 在互 ...

  9. 学习区块链的十大理由 1

    2019独角兽企业重金招聘Python工程师标准>>> 技术发展迅速!如果你仍然在你的多维数据集中编辑Java代码或只是搞PowerBuilder,那么你可能只生活在过去.少数雇主的 ...

  10. 从区块链游戏 CryptoKitties 中,学习区块链技

    本文来自作者 崔广斌 在 GitChat 上分享 「玩区块链游戏谜恋猫 CryptoKitties, 学习区块链技术赚 ETH」 编辑 | Mc Jin 便于读者更清晰阅读本文,先列出本文的内容大纲: ...

最新文章

  1. 游击式(移动)开发的两种方式
  2. Android WebView 和 javaScript的互相调用(三)
  3. 进程保护 (非Hook;非DKOM)
  4. android鼠标滚轮事件坐标,android 处理鼠标滚轮事件 【转】
  5. SYS_数据访问权限Operation Unit和Ledger的访问设定(案例)
  6. Mysql 基础学习
  7. 建立可视化决策平台,“数据化”首当其冲!
  8. 4G网络建设近尾声 SDN/NFV是5G网络创新关键
  9. filter - date 日期插件
  10. 华为荣耀10电路原理图
  11. Java项目:SSM会议室预约系统
  12. 搭建以太坊私有链多节点环境
  13. 神仙打架!清华公布2020特奖候选人名单,有人三篇顶会一作,还有人...
  14. moss下载_无法为增值税MOSS混乱提供“简单的技术解决方案”
  15. 【算法小结】Mex,SG,集合-Nim游戏模型
  16. 从 Codable 到 Swift 元编程
  17. 智能手环core日志获取-兔盯云
  18. linux内核区分光口电口吗,服务器网卡光口和电口的区别?
  19. 找规律万能公式_数列找规律万能公式.doc
  20. IBM V3500存储初始化,配置文档教程

热门文章

  1. python 显著性差异_比萨斜塔——统计显著性检验
  2. 天刀开放冬至垂钓新弄法 冬季暖心五年夜运动-新浪天边明月刀专区
  3. 2018年Android的保活方案效果统计
  4. HDU 1104 Remainder (BFS)
  5. 大数据治理平台建设方案(文末附PDF下载)
  6. 计算机组成原理复习总结(五)中央处理器
  7. iOS直播技术分析与实现
  8. CAD常用命令和快捷键的设置方法
  9. linux网卡virbr0中inet,centos7下去掉virbr0网卡的方法.doc
  10. 华为WATCH D血压手表测量准确吗?