本章是第一大章的最后一张,通过一段代码和详细的注释,把我们前面所学到的知识全部复习一遍。认真看完每一行。你会有不一样的收获。

// SPDX-License-Identifier: GPL-3.0//标明Solidity编译器的版本为0.8.11
pragma solidity ^0.8.11;
//定义一个叫ZombieFactory的合约
contract ZombieFactory {//定义NewZombie事件,参数为:zombieId(uint),name(string),和dna(uint)。event NewZombie(uint zombieId, string name, uint dna);//为了保证我们的僵尸的DNA只含有16个字符,我们先造一个uint数据。//让它等于10^16。这样一来以后我们可以用模运算符 % 把一个整数变成16位。//僵尸DNA将由一个十六位数字组成uint dnaDigits = 16;//建立一个uint类型的变量,名字叫dnaModulus,令其等于10的 dnaDigits 次方。uint dnaModulus = 10 ** dnaDigits;//建立一个struct 命名为 Zombie。//Zombie 结构体有两个属性:name (类型为 string),和 dna (类型为 uint)。struct Zombie {string name;uint dna;}//为了把一个僵尸部队保存在我们的应用里,并且能够让其它应用看到这些僵尸//我们需要创建一个数据类型为 Zombie 的结构体数组//用 public 修饰,命名为:zombies。Zombie[] public zombies;//在我们的应用里,我们要能创建一些僵尸,定义私有函数createZombie。//它有两个参数: _name (类型为string) _dna (类型为uint)。//不要忘记使用memory关键字按值传递第一个参数function _createZombie(string memory _name, uint _dna) private {//创建一个 Zombie,然后把它加入 zombies 数组中。 //新创建的僵尸的 name 和 dna,来自于函数的参数。zombies.push(Zombie(_name, _dna));//数组的长度-1作为僵尸的iduint id = zombies.length - 1;//触发NewZombie事件emit NewZombie(id, _name, _dna);}//我们需要一个辅助函数,它可以从字符串中生成随机 DNA 编号。//创建一个 private 函数,命名为 _generateRandomDna。//它只接收一个输入变量 _str (类型 string), 返回一个 uint 类型的数值。//不要忘记将_str参数设置为memory。//此函数只读取我们合约中的一些变量,所以标记为view。function _generateRandomDna(string memory _str) private view returns (uint) {//用keccak256,结合参数_str生成一个伪随机数,并且转换成uint类型uint rand = uint(keccak256(abi.encodePacked(_str)));//我们希望我们的 DNA 只有 16 位数长//所以应该return是上面计算的数值对 dnaModulus 求余数(%)。return rand % dnaModulus;}//创建一个 public 函数,命名为 createRandomZombie。//它将被传入一个变量 _name (数据类型是 string)。 function createRandomZombie(string memory _name) public {//函数的第一行应该调用 _generateRandomDna 函数,传入 _name 参数。//结果保存在一个类型为 uint 的变量里,命名为 randDna。uint randDna = _generateRandomDna(_name);//第二行调用 _createZombie 函数, 传入参数: _name 和 randDna。_createZombie(_name, randDna);}}

好了,现在你对solidity有了一个大概的了解了。接下来还有高级篇章的内容。
敬请期待。

第十三章:ZombieFactory相关推荐

  1. 谭浩强《C++程序设计》书后习题 第十三章-第十四章

    2019独角兽企业重金招聘Python工程师标准>>> 最近要复习一下C和C++的基础知识,于是计划把之前学过的谭浩强的<C程序设计>和<C++程序设计>习题 ...

  2. python 教程 第十三章、 特殊的方法

    第十三章. 特殊的方法 1)    特殊的方法 __init__(self,...) 这个方法在新建对象恰好要被返回使用之前被调用. __del__(self) 恰好在对象要被删除之前调用. __st ...

  3. 《Java编程思想》读书笔记 第十三章 字符串

    <Java编程思想>读书笔记 第十三章 字符串 不可变String String对象是不可变的,每一个看起来会修改String值的方法,实际上都是创建一个全新的String对象,以及包含修 ...

  4. 第十三章、facl及用户及Linux终端

    第十三章.facl及用户及Linux终端 08_01_facl及用户及Linux终端 文件系统访问列表: 如何让tom的文件被jerry读写? 用户名:tom, 基本组:tom 1. 添加jerry访 ...

  5. 第十三章 簇-机器学习老师板书-斯坦福吴恩达教授

    第十三章 簇 13.1 无监督学习介绍 13.2 K-均值算法 13.3 优化目标 13.4 随机初始化 13.5 选择簇的数量 13.1 无监督学习介绍 13.2 K-均值算法 13.3 优化目标 ...

  6. 鸟哥的Linux私房菜(服务器)- 第十三章、文件服务器之一:NFS 服务器

    第十三章.文件服务器之一:NFS 服务器 最近更新日期:2011/07/27 NFS为 Network FileSystem 的简称,它的目的就是想让不同的机器.不同的操作系统可以彼此分享个别的档案啦 ...

  7. 数字图像处理:第二十三章 基于内容的图象与视频检索

    第二十三章基于内容的图象与视频检索 目录 1.    引言 2.    基于内容检索的图象特征 3.    基于内容的视频标注与检索 作业 1. 引言 随着社会的信息化发展日益深入,互连网日益普及,越 ...

  8. 数字图像处理:第十三章 图象复原

    第十三章 图象复原 目录 1.    引言 2.    数学模型 3.    维纳滤波(Wiener Filtering) 作业 1.  引言 图象复原是早期图象处理的主要内容之一,目的在于消除或减轻 ...

  9. [转]Windows Shell 编程 第十三章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7988004】...

    第十三章 Windows脚本环境 现在的许多开发人员以前都是在MS-DOS环境下编程的.几乎所有人都接触过批处理文件--一种基于文本命令的文件.这种文件使你能够在一个可执行命令中组合多个指令.批处理文 ...

  10. stm32 ucosii消息队列 串口_正点原子STM32F407探索者开发板资料连载第六十三章 UCOSII 实验...

    1)实验平台:alientek 阿波罗 STM32F767 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 http://weix ...

