1. 程式人生 > >十一課堂|通過小遊戲學習Ethereum DApps程式設計(1)

十一課堂|通過小遊戲學習Ethereum DApps程式設計(1)

image

這篇文章,是通過製作一款可愛的遊戲(DAPP,也可以稱做智慧合約),從而學習Solidity語言。和ETH網路的一些基礎知識。

全程線上程式設計,無需搭建複雜的環境,只需要有任何其他語言的程式設計經驗,即可馬上學習。

這篇文章是一篇關於製作遊戲的總結。

1

線上遊戲簡介

支援多語言介面:

image

課程:

image

cryptozombies課程

編輯頁面

image

線上編輯頁面

學習總結

可視範圍的

image

函式專用限制語法

image

整數

image

int是帶符號整數

其他變數

image

2

solidity語言的知識點

modifier

modifier 和 function有些相似。

主要用於提前檢查function的引數是否符合function的要求。

這個就是經典檢查呼叫智慧合約的owner是否是此智慧合約的開發者的modifier。

OpenZeppelin is a library for writing secure Smart Contracts on Ethereum.

/**

   * @dev Throws if called by any account other than the owner.

   */

  modifier onlyOwner() {

    require(msg.sender == owner);

    _;

  }

在遊戲裡面,我們增加了對於級別的判斷。

modifier aboveLevel(uint _level, uint _zombieId) {
   require(zombies[_zombieId].level >= _level);
   _;
 }

用法:新增在需要檢查的function定義的末尾

function changeName(uint _zombieId, string _newName) external aboveLevel(2, _zombieId) {
}

Gas

在ETH網路上,使用者在通過智慧合約修改區塊鏈上的數值的時候,需要支付Gas的。Gas可以通過以太幣來兌換。

簡單的說,修改區塊鏈的時候,不是免費的。不免費的理由可以參照網路。

而只是查詢區塊鏈上的資訊的時候,是免費。所以為了給你的使用者節約費用,開發者可用通過設定函式為 view 和 pure 來實現。

image

比如,使用者可以查詢自己擁有的東東的時候,可以這樣寫function。

 function getZombiesByOwner(address _owner) external view returns (uint[]) {
 }

還記得 external 麼?

image

storage

更新區塊鏈是需要支付Gas的,尤其是 storage 的寫入操作。

開發者需要儘量避免 storage 的寫入。其他語言,迴圈是效率低的,但在solidity裡面,比起Gas的消耗,我們還是傾向於用迴圈。

除非,讓邏輯過於複雜化的處理,比如每次都需要在 memory 上重新建立序列。

或者是每次都需要呼叫函式來得到特定值的時候。

通過在變數定義的時候,加入 memory 可以在 memory 上新建一個僅僅儲存在 memory 裡面的變數

function getArray() external pure returns(uint[]) {

  // Instantiate a new array in memory with a length of 3

  uint[] memory values = new uint[](3);

  // Add some values to it

  values.push(1);

  values.push(2);

  values.push(3);

  // Return the array

  return values;

}

pure : 函式內沒有使用任何外部資料

本系列文章作者:HiBlock區塊鏈技術佈道群-A****mywu

原文釋出於簡書

加微信baobaotalk_com,加入技術佈道群

北京blockathon回顧:

成都blockathon回顧:

以下是我們的社群介紹,歡迎各種合作、交流、學習:)

image