這篇文章,是經過製做一款可愛的遊戲(DAPP,也能夠稱作智能合約),從而學習Solidity語言。和ETH網絡的一些基礎知識。git
全程在線編程,無需搭建複雜的環境,只須要有任何其餘語言的編程經驗,便可立刻學習。github
這篇文章是一篇關於製做遊戲的總結。微信
支持多語言界面:網絡
課程:學習
cryptozombies課程區塊鏈
編輯頁面ui
在線編輯頁面code
學習總結
可視範圍的
函數專用限制語法
整數
int是帶符號整數
其餘變量
modifier
modifier 和 function有些類似。
主要用於提早檢查function的參數是否符合function的要求。
這個就是經典檢查調用智能合約的owner是不是此智能合約的開發者的modifier。
出自:https://github.com/OpenZeppelin/openzeppelin-solidity
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|48小時極客競賽,區塊鏈馬拉松等你挑戰(上海)
時間:2018年10月19-21日
地點:(上海黃浦)露香園路1號(近淮海東路)P2
北京blockathon回顧:
Blockathon(北京):48小時極客開發,區塊鬆11個現場交付項目創意公開
成都blockathon回顧: