以太坊知识教程------智能合约(3)函数修饰符
1. solidity的五個(gè)關(guān)鍵字修飾符
| public | 用來(lái)修飾公開(kāi)的函數(shù) /變量,表明該函數(shù)/變量既可以在合約外部訪問(wèn),也可以在合約內(nèi)部訪問(wèn) 。 |
| private | 私有函數(shù)和變量,只有當(dāng)前合約內(nèi)部才可以訪問(wèn) 。 |
| view/constant | 函數(shù)不會(huì)修改任何contract的數(shù)據(jù),constant可以用于修飾常量和常函數(shù)。 |
| pure | 函數(shù)不使用任何智能合約的變量 |
| payable | 調(diào)用函數(shù)需要付錢(qián),錢(qián)付給了智能合約的賬戶(hù) |
2. 內(nèi)部調(diào)用和外部調(diào)用
| external | 用于修飾函數(shù),表示函數(shù)為一個(gè)外部函數(shù),外部函數(shù)是合約接口的一部分,這意味著只能通過(guò)其他合約發(fā)送交易的方式調(diào)用外部函數(shù) |
| internal | 內(nèi)部函數(shù)/變量,表示只能在當(dāng)前合約或者繼承自當(dāng)前合約的其他合約中訪問(wèn) |
a. 內(nèi)部調(diào)用:調(diào)用同一合約中的函數(shù)。內(nèi)部調(diào)用對(duì)應(yīng) EVM 指令集中的 JUMP 指令,所以是非常高效的,在此期間內(nèi)存不會(huì)被回收。
b. 外部調(diào)用:調(diào)用其他合約實(shí)例的方法
會(huì)創(chuàng)建一個(gè)消息發(fā)送給被調(diào)用的合約,如 this.a()或者 foo.bar()這樣調(diào)用外部的合約函數(shù),這里 foo 是一個(gè)合約的實(shí)例 。對(duì)其他合約函數(shù)的調(diào)用必須是外部調(diào)用,外部調(diào)用會(huì)將函數(shù)調(diào)用的所有參數(shù)都保存到內(nèi)存中 。 注意,在構(gòu)造函數(shù)中不能通過(guò) this 調(diào)用函數(shù),因?yàn)榇藭r(shí)合約實(shí)例還未創(chuàng)建完成。
- 函數(shù)的默認(rèn)屬性為 public ,狀態(tài)變量的默認(rèn)屬性為 internal ,并且不可設(shè)置為 external
- public和private用于決定是否可以通過(guò)對(duì)象直接調(diào)用。
- internal和lexternal用于決定是否其它的合約可以調(diào)用。
外部異常情況:①調(diào)用的合約不存在;②被調(diào)用的不是一個(gè)合約賬戶(hù),即該賬戶(hù)不包括代碼;③被調(diào)用的函數(shù)拋出了異常;④調(diào)用過(guò)程中 Gas 耗盡
3. 傳參
對(duì)于普通的函數(shù)調(diào)用,參數(shù)的傳入順序必須與聲明時(shí)一致 。
4. 命名調(diào)用
Solidity 提供的一種特殊的函數(shù)調(diào)用方式
總結(jié)
以上是生活随笔為你收集整理的以太坊知识教程------智能合约(3)函数修饰符的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 以太坊知识教程------智能合约(2)
- 下一篇: C++ Primer 5th笔记(10)