十一課堂|通過小遊戲學習Ethereum DApps編程(2)
來自專欄 HiBlock區塊鏈社區
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
還記得我們學習過的函數可視範圍詞么?
還有對於函數的操作範圍的限定詞:
還有可以自定義的限定詞:
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
原文發佈於簡書
北京blockathon回顧:
Blockathon(北京):48小時極客開發,區塊松11個現場交付項目創意公開
成都blockathon回顧:
Blockathon2018(成都站)比賽落幕,留給我們這些區塊鏈應用思考
以下是我們的社區介紹,歡迎各種合作、交流、學習:)
推薦閱讀: