螞蟻區塊鏈合約平台支援的 Solidity 文法基本與官方文檔一致,具體文法介紹可參看 Solidity 官方文檔(英文)。
本文主要介紹 Solidity 合約函數構造的常用 許可權關鍵字 和 修飾關鍵字。
函數類型的構造方式
function (<parameter types>) {public | private | internal | external} [modifier] [pure|constant|view|payable] [returns (<return types>)]函數許可權關鍵字
public:只有 public 類型的函數才可以供外部存取,當一個狀態變數的許可權為 public 類型時,它就會自動產生一個可供外部調用的 get 函數。當函式宣告時,它預設為是 public 類型,而狀態變數聲明時,預設為 internal 類型。
private:只能在當前類中進行訪問,子類無法繼承,也無法調用或訪問。
internal:子類繼承父類,子類可以訪問父類的 internal 函數,同時,使用 using for 關鍵字後,本類可以使用被調用類的 internal 函數。
external:被聲明的函數只能在合約外部調用。
函數修飾關鍵字
modifier:被 modifier 關鍵字聲明的關鍵字所修飾的函數只能在滿足 modifier 關鍵字聲明的關鍵字的要求後才會被執行,比如聲明某函數只有管理員有許可權,則可以參考以下實現:
modifier onlyAdmin() {
require(msg.sender == admin, "Permission denied");
_;
}
function set(uint a) public onlyAdmin returns(uint) {
.....
}constant:被聲明為 constant 的狀態變數只能使用那些在編譯時間有確定值的運算式來給它們賦值。任何通過訪問記憶體、區塊鏈資料(例如 now,this.balance 或 block.number)或執行資料(msg.gas)或對外部合約的調用來給它們賦值都是不允許的。不是所有類型的狀態變數都支援用 constant 來修飾,當前支援的僅有實值型別和字串。
pure:被該關鍵字修飾的狀態變數只能讀取其值,不能對該狀態變數的值進行修改。
view:被該關鍵字修飾的狀態變數既不能讀取變數,也不能修改該變數。
Storage 變數是指永久儲存在區塊鏈中的變數。
Memory 變數則是臨時的,當外部函數對某合約調用完成時,記憶體型變數即被移除。