最新文章

  1. pytorch可视化 resnet50特征图
  2. vs修改 exe名字
  3. PHP面试题:实现中文字串截取无乱码的方法
  4. git报ssh variant 'simple' does not support setting port解决办法
  5. 锁的释放流程-ReentrantLock.tryRelease
  6. nodejs 创建一个静态资源服务器 +路由
  7. 博客,文字的卡拉OK版
  8. Java并发编程(01):线程的创建方式,状态周期管理
  9. Bootstrap学习(一)
  10. 接口与interface关键字
  11. CodeForces 632C The Smallest String Concatenation(水)
  12. gbcbig.shx字体的BUG
  13. 20年以后的科技发展小短文计算机,20年后的我小学想象作文
  14. 使用 Kotlin 中的 takeIf
  15. 宝塔同时安装苹果cms海洋cms_苹果cms和海洋cms通用的百度主动推送工具
  16. FFmpeg视频处理入门教程----从安装到使用(Linux版)
  17. 设置柱状图每根柱子的颜色
  18. 背包问题之多重背包基础写法
  19. python和正则表达式抽取文本化的信息
  20. EPLAN_采购列表的使用

热门文章

  1. ADS仿真设计平行定向耦合器学习笔记
  2. 外包干了4年,有苦说不出···
  3. 读书笔记(一)——《追风筝的人》
  4. 在Java中DES加密/解密的实现[工具类]
  5. CQF项目课程学习介绍(二)—— 机器学习
  6. Charles手机代理设置
  7. 用java、JDBC模拟银行ATM取款、存款、转账、注册用户(笔记)
  8. alsa音频架构2-ASoc
  9. a标签之target属性----在何处打开链接
  10. 平安银行智能金融在客服机器人中台的落地实践