CryptoZombies是一个学习以太坊开发的平台,我将在这里记录学习过程当中的一些笔记。前端
课程网址:cryptozombies.iogit
首先是第一课——Lesson1:Making the Zombie Factory.主要是一个solidity的简易教程web
chapter1:数据库
目标是创建一个僵尸工厂去创建一支僵尸军队,僵尸工厂有三个特征:数组
1.保存全部僵尸数据;安全
2.有制造新僵尸的功能;框架
3.每个僵尸有一个随机的独特外观。dom
每只僵尸的独特性基于“僵尸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/
此章节中只有一些简单的例子,更多内容将在后续课程中讲解。