您现在的位置是:首页 >技术杂谈 >Solidity基本语法网站首页技术杂谈

Solidity基本语法

半愚半智 2024-06-21 12:01:03
简介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>>,...);

        }

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。