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/
此章節中只有一些簡單的例子,更多內容將在後續課程中講解。