CryptoZombies是一个学习以太坊开发的平台,我将在这里记录学习过程中的一些笔记。

   课程网址:cryptozombies.io

首先是第一课——Lesson1:Making the Zombie Factory.主要是一个solidity的简易教程

chapter1:

目标是建立一个僵尸工厂去建立一支僵尸军队,僵尸工厂有三个特征:

1.保存所有僵尸数据;

2.有制造新僵尸的功能;

3.每一个僵尸有一个随机的独特外观。

      每只僵尸的独特性基于“僵尸DNA”,是一个16位数,比如:8356281049264737.其中,前两位代表僵尸的头型,3,4位代表僵尸眼睛,往下依次是衣服、皮肤、瞳色、服装颜色。因为暂时每个部位只有7种不同类型,所以计算是采用模7来得到结果。

chapter2:

  介绍solidity

  每个智能合约代码开头需要有版本号声明——比如pragma solidity ^0.4.20;

  然后是contract contractname{

  }

  然后要求读者编写僵尸工厂的外壳框架:

 pragma solidity ^0.4.19//截至教程更新时间solidity最新版本是0.4.19;
contract ZombieFactory{
}

chapter3:状态变量和整数

  状态变量是写入到以太中存储的,可以理解为一个永久数据库。

  介绍了uint——无符号整型变量,solidity中,uint通常指uint256,也可以自行定义uint8,uint16,uint32等。

  完善程序:

uint dnaDigits = 16;

chapter 4:数学运算

  加法:+;减法:-;乘除:*/;取余:%;乘方**;

  完善程序:

uint dnaModulus = 10**dnaDigits;

chapter5:结构体

  介绍了struct的基本用法,类似c里的struct

  还有字符串string。

  完善程序:

 struct Zombie{
string name;
uint dna;
}

chapter6:数组

  有定长和动态长度两种类型数组,也可以用结构体定义动态数组,比如

Zombie[] zombies;

  可以定义一个public数组,solidity会自动创建一个getter方法,其他合约就可以读(但不可以写入)这个数组,比如

Zombie[] public zombies;

  完善程序:

Zombie[] public zombies;

chapter7:函数

  和其他高级语言类似,作者给出了一个很好的建议:在函数体中的变量名字前加一个下划线,比如_name,用来和全局变量区分。

  完善程序:

function createZombie(string _name,uint _dna){}

chapter8:使用结构体和数组

  结构体动态数组可以使用push来添加元组,比如

zombies.push(Zombie(_name,_dna));

chapter9:Private/Public函数

  solidity默认为public,为了提高安全性,建议不必要情况下,将函数默认为private。

  修改代码:

function _createZombie(string _name, uint _dna) private{}

chapter10:函数返回值

  函数定义里可包含返回值的数据类型:

  比如:

 function sayHello() public returns (string) {
return greetings;//greetings是一个字符串变量
}

  还可以定义前缀view,表示只能读取不能修改数据;定义前缀pure,返回值完全取决于该函数的参数。

  完善程序:

function _generateRandomDna(string _str) private view returns(uint){}

chapter11:Keccak256 和类型转换

  Keccak256是sha3系列的哈希函数,现在我们用它来生成一个伪随机数序列。

  类型转换:例子

 uint8 a = 5;
uint b = 6;
uint8 c = a * uint8(b);

chapter12:将前面所有模块连接起来

  添加代码如下:

 function createRandomZombie(string _name)public {
uint randDna = _generateRandomDna(_name);
_createZombie(_name, randDna);
}

chapter13:事件

  事件 是当合约和区块链发生某些交互时的一种机制,前端应用进行监听并作出反应。

  首先声明

event NewZombie(uint id, string name, uint dna);

  然后在需要前端监听的函数里调用。

chapter14:Web3.js

  以太坊的一个JavaScript库,编译部署调用智能合约。

  白皮书:https://web3js.readthedocs.io/en/1.0/

  此章节中只有一些简单的例子,更多内容将在后续课程中讲解。

