十一課堂|經過小遊戲學習Ethereum DApps編程(3)

image

1

solidity語言的知識點

Random Numbers安全

不少時候咱們都須要隨機數。微信

在solidity裏面,咱們能夠經過 keccak256 來產生hash隨機數。網絡

// Generate a random number between 1 and 100:

uint randNonce = 0;

uint random = uint(keccak256(now, msg.sender, randNonce)) % 100;

randNonce++;

uint random2 = uint(keccak256(now, msg.sender, randNonce)) % 100;

在以太坊中,Dapp被調用時,被調用的這個操做將做爲一個transaction被廣播到網絡上其餘節點上。 網絡上的節點收到了transaction後,都但願Proof of Work,因此都會嘗試成爲第一個解決這個transaction的節點。而後將這組交易與他們的工做證實(PoW)一塊兒發佈到網絡的其餘節點上。數據結構

但一個節點完成了transaction的處理,其餘節點都將中止處理這個transaction,並且將盡快接受處理結果。app

屬於,一個節點能夠決定是否廣播一個transaction的結果。若是咱們生產的隨機數,不是我但願看到的,咱們能夠不廣播這個結果,顯然這樣就不是公平的。這是隨機數的脆弱的地方。dom

在這個遊戲裏面,咱們並無使用真正的以太幣,因此關於安全的話題,咱們將在之後涉及到。區塊鏈

2

自定義modifier

複習一下這個表格裏面的內容:ui

image

若是咱們想要判斷遊戲裏面的一個角色是不是玩家的時候,能夠這樣自定義一個modifiercode

 modifier ownerOf(uint _zombieId) {
   require(msg.sender == zombieToOwner[_zombieId]);
   _;
 }

能夠這樣使用遊戲

 function feedAndMultiply() internal ownerOf(_zombieId) {}

當你有兩個限制處理的時候,能夠這樣使用,用空格連接:

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

3

storage

ETH網絡中存儲數據有兩種方式:memory 和 storage。

memory用於臨時存儲,相似於RAM,不須要消費Gas。

storage用於永久存儲,相似於硬盤,須要消費Gas。

怎麼定義一個storage呢?

  Zombie storage myZombie = zombies[_zombieId];

4

struct

數據結構類的定義:

struct Zombie {

      string name;

      uint dna;

      uint32 level;

      uint32 readyTime;

      uint16 winCount;

      uint16 lossCount;

    }

初始化:

Zombie(_name, _dna, 1, uint32(now + cooldownTime), 0, 0)

++ 運算符

和其餘語言很類似,能夠這樣對整數進行加一

   myZombie.winCount++;

if else

if (zombieCoins[msg.sender] > 100000000) {

  // You rich!!!} else

 {  // We require more ZombieCoins...

}

image

image

本系列文章做者:HiBlock區塊鏈技術佈道羣-Amywu

原文發佈於簡書

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

Blockathon|48小時極客競賽,區塊鏈馬拉松等你挑戰(上海)

時間:2018年10月19-21日

地點:(上海黃浦)露香園路1號(近淮海東路)P2

  • 招募50名開發者(識別下圖二維碼或點擊「閱讀原文」便可瞭解詳情並報名)

image

北京blockathon回顧:

Blockathon(北京):48小時極客開發,區塊鬆11個現場交付項目創意公開

成都blockathon回顧:

Blockathon2018(成都站)比賽落幕,留給咱們這些區塊鏈應用思考

相關文章
相關標籤/搜索