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
原文釋出於簡書
加微信baobaotalk_com,加入技術佈道群
Blockathon|48小時極客競賽,區塊鏈馬拉松等你挑戰(上海)
時間:2018年10月19-21日
地點:(上海黃浦)露香園路1號(近淮海東路)P2
- 招募50名開發者(識別下圖二維碼或點選“閱讀原文”即可瞭解詳情並報名)
北京blockathon回顧:
Blockathon(北京):48小時極客開發,區塊鬆11個現場交付專案創意公開
成都blockathon回顧: