Solidity 变量
Solidity 变量 Solidity 特殊变量 Solidity 变量默认值 Solidity 变量作用域 Solidity 常量Solidity 运算符
Solidity 运算符 Solidity 算术运算符 Solidity 比较运算符 Solidity 逻辑运算符 Solidity 位运算符 Solidity 赋值运算符 Solidity 条件运算符Solidity 条件语句
Solidity 条件语句 Solidity if语句 Solidity if…else 语句 Solidity if…else ifSolidity 循环语句
Solidity 循环语句 Solidity while 循环 Solidity do 循环 Solidity for 循环 break 与 continueSolidity 复杂数据
Solidity 字符串 Solidity 数组 Solidity 结构体 Solidity 映射 Solidity 枚举 Solidity 类型转换Solidity 数据位置
Solidity 数据位置 Solidity 变量数据位置 Solidity 赋值数据位置Solidity 函数
Solidity 函数 Solidity 函数返回值 Solidity pure函数 Solidity view函数 Solidity 构造函数 solidity 函数修改器 Solidity 函数重载 Solidity 数学函数 Solidity 加密函数Solidity 进阶编程
Solidity 事件 Solidity 不可变量 Solidity 日志 Solidity 继承 Solidity 多重继承 多重继承的构造函数 Solidity 调用父类函数 Solidity 异常处理 Solidity 编程风格 Solidity 访问权限 Solidity 存储位置 Solidity 引用类型 Solidity 值类型 Solidity 值类型与引用类型 Solidity 合约结构 Solidity 编写智能合约 Solidity delete Solidity 0.6 重大变化 Solidity transfer 转账 Solidity transfer send Solidity 单位 Solidity constant Solidity this & sender Solidity address Solidity 众筹智能合约 Solidity interface solidity gas使用模式 Solidity 常见编译错误 Solidity 调用合约 Solidity 支付Eth Solidity fallback Solidity receive Solidty 钱包合约 Solidity 发送Eth Solidity 自毁合约 Solidity 哈希算法 Solidity 工厂合约 Solidity 库合约 Solidity 权限控制合约 Solidity 验证签名Solidity 变量
Solidity 变量 Solidity 特殊变量 Solidity 变量默认值 Solidity 变量作用域 Solidity 常量Solidity 运算符
Solidity 运算符 Solidity 算术运算符 Solidity 比较运算符 Solidity 逻辑运算符 Solidity 位运算符 Solidity 赋值运算符 Solidity 条件运算符Solidity 条件语句
Solidity 条件语句 Solidity if语句 Solidity if…else 语句 Solidity if…else ifSolidity 循环语句
Solidity 循环语句 Solidity while 循环 Solidity do 循环 Solidity for 循环 break 与 continueSolidity 复杂数据
Solidity 字符串 Solidity 数组 Solidity 结构体 Solidity 映射 Solidity 枚举 Solidity 类型转换Solidity 数据位置
Solidity 数据位置 Solidity 变量数据位置 Solidity 赋值数据位置Solidity 函数
Solidity 函数 Solidity 函数返回值 Solidity pure函数 Solidity view函数 Solidity 构造函数 solidity 函数修改器 Solidity 函数重载 Solidity 数学函数 Solidity 加密函数Solidity 进阶编程
Solidity 事件 Solidity 不可变量 Solidity 日志 Solidity 继承 Solidity 多重继承 多重继承的构造函数 Solidity 调用父类函数 Solidity 异常处理 Solidity 编程风格 Solidity 访问权限 Solidity 存储位置 Solidity 引用类型 Solidity 值类型 Solidity 值类型与引用类型 Solidity 合约结构 Solidity 编写智能合约 Solidity delete Solidity 0.6 重大变化 Solidity transfer 转账 Solidity transfer send Solidity 单位 Solidity constant Solidity this & sender Solidity address Solidity 众筹智能合约 Solidity interface solidity gas使用模式 Solidity 常见编译错误 Solidity 调用合约 Solidity 支付Eth Solidity fallback Solidity receive Solidty 钱包合约 Solidity 发送Eth Solidity 自毁合约 Solidity 哈希算法 Solidity 工厂合约 Solidity 库合约 Solidity 权限控制合约 Solidity 验证签名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 ...
AI 中文社