智能合約開發學習—functions

這裡整理之前上課的筆記,都是入門級別一共 4 章,分別如下:

function 的寫法跟一般的程式語言一樣,特別拉一個章節是因為有多個 function type

語法

function <name>(<params>) <visibility> [modifier] <function type> returns(<return type>) {
		// statements
}

return type 就是 variable type,比如 intarray

function type

function type 大致上可以分為 4 種

1. view function

readonly function,不會修改任何的 state

function example(int num) public view returns(int){}

2. pure function

no read and modify state,作爲 helper function 使用(運算或是字串操作)

可以被外部呼叫,不消耗 gas

function example(int numa, int numb) public pure returns(int) {}

3. payable function

可以用來收 eth 的 function

function example(int incoming) public payable {}

4. special function

  • fallback function

定義了 contract 的預設行為:當不使用該 contract 定義的 function 呼叫時執行,因此必為 external

也可以設定為 payable 來接收 eth

fallback() external payable {}

fallback() external {
    require(msg.sender == msg.receiver)
}
  • receive function

必須是 external payable,可以不用指定參數就接收 eth,與 payable 差在 sender 不需要知道你的 api 參數,直接送就好

receive() external payable {}

function modifier

  • 修改 function 行為的 helper function
  • 發生 function 的最上方,使用modifier關鍵字宣告
  • 用來把重複的驗證行為包裹起來讓 code 好讀
  • 只能寫require
modifier onlyOwner() {
    require(owner == msg.sender);
    _; // if pass then execute else is throw exception
}
function xxx() public onlyOwner {
    // require(owner == msg.sender);
    xxxx
}

event

寫 log 用的,告訴真實世界這個 contract 發生了什麼事,比如發生 transfer、發生 approve 等

event Transfer(address indexed from, address indexed to, uint tokens);

emit Transfer(msg.sender, msg.receiver, 10)
cmd + /