4.4 智能合约Solidity编程初探
01 Solidity概述
Solidity是面向合约的高级语言,它的语法与JavaScript类似,被设计运行于以太坊虚拟机上(EVM)。
Solidity是静态类型的,支持继承、库和复杂的用户自定义类型。
Solidity与其它语言相比有许多的不同,下面列举论证:
•以太坊底层是基于帐户,而非UTXO的,所以有一个特殊的Address类型。
•由于语言内嵌框架是支持支付的,所以Solidity语言提供了一些关键字,如payable,可以在语言层
面直接进行支付。
•存储是使用网络上的区块链。数据的每一个状态都可以永久存储,所以需要确定变量使用内存,还
是使用区块链。
•运行环境是在去中心化的网络上,会比较强调合约或函数执行调用的方式。
•最后一个非常大的不同则是它的异常机制。一旦出现异常,所有的执行都将会被回撤,这主要是为
了保证合约执行的原子性,以避免中间状态出现的数据不一致。
区块链与创新思维
02 Solidity 概述
开始学习Solidity最好的方式是使用Remix ()。Remix是基于浏览器的IDE,
可以直接在浏览器上打开使用,它集成了Solidity编译和运行时的环境,不需要服务端组件。下图就
是Remix打开的界面:
区块链与创新思维
03 Solidity源代码文件结构
• 源文件可以包含任意数量合约的定义,包括指令和编译指令。以下是一个示例,定义了一个简单的
存储合约:
区块链与创新思维
04 Solidity源代码文件结构
1.版本申明
源文件的第一行需要进行版本申明,版本申明的格式为:
进行这样版本申明的源文件表示它不能被0.4.0版本之前的编译器编译,也不会被0.5.0及之后的版本
编译,也就是说需要高于0.4.0并且低于0.5.0的版本才可以进行编译。
区块链与创新思维
05 Solidity源代码文件结构
2.引用其他源文件
全局引入。从“filename”中导入所有全局符号到当前源文件的全局范围:
自定义命名空间引入。创建一个新的全局符号symbolName,它的成员均是从“filename”文件引
入:
分别定义引入。创建新的全局符号alias和symbol2,它们分别从”filename”中引用symbol1和symbol2:
区块链与创新思维
06 Solidity源代码文件结构
3.路径相关
路径名以.开头代表当前目录,以..开头代表父目录,否则代表绝对路径。因此为了引入当前目录下的
文件,使用 import ./x as x;。如果使用 import x as x; ,则可能会引入一个不同的文件(在一个
全局的include目录下)。
为什么会有这个区别呢?
解析路径的时候,目录层级结构并不与我们本地的文件一一对应,它非常有可能是通过ipfs、http或
git建立的一个网络上的虚拟目录。
区块链与创新思维
07 Solidity源代码文件结构
4.在实际的编译器中使用
编译器引用文件的机制包括:
• 可以将一个域名下的文件映射到本地,从而从本地的某个文件中读取;
• 提供对同一实现的不同版本的支持(可能某版本的实现前后不兼容,需要区分);
• 如果前缀相同,取最长;
• 有一个”fallback-remapping”机制,空串会映射到“/usr/local/include/solidify”;
区块链与创新思维
08 Solidity源代码文件结构
5.代码注释
单行注释使用(// ),多行注释使用(/*…*/)。
6.文档注释
文档注释用于书写文档,使用三个斜杠///或者/**...*/。可以使用Doxygen语法,来生成对文档
的说明、参数注解或者是当用户调用某个函数时,弹出来的确认内容。
区块链与创新
您可能关注的文档
最近下载
- 第十章血脂及浆脂蛋白检验.doc VIP
- GB 50207-2012 屋面工程质量验收规范.docx VIP
- 高铁乘务人员形体训练全套教学课件.pptx
- 六年级上册道德与法治知识点.docx VIP
- 2026年课件-《成人患者医用粘胶相关性皮肤损伤的预防及护理》团体标准解读2026-新版.pdf
- 2017-2018年度零售业消费者满意度调查报告.pdf VIP
- 〖初中数学〗整式的乘法 课件 2024--2025学年北师大版七年级数学下册.pptx VIP
- 深度解析(2026)《SYT 5679-2017钻井液用降滤失剂 褐煤树脂 SPNH》.pptx VIP
- 12J201 平屋面建筑构造图集.docx VIP
- 社会调查研究计划书.docx VIP
原创力文档

文档评论(0)