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

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

image

1

solidity語言的知識點

for

ETH網路中,對於區塊鏈的寫入操作,是需要使用者支付Gas的,所以我們很多時候選用 memory 而不是 storage。

memory用於臨時儲存,類似於RAM。

這樣定義多個 memory。

uint[] memory evens = new uint[](5);

for 語句和其他語言裡面的語句很類似。

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

  uint[] memory evens = new uint[](5);

  // Keep track of the index in the new array:

  uint counter = 0;

  // Iterate 1 through 10 with a for loop:

  for (uint i = 1; i <= 10; i++) {

    // If `i` is even...

    if (i % 2 == 0) {

      // Add it to our array

      evens[counter] = i;

      // Increment counter to the next empty index in `evens`:

      counter++;

    }

  }

return evens;

可以得到: [2, 4, 6, 8, 10]

payable,ether

還記得我們學習過的函式可視範圍詞麼?

image

還有對於函式的操作範圍的限定詞:

image

還有可以自定義的限定詞:

image

payable 是solidity語言裡面的另外一個非常有用的限定詞。

ether 是solidity語言裡面的以太幣單位。

我們來看一下這個函式:

function buySomething() external payable {

    // Check to make sure 0.001 ether was sent to the function call:

      require(msg.value == 0.001 ether);

      // If so, some logic to transfer the digital item to the caller of the function:

    transferThing(msg.sender);

  }

msg.value :使用者支付的以太幣

如果這個函式沒有payable而使用者支付的以太幣不會被接受

Withdraws

假設你編寫了一個小遊戲,有很多玩家可以在遊戲裡面購買裝備。你的這個小遊戲賺錢了。

等積累到了一定程度,你是不是想把錢取出來呢?

你可以這樣編寫一個函式:

contract GetPaid is Ownable {

  function withdraw() external onlyOwner {

   owner.transfer(this.balance);
 }
}

假設,Ownable 和 onlyOwner 是通過modifier實現了的函式。

this.balance 是指這個Dapp的以太幣

transfer 是轉賬函式。

比如,如果我們的使用者支付了多餘的以太幣,可以這樣找零

uint itemFee = 0.001 ether; msg.sender.transfer(msg.value - itemFee);

我們甚至可以幫助使用者之間交易裝備:

seller.transfer(msg.value)

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

原文釋出於簡書

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

北京blockathon回顧:

成都blockathon回顧:

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

image