# Solidity的基本语法进行讲解 **Published by:** [leaf](https://paragraph.com/@leaf-6/) **Published on:** 2022-12-04 **URL:** https://paragraph.com/@leaf-6/solidity ## Content 1.变量声明和常见数据类型除了address(地址)这类特别的类型,Solidity的变量和数据类型与常见编程语言类似,具体介绍如下:2.枚举 Solidity需要定义一组常量时可以通过定义枚举来实现,定义枚举使用enum关键字,示例代码如下,该示例代码定义了一个颜色的枚举,枚举中有红、黄、绿三种颜色,三种颜色的值依次为0、1、2。3.结构体 结构体使用Stouct关键字定义,下面的示列定义了一个名为Player的结构体,这个结构体包含了地址(addr)和数量(amount)两个属性,其中地址是address类型,数量是整型,具体代码如下4.函数 Solidity中函数的定义语法如下:其中,<parameter types>指函数的参数及类型。{internal|external}这两个关键字规定了函数的调用方式,internal指内部调用,能直接使用上下文环境中的数据;external实现合约的外部消息调用,默认是internal。[pure|constant|view|payable]这4个关键字用来说明函数属性,pure关键字来源于函数式编程,表明这个函数体是一个纯函数计算不能调用其他函数;constant关键字定义一个常量,但在Solidity的0.4.17版本后不再使用;view关键字表明这个函数是只读不能修改状态;如果一个函数需要进行货币操作,必须要带上payable关键字。[returns(<return types>)]用来指明函数的返回类型。5.注释Solidity注释的语法和JavaScript中一样,使用“//”进行单行注释,使用“/*”和“*/”进行多行注释。 //这是单行注释 /* 这是 多行注释 */6.文件结构对于Solidity语言,除了要了解以上基本语法外,还需要了解Solidity的文件结构。Solidity文件一般以.sol作为文件后缀。在sol文件中,第1行是版本声明,不同的版本支持的功能不同,所以文件需要指定版本号,语法如下: pragma solidity ^0.4.0; 上面这行语句表明这个sol文件需要在0.4.0之后的版本上运行,其中的“^”符号表示不支持0.5.0及之后的版本。 以上是Solidity语法的简单介绍,详细内容可参看Solidity的官方教程,在此不再赘述。 : Solidity语言的官方教程地址是http://solidity.readthedocs.io/en/develop/types.html。智能合约的开发了解了Solidity的基本语法后就可以开始进行智能合约的开发了。使用Solidity开发智能合约需要安装一个编译器。对于刚开始学习Solidity语言的读者朋友来说,这里推荐使用在线的IDE编辑器——Remix。在浏览器中输入http://remix.ethereum.org即可使用,无须本地安装。1.编译器Remix的使用Remix的操作界面主要分为4部分。左侧是文件浏览区域,可以进行新建文件、打开本地文件、更新代码到GitHub和浏览所有打开文件等操作;中间上半部分是编辑代码的地方,代码语法高亮,并可以自动进行语法检查,黄色是警告和建议,红色是语法错误;下半部分是一个交互式的终端界面,用来查询交易详情,调试智能合约;右侧是功能面板,用来编译、运行和测试智能合约,整个界面如图5-21所示。 Remix的功能比较强大,本书不过多赘述,有兴趣的读者可访问Remix的官网https://remix.readthedocs.io/en/latest进行查阅。接下来我们直接上手,用Remix编译器开发一个智能合约。 打开Remix后,默认显示的是Solidity语言编写的一个投票的智能合约示例,代码比较多,此处不展开说明。这里新建一个Hello.sol的文件。单击左上角的“+”按钮,输入文件名为“Hello.sol”,单击“OK”按钮进行保存,如图在新生成的文件第1行先声明编译器版本为0.4.0之后的版本,然后定义一个名为“helloBlockchain”的智能合约,这个合约中只包含一个函数renderHello,其功能就是返回“Hello Blockchain”字符串,如图代码编写完成后,在右侧功能面板选择版本号0.4.25+的编译器进行编译,如图所示。编译成功后会打印“Hello Blockchain”这个智能合约的名字。接着单击“Run”标签,选择运行环境为本地测试环境,选择“helloBlockchain”智能合约后再单击“Deploy”按钮部署这个智能合约,如图5-25所示。 Remix有3种运行模式,如下所述。 ●JavaScript VM:这种模式是在浏览器中模拟一个区块链,合约在这个模拟的沙盒中执行,刷新页面就会使所有数据清空,不会做任何持久化,没有注入Web3对象。 ●Injected Provider:连接到包含注入Web3对象的源上,在Mist浏览器或安装MetaMask的浏览器上会自动切换到此模式下。 ●Web3 Provider:连接到远程结点,需要填写源的url地址和端口,例如geth、ganache等客户端,包含Web3对象 这里选择Injected Provider模式(图中的Provider为Web3对象,即Injected Web3)部署helloBlockchain智能合约部署智能合约是将智能合约写入到以太坊,在以太坊上进行写入操作都需要消耗以太币,所以在这一步操作会消耗以太币。在弹出的窗口中单击“Confirm”按钮确认支付,如图到这里智能合约就部署到本地的测试环境了。智能合约部署成功后,在Remix主界面的右下角可以看到部署成功的智能合约和可以使用的函数renderHello,单击renderHello即是调用并执行该函数,可以看到输出结果为字符串“Hello Blockchain”,如图最后,总结一下智能合约的开发过程,整个流程如图智能合约开发流程1)新建sol文件,编写智能合约的功能,这里实现里一个输出“Hello Blockchain”的功能。 2)使用编译器对代码进行编译。 3)若编码无错误,编译器将编译结果编译生成一个二进制文件。 4)将编译成功的智能合约部署到区块链系统中。 5)部署成功后会返回智能合约的地址和应用二进制接口(Application Binary Interface,ABI),用于和智能合约进行交互。 6)通过地址和ABI调用智能合约。Truffle框架当掌握了Solidity的基本语法和智能合约的开发流程后,就可以进一步学习DApp的开发框架Truffle了。 Truffle是针对基于以太坊的Solidity语言的一套开发框架。Truffle本身基于JavaScript,Truffle的目标是让DApp的开发变得更简单,它具有以下功能。 ●内置的智能合约编译、链接、部署和二进制文件的管理。 ●支持智能合约的自动化测试。 ●脚本化的、可扩展的部署与发布框架。 ●管理部署的网络环境功能。 ●使用EthPM或npm提供的包管理,使用ERC190标准。 ●与合约直接通信的交互控制台(写完合约就可以在命令行里验证了)。 ●智能合约的构建流程可根据需求进行自定义配置。 ●在Truffle环境里支持执行外部的脚本Truffle的安装和常用命令Truffle可以通过包管理工具npm进行安装,安装命令如下: $ npm install -g truffle 安装完成后输入truffle命Truffle可以通过包管理工具npm进行安装,安装命令如下: $ npm install -g truffle 安装完成后输入truffle命令即可看到它的使用方法,如图5-29所示。以下是几个主要的Truffle命令的用法介绍。 1.初始化Truffle项目——truffle init 要初始化Truffle项目只需要输入truffle init就可以初始化一个空的项目,新建一个文件夹叫first-DApp,进入文件夹后执行truffle init,如图所示。 Truffle会自动生成一个空的项目工程。新生成的Truffle项目中包含几个文件夹和配置文件,其中contracts文件夹用来存放智能合约;migrations文件夹用来实现部署智能合约的功能;test文件夹用来存放合约的测试文件;truffle.js是默认配置文件;truffle-config.js是Windows下的默认配置文件,以防止文件名与truffle命令冲突,一个Truffle项目的结构如Truffle常用命令初始化Truffle项目Truffle项目结构2.编译命令——truffle compile 执行truffle compile命令会编译智能合约文件,编译成功后会在当前目录的build文件夹下生成新的智能合约二进制文件,如图5-32所示。 3.部署命令——truffle deploy 部署智能合约之前需要修改配置文件,本章中使用的智能合约开发测试环境为Ganache,其客户端监听的端口为本地的7545端口,故需要修改truffle.js文件连接到本地的7545端口,如图编译智能合约文件更新配置文件修改完成就可以进行智能合约部署了,在终端中输入命令“truffle deploy”即可完成。 4.测试命令——truffle test 执行truffle test命令会运行test文件夹下的所有测试用例,该命令将会自动识别以.js、.es、.es6、.jsx和.sol为扩展名的文件,其他扩展名的文件将被忽略。 5.终端命令——truffle console 执行truffle console命令可以打开一个交互式终端界面,方便地进行智能合约的调用和调试。 6.下载模板命令——truffle unbox[box-name] 安装完成后输入truffle命令即可看到它的使用方法,如图5-29所示。以下是几个主要的Truffle命令的用法介绍。 1.初始化Truffle项目——truffle init 要初始化Truffle项目只需要输入truffle init就可以初始化一个空的项目,新建一个文件夹叫first-DApp,进入文件夹后执行truffle init,如图5-30所示。 Truffle会自动生成一个空的项目工程。新生成的Truffle项目中包含几个文件夹和配置文件,其中contracts文件夹用来存放智能合约;migrations文件夹用来实现部署智能合约的功能;test文件夹用来存放合约的测试文件;truffle.js是默认配置文件;truffle-config.js是Windows下的默认配置文件,以防止文件名与truffle命令冲突,一个Truffle项目的结构如图 Truffle还有一个很实用的命令就是truffle unbox[box-name],这个命令用来下载模板,box-name是实际需要下载的模板名字。下一节内容将详细介绍模板的使用。Truffle模板列表要使用这个drizzle模板,首先要安装Truffle和Ganache环境,前边已经安装完了,接下来直接执行truffle unbox drizzle命令下载这个模板即可。 至此,进行DApp开发的各项基础知识已经介绍完,准备工作也已完成,下面开始进行DApp的实际开发。 ## Publication Information - [leaf](https://paragraph.com/@leaf-6/): Publication homepage - [All Posts](https://paragraph.com/@leaf-6/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@leaf-6): Subscribe to updates