CryptoZombies學習筆記——Lesson1

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/

  此章節中只有一些簡單的例子,更多內容將在後續課程中講解。

相關文章
相關標籤/搜索