十一課堂|通過小遊戲學習Ethereum DApps程式設計(1)
這篇文章,是通過製作一款可愛的遊戲(DAPP,也可以稱做智慧合約),從而學習Solidity語言。和ETH網路的一些基礎知識。
全程線上程式設計,無需搭建複雜的環境,只需要有任何其他語言的程式設計經驗,即可馬上學習。
這篇文章是一篇關於製作遊戲的總結。
1
線上遊戲簡介
支援多語言介面:
課程:
cryptozombies課程
編輯頁面
線上編輯頁面
學習總結
可視範圍的
函式專用限制語法
整數
int是帶符號整數
其他變數
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 來實現。
比如,使用者可以查詢自己擁有的東東的時候,可以這樣寫function。
function getZombiesByOwner(address _owner) external view returns (uint[]) {
}
還記得 external 麼?
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回顧:
以下是我們的社群介紹,歡迎各種合作、交流、學習:)