CryptoZombies学习笔记——Lesson1的更多相关文章

  1. CryptoZombies学习笔记——Lesson5

    chapter1:token代币 简而言之,通证就是支持交易的包含一系列规范的函数接口的一个智能合约,发币可以用ERC20标准,但是像僵尸这种非同质化代币,需要用ERC721标准 chapter2:e ...

  2. CryptoZombies学习笔记——Lesson3

    第三课就开始深入讲解solidity编程技巧了. chapter1: 智能合约的不变性. 合约一旦部署到以太坊后,就不可更改了,所以从一方面来说,智能合约代码的安全性是如此重要,因为一旦发现你的代码里 ...

  3. CryptoZombies学习笔记——Lesson2

    第二课是僵尸猎食,将把app变得更像一个游戏,添加多人模式,建立更多创造僵尸的方法. chapter1 依然是简介 chapter2:映射和地址 映射相当于一个索引,指向不同地址,不同地址存储的数据不 ...

  4. CryptoZombies学习笔记——Lesson4

    第四课主要介绍payable函数相关. chapter1: payable修饰函数 以太坊允许同时调用函数和eth转账.msg.value显示发送到合约的以太币数,ether是内置整型数.如果函数没有 ...

  5. 孙鑫视频VC++深入详解学习笔记

    孙鑫视频VC++深入详解学习笔记 VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Le ...

  6. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  7. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  8. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  9. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

随机推荐

  1. oracle 的replace()

    1.查询所有员工的姓名,如果包含字母s,则用S替换. 2.查询所有员工姓名的前三个字符.

  2. iOS:动画(18-10-15更)

    目录 1.UIView Animation 1-1.UIView Animation(基本使用) 1-2.UIView Animation(转场动画) 2.CATransaction(Layer版的U ...

  3. 编译问题: "ld: duplicate symbol _OBJC_METACLASS_$_XXX..."

    在新的SDK环境中调试百度地图的应用程序时,app总是意外退出,找了半天发现错误的原因是unrecognized selector xx的错误,另外还有报了一个Unknown class XXX in ...

  4. 前端ajax的各种与后端交互的姿势

    前端中常常用的与后端交换数据的话,通常是要用到ajax这种方法的 但是交互的方式有很多种,很多取决于你后端的属性,我这儿主要列举我目前项目比较常用的两种方式 --一个是我们通用的web api和控制器 ...

  5. MySQL学习之变量

    变量 MySQL本质是一种编程语言,需要很多变量来保存数据,mysql中很多的属性控制都是通过MySQL中固有的变量来实现的. 系统变量 系统内部定义的变量,系统变量针对的是所有用户(MySQL客户端 ...

  6. [MYSQL][1]创建,修改,删除表

    查看有哪些数据库: SHOW DATABASES; 创建,删除数据库: CREATE DATAABASE mydb; DROP DATABASE mydb; 查看有哪些表: SHOW TABLES; ...

  7. SVN错误记录

    1.SVN错误:Attempted to lock an already-locked dir 发生这个错误多是中断提交导致了,执行clear后可修复 右键项目--->team--->清理 ...

  8. exynos4412—UART裸板复习

    我们通过RS232来做实验. 通过电平转换芯片, 连接至核心板: 即:GPA0_0  GPA0_1     配置引脚为串口专用模式: 然后看 ULCONn  [31:0]       0x3 设置串口 ...

  9. C语言实例解析精粹学习笔记——18

    <C语言实例解析精粹>中编译环境采用的是Turbo C 2.0.但是这个编译器年代久远,较新的编译器对书中的某些例子支持不好,在学习的时候同时做一些笔记. 实例18:将一个无符号整数转换为 ...

  10. c语言指针的指针

    c语言在函数传递时常常使用如下的形式. void get(int **p) 对于这个形式,我想过为什么不能够使用 *p 作为形参呢.下面我们看一下代码和执行结果 void get(int **p) { ...