pragma solidity ^0.4.19; //指定版本号/**关卡1 : 创建 根据输入的姓名 创建随机僵尸学习网址: https://cryptozombies.io/zh
**/// 创建合约
contract ZombieFactory {/**关于事件:事件 是合约和区块链通讯的一种机制。你的前端应用“监听”某些事件,并做出反应。例子:// 这里建立事件event IntegersAdded(uint x, uint y, uint result);function add(uint _x, uint _y) public {uint result = _x + _y;//触发事件,通知appIntegersAdded(_x, _y, result);return result;}你的 app 前端可以监听这个事件。JavaScript 实现如下:YourContract.IntegersAdded(function(error, result) {// 干些事})**///建立事件event NewZombie(uint zombieId, string name, uint dna);/**无符号整数: uintuint 无符号数据类型, 指其值不能是负数,对于有符号的整数存在名为 int 的数据类型。**/uint dnaDigits = 16; //设置僵尸DNA为16位 Digits n. 数字uint dnaModulus = 10 ** dnaDigits; // 10 的 16次方// 结构体允许你生成一个更复杂的数据类型,它有多个属性。struct Zombie {string name; //僵尸名字uint dna; //僵尸DNA 16位}/**如果你想建立一个集合,可以用 _数组_这样的数据类型. Solidity 支持两种数组:静态数组和动态数组:固定长度为2的静态数组:uint[2] fixedArray;固定长度为5的string类型的静态数组:string[5] stringArray;动态数组,长度不固定,可以动态添加元素:uint[] dynamicArray;公共数组你可以定义 public 数组, Solidity 会自动创建 getter 方法. 语法如下:Person[] public people;其它的合约可以从这个数组读取数据(但不能写入数据),所以这在合约中是一个有用的保存公共数据的模式。**/Zombie[] public zombies; //创建结构体/ java中叫对象 数组/**函数:1. 习惯上函数里的变量都是以(_)开头 (但不是硬性规定) 以区别全局变量2. 只有当你需要外部世界调用它时才将它设置为公共。public / private 只能内部使用 类似于java暴露或者不暴露接口3. 把函数定义为 view, 意味着它只能读取数据不能更改数据pure 函数, 表明这个函数甚至都不访问应用里的数据,例如:function _multiply(uint a, uint b) private pure returns (uint) {return a * b;}这个函数甚至都不读取应用里的状态 — 它的返回值完全取决于它的输入参数,在这种情况下我们把函数定义为 pure.4. 指定函数返回值类型  returns(数据类型)**/function _createZombie(string _name, uint _dna) private { // 创建僵尸函数
//        zombies.push(Zombie(_name, _dna)); // 僵尸对象数组 放入创建的僵尸uint id = zombies.push(Zombie(_name, _dna)) - 1;NewZombie(id, _name, _dna);/**定义僵尸idarray.push() 返回数组的长度类型是uint因为数组的第一个元素的索引是 0, array.push() - 1 将是我们加入的僵尸的索引。zombies.push() - 1 就是 id, 数据类型是 uint 把它用到 NewZombie 事件中。**/}// 创建僵尸的随机DNA 返回值类型为 uint 无符号整型function _generateRandomDna(string _str) private view returns (uint) {/**Ethereum 内部有一个散列函数keccak256,它用了SHA3版本。一个散列函数基本上就是把一个字符串转换为一个256位的16进制数字。字符串的一个微小变化会引起散列数据极大变化。 这里使用它来创建一个随机数 一个伪随机十六进制数_str 参数为僵尸的名字 rand % 10^16 得到 16位长度的DNA**/uint rand = uint(keccak256(_str));return rand % dnaModulus;}//最后创建一个随机的僵尸 给定一个僵尸名字function createRandomZombie(string _name) public {uint randDna = _generateRandomDna(_name); //创建随机DNA_createZombie(_name, randDna); //创建僵尸}}

《智能合约Solidity学习笔记 - 僵尸军团》Part1- 搭建僵尸工厂相关推荐

  1. solidity学习笔记第1天

    Solidity 学习笔记第1天 1. 什么是Solidity? 编写智能合约首选Solidity 语言,Solidity 是一门为实现智能合约而创建的高级编程语言.这门语言受到了 C++,Pytho ...

  2. solidity payable_以太坊区块链搭建与使用(五)-智能合约Solidity

    一.智能合约Solidity开发工具 1.remix-ide http://remix.ethereum.org/ 在线版本,也可以去github下载安装到本地.开发.编译.发布.执行.测试 2.re ...

  3. 小觅智能 |MSCKF 学习笔记

    转载自:https://mp.weixin.qq.com/s/shxmOtDOSVZn_eQKgs8LBw 小觅智能 |MSCKF 学习笔记 知乎觅 MYNTAI小觅智能 2019-10-31 VIO ...

  4. 多智能体系统仿真学习笔记:(一)ODE

    多智能体系统仿真学习笔记:(一)ODE (一)ODE的一般形式 Ⅰ.常微分方程 (ODE) Ⅱ.ODE方程组 Ⅲ.高阶ODE Ⅳ.复数ODE (二)Matlab中的ODE Ⅰ.Matlab中可求解的O ...

  5. ESP8266学习笔记(1)——搭建环境、编译烧写(NONOS SDK)

    RTOS SDK环境搭建参看 ESP8266学习笔记(17)--搭建环境.编译烧写(RTOS SDK) 一.搭建环境 1.1 ESP8266 SDK 入门指南 官网下载:https://www.esp ...

  6. ESP32学习笔记(1)——搭建环境、编译烧写(Windows+VS Code)

    Espressif-IDE 环境搭建参看 ESP32学习笔记(50)--搭建环境.编译烧写(Windows+Espressif-IDE) 一.搭建环境 1.1 官方资料 ESP-IDF 编程指南 1. ...

  7. Ionic 学习笔记之-痛彻心扉的环境搭建

    Ionic 学习笔记之-痛彻心扉的环境搭建 最近在学习Ionic 做多平台的应用.跨平台应用.就是用html写的界面.js实现逻辑. 在学ionic之前选了各种跨平台APP开发框架.最后选择了ioni ...

  8. OpenGL学习笔记(一):环境搭建、三维空间坐标系理解以及OpenGL的基本使用

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7866 ...

  9. adg oracle,【学习笔记】Oracle ADG搭建与配置 windows平台11G ADG搭建与测试

    [学习笔记]Oracle ADG搭建与配置 windows平台11G ADG搭建与测试 时间:2016-10-26 20:09   来源:Oracle研究中心   作者:HTZ   点击: 次 天萃荷 ...

最新文章

  1. 【android-cocos2d-X2.2 环境配置】在Mac下搭建Cocos2d-X-android开发环境!
  2. DOSBOX使用的一些方法和注意点(汇编实验中遇到的)
  3. 【知识星球】卷积核和感受野可动态分配的分组卷积
  4. LeetCode每日一题: 最后一个单词的长度(No.58)
  5. leetcode 687. Longest Univalue Path | 687. 最长同值路径(树形dp)
  6. php 获取季度起始日期,php获取昨天、今天、上周、本周、上月、本月、上季度、本季度、今年的起始时间...
  7. java putall实现,Java JsonObject.putAll方法代码示例
  8. 一站式VDI部署教程(4)配置SMB3.0共享
  9. C语言 16进制转float
  10. C语言程序设计知识点总结归纳(全书)
  11. gg修改器修改数值没有用怎么办_gg修改器修改游戏数值教程_gg修改器怎么修改数值_咖绿茵手游站...
  12. ubuntu安装系分区,挂载磁盘
  13. Android手机设备唯一标识符
  14. 秘宝 | 将体育赛事结合区块链 数字藏品新风向
  15. 大学四年,我把私藏「B站」 20 个学习 UP 主贡献出来!
  16. 企业拼团APP商城开发流程6步曲
  17. POJ1228 Grandpa's Estate
  18. 【python练习,6.15】(霍兰德人格分析雷达图等)
  19. 2019 大数据必备书籍推荐
  20. 2020年缓存Redis面试题与答案

热门文章

  1. 小程序如何做成html的滚动字幕,小程序两种滚动公告栏的实现方法
  2. Git版本控制管理——合并
  3. js基于GoEasy消息推送
  4. 前端市场饱和了?到底是空穴来风还是另有原因!真相即将揭晓
  5. 【MicroPython esp8266】固件烧写教程
  6. 哪位大虾知道斜杠,反斜械, 破折号 等的英文怎么拼写
  7. 备份数据迁移到云端的七种方式
  8. 【面试题】广州济达信息科技有限公司
  9. 操作系统架构原理-资源管理技术与进程的抽象设计
  10. 给COM/ActiveX控件签名(signcode,cab,pfx,pvk)