蚂蚁区块链合约平台支持的 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 变量则是临时的,当外部函数对某合约调用完成时,内存型变量即被移除。