Solidity 语法

一个 Solidity 源文件可以包含任意数量的合约 contract 定义、import 指令和 pragma 指令。

让我们从一个简单的 Solidity 源程序开始。下面是一个 Solidity 源文件的例子:

pragma solidity >=0.4.0 <0.6.0;

contract SimpleStorage {
   uint storedData;

   function set(uint x) public {
      storedData = x;
   }

   function get() public view returns (uint) {
      return storedData;
   }
}

1. pragma

第一行是 pragma 指令,它告诉我们源代码是为 Solidity version 0.4.0及以上版本编写的,但不包括 version 0.6.0 及以上版本。

pragma 指令只对自己的源文件起作用,如果把文件 B 导入到文件 A,文件 B 的 pragma 将不会自动应用于文件 A。

pragma solidity ^0.4.0;

上面的 pragma 指令中使用了 ^,表示源文件不能用低于 0.4.0 版本的编译器编译,也不能用0.5.0版本及以上版本的编译器编译。

^0.4.0 表示可以使用的版本为 0.4.0 ~ 0.4.9  之间的任意版本,但不能超过 0.5.0 版本。0.4.0 ~ 0.4.9 之间的小版本改动通常不会有破坏性更改,源代码应该都是兼容的。

本教程以最新支持版本 0.8.0 为例:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Hello {
    string message = "Hello World!";
  
    function helloWorld() view public returns(string memory) {
        return message;
    }
}

Solidity ^0.6.8 以上版本要求引入 SPDX 许可证,否则会出现警告:

Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing "SPDX-License-Identifier: <SPDX-License>" to each source file. Use "SPDX-License-Identifier: UNLICENSED" for non-open-source code. Please see https://spdx.org for more information. 

一般是在 .sol 文件第一句加上:

// SPDX-License-Identifier: MIT 

或者

// SPDX-License-Identifier: SimPL-3.0

SPDX-License-Identifier 就是在指明智能合约采用什么样的对外开放标准,该标准规定了别人是否拥有商业开发,学习使用等权利。

MIT 规定了其他人随便用该代码,但出问题不负责。

2. contract/智能合约

智能合约是位于以太坊区块链上特定地址的代码和数据的集合。contract 关键字表示一个智能合约。

uint storedData 声明了一个名为 storedData 的状态变量,类型为uint, set和get函数可用于修改或检索变量的值。状态变量类似于类中的成员变量,与函数中的局部变量不同。

3. 导入文件

上面的例子没有 import 语句,但是Solidity 支持与 JavaScript 非常相似的导入语句。

下面的语句从 “filename” 导入所有全局符号。

import "filename";

下面的示例,创建一个新的全局符号 symbolName,它的成员都是来自 “filename” 的全局符号。

import * as symbolName from "filename";

要从当前目录导入文件 x,请使用 import "./x"。如果不指定当前路径,可能会在全局 “include” 目录中引用另一个文件。

4. 保留关键字

下面是 Solidity 语言中的保留关键字:

  • abstract
  • after
  • alias
  • apply
  • auto
  • case
  • catch
  • copyof
  • default
  • define
  • final
  • immutable
  • implements
  • in
  • inline
  • let
  • macro
  • match
  • mutable
  • null
  • of
  • override
  • partial
  • promise
  • reference
  • relocatable
  • sealed
  • sizeof
  • static
  • supports
  • switch
  • try
  • typedef
  • typeof
  • unchecked

下一章:Solidity 编译运行

我们可以使用在线 Solidity 开发工具 Remix IDE 编译和运行 Solidity 程序。 1.  编写代码在File explorers 选项卡下,新建一个SolidityTes ...