全部产品

合约关键字

更新时间:2019-08-27 02:02

蚂蚁区块链合约平台支持的 Solidity 语法基本与官方文档一致,具体语法介绍可参看 Solidity 官方文档(英文)

本文主要介绍 Solidity 合约函数构造的常用 权限关键字修饰关键字

函数类型的构造方式

  1. 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 关键字声明的关键字的要求后才会被执行,比如声明某函数只有管理员有权限,则可以参考以下实现:
  1. modifier onlyAdmin() {
  2. require(msg.sender == admin, "Permission denied");
  3. _;
  4. }
  5. function set(uint a) public onlyAdmin returns(uint) {
  6. .....
  7. }
  • constant:被声明为 constant 的状态变量只能使用那些在编译时有确定值的表达式来给它们赋值。任何通过访问 内存、区块链数据(例如 now,this.balance 或 block.number)或执行数据(msg.gas)或对外部合约的调用来给它们赋值都是不允许的。不是所有类型的状态变量都支持用 constant 来修饰,当前支持的仅有值类型和字符串。

  • pure:被该关键字修饰的状态变量只能读取其值,不能对该状态变量的值进行修改。

  • view:被该关键字修饰的状态变量既不能读取变量,也不能修改该变量。

  • Storage 变量是指永久存储在区块链中的变量。

  • Memory 变量则是临时的,当外部函数对某合约调用完成时,内存型变量即被移除。