您现在的位置是:首页 >技术杂谈 >Solidity基本语法网站首页技术杂谈
Solidity基本语法
1、预编译指令
指定当前文件编译器版本
语法:pragma Solidity <<^版本号>>;
版本号:主版本号和次版本号
脱字符号:^,指定主版本中的最新次版本
2、注释
单行注释://
多行注释:/* */
以太坊自然规范:单行:///
多行:/** */
3、导入
import语句
导入其他Solidity文件,方便在当前Solidity文件和代码访问其代码
语法:import '<<文件名>>.sol';
/ 从其他目录和文件中分离
. 引用当前目录
.. 引用父目录
4、合约
组成:
4.1、状态变量:
定义:由矿工永久存储在区块链/以太坊账本中。
在合约中,没有在任何函数内声明的变量。
限定符: 内部变量:internal,当前合约、继承合约;
私有状态变量:private,当前合约;
公状态变量:public,所有合约;
常量状态变量:constant,值不可变,声明时必须赋初值。
数据类型:值类型:bool、uint/int、bytes、address、enum
引用类型:mapping、struct、bytes/String
4.2、结构定义:
用户自定义的复合数据类型。
语法:struct <<结构名>>{
<<数据类型1>> <<变量名1>>;
<<数据类型2>> <<变量名2>>;
....
}
4.3、修改器定义:
改变执行代码行为的结构。
与函数关联,改变关联函数行为;执行目标函数之前,执行的函数。
语法:声明:
modifier <<修改器名>>{
//逻辑代码
_ 表示执行目标函数
}
关联:
function <<函数名>>(<<入参1>>,<<入参2>>,..) <<修改器名>> returns(<<出参1>>,<<出参2>>,..)
{
//逻辑代码
}
4.4、事件声明:
通过EVM的日志工具,向调用应用程序通知合约的当前状态;应用程序使用他们执行相关逻辑。
语法:event <<事件名>>(<<入参1>>,<<入参2>>,...);
4.5、枚举定义:
声明用户自定义的数据类型;
包含:一个枚举列表、一组自定义常量
语法:enum <<枚举名>> {<<常量1>>,<<常量2>>,...}
4.6、函数定义:
调用或触发合约中的某个函数时,会导致创建一个交易;
按需调用的一个代码单元。
语法:
function <<函数名>> (<<入参1>>,<<入参2>>,...) <<修改器名>> <<限定符1 限定符2 ...>> returns(<<出参1>>,<<出参2>>,...){
//逻辑代码块
}
限定符: internal,当前合约、继承合约;
private,当前合约;
public,所有合约;
external,其他合约;
constant或view,区块链状态不可变,读取和返回当前状态变量。
pure,不访问当前状态和交易变量。
payable,只接收调用者的以太币。
constant或view,区块链状态不可变,读取和返回当前状态变量。
5、库
没有存储,不能够直接访问其中的函数,公共功能
语法:声明:library <<库名>>{}
引用: using <<库名>> for <<类型名>>
<<类型名>> <<类型变量名>>;
<<类型变量名>>.<<函数名>> (<<入参1>>,<<入参2>>,...) ;
6、接口
只包含函数声明;
纯抽象合约。
语法:声明:
interface <<接口名>>{
function <<函数名1>> (<<入参1>>,<<入参2>>,...) <<修改器名>> <<限定符>> returns(<<出参1>>,<<出参2>>,...);
function <<函数名2>> (<<入参1>>,<<入参2>>,...) <<修改器名>> <<限定符>> returns(<<出参1>>,<<出参2>>,...);
}
继承:
contract <<合约名>> is <<接口名>>{
function <<函数名1>> (<<入参1>>,<<入参2>>,...) <<修改器名>> <<限定符>> returns(<<出参1>>,<<出参2>>,...);
function <<函数名2>> (<<入参1>>,<<入参2>>,...) <<修改器名>> <<限定符>> returns(<<出参1>>,<<出参2>>,...);
}