Solidity学习笔记
以太坊
共识协议有
- pow(工作量证明)
- pos(权益证明)
结点类型有
- 普通节点:备份区块链数据
- 矿工:创建区块链
加密算法使用的是ECC(椭圆曲线加密算法)
通信协议使用的是Whisper
存储平台使用的是Swarm
geth是以太坊,whipster和swarm节点的一个实现
solidity流程
文件组成
Solidity文件,扩展名为.sol,由4个结构组成
- 预编译指令
- 注释
- 导入
- 合约/库/接口
使用下面指令指定编译器版本
pragma Solidity <version number>
注释形式有
- 单行注释 :用双斜线表示//
- 多行注释 :用/*和*/表示
- 以太坊自然规范:即三个斜杠///表示单行注释,多行注释用/**表示注释开始,*/表示注释结束
导入其它合约使用
import "otherContract"
合约使用关键字contract,库使用关键字library,接口使用关键字interface
合约
合约结构包含
- 状态变量
- 结构定义:使用struct
- 修改器定义:使用关键字modifier,修改器与函数绑定。修改器中的下划线_表示执行目标函数。payable是由Solidity提供的修改器,当应用于函数时允许函数接受以太币
- 事件声明:使用关键字event来定义
- 枚举定义
- 函数定义:函数支持的限定符有external, payable(k只能接受以太币), view(常量函数别名),pure(既不能读取也不能写入,不能访问状态变量)
状态变量修饰符有
- internal:在没有显示指定情况下,默认是internal
- private
- public
- constant
数据类型支持的有
- bool
- uint/int:从8位到256位,没有指定位数时,表示的是256位
- bytes
- address
- mapping
- enum
- struct
- string
数据类型
值类型有
- bool
- uint/int
- address
- byte:是bytes1的别名,字节类型还支持1-32,即bytes1-bytes32
- enum
引用类型有
- 数组:有固定数组和动态数组,比如固定数组为
int[5] age
,动态数组int[] age
。动态数组可以使用内联初始化或者使用new运算符初始化,内联形式为int[] age = [1, 2,3]
,new初始化形式为int[] age = new int[](5)
。solidity中有特殊数组类型,即字节数组bytes
和字符串数组string
- 结构
- 字符串
- 映射
数据存储位置
存储位置支持有
- 存储
- 内存
- 调用数据
- 堆栈
字面量
字符串字面量用单引号或者双引号
十六进制字面量以前缀hex作为关键字,如hex "1A2B3F"