CryptoZombies学习笔记——Lesson1

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{

  }

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

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

 

chapter3:状态变量和整数

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

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

  完善程序:

uint dnaDigits = 16;

 

chapter 4:数学运算

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

  完善程序:

uint dnaModulus = 10**dnaDigits;

 

chapter5:结构体

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

  还有字符串string。

  完善程序:

1 struct Zombie{
2     string name;
3     uint dna;
4 }

 

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:函数返回值

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

  比如:

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

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

  完善程序:

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

chapter11:Keccak256 和类型转换

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

  类型转换:例子

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

 

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

  添加代码如下:

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

 

 

chapter13:事件

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

  首先声明

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

 

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

 

chapter14:Web3.js

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

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

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

posted @ 2018-08-29 22:03  没有窗户的小巷  阅读(691)  评论(0)    收藏  举报