以太坊知识教程------智能合约(3)函数修饰符
生活随笔
收集整理的這篇文章主要介紹了
以太坊知识教程------智能合约(3)函数修饰符
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. solidity的五個關鍵字修飾符
| public | 用來修飾公開的函數 /變量,表明該函數/變量既可以在合約外部訪問,也可以在合約內部訪問 。 |
| private | 私有函數和變量,只有當前合約內部才可以訪問 。 |
| view/constant | 函數不會修改任何contract的數據,constant可以用于修飾常量和常函數。 |
| pure | 函數不使用任何智能合約的變量 |
| payable | 調用函數需要付錢,錢付給了智能合約的賬戶 |
2. 內部調用和外部調用
| external | 用于修飾函數,表示函數為一個外部函數,外部函數是合約接口的一部分,這意味著只能通過其他合約發送交易的方式調用外部函數 |
| internal | 內部函數/變量,表示只能在當前合約或者繼承自當前合約的其他合約中訪問 |
a. 內部調用:調用同一合約中的函數。內部調用對應 EVM 指令集中的 JUMP 指令,所以是非常高效的,在此期間內存不會被回收。
b. 外部調用:調用其他合約實例的方法
會創建一個消息發送給被調用的合約,如 this.a()或者 foo.bar()這樣調用外部的合約函數,這里 foo 是一個合約的實例 。對其他合約函數的調用必須是外部調用,外部調用會將函數調用的所有參數都保存到內存中 。 注意,在構造函數中不能通過 this 調用函數,因為此時合約實例還未創建完成。
- 函數的默認屬性為 public ,狀態變量的默認屬性為 internal ,并且不可設置為 external
- public和private用于決定是否可以通過對象直接調用。
- internal和lexternal用于決定是否其它的合約可以調用。
外部異常情況:①調用的合約不存在;②被調用的不是一個合約賬戶,即該賬戶不包括代碼;③被調用的函數拋出了異常;④調用過程中 Gas 耗盡
3. 傳參
對于普通的函數調用,參數的傳入順序必須與聲明時一致 。
4. 命名調用
Solidity 提供的一種特殊的函數調用方式
總結
以上是生活随笔為你收集整理的以太坊知识教程------智能合约(3)函数修饰符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 以太坊知识教程------智能合约(2)
- 下一篇: 以太坊节点布置(4) geth节点互联