以太坊官方推荐的智能合约开发语言
是一门静态的,支持继承,类库以及复杂的自定义类型特征的高级语言
Solidity 文件结构
Solidity合约源文件使用的扩展名为.sol
智能合约主要结构:
- 版本声明
pragma solidity ^0.5.10
- 引入源文件
import "文件名字"
-
合约
- 状态变量
uint storedData
- 函数
function bid() public payable{ ... }
- 函数修改器
// 声明一个修改器 modifier onlySeller(){ ... } // 修改器的使用 function abort() public onlySeller{ ... }
- 事件
// 事件是EVM日志基础设施提供的接口,用于获取当前发生的事件 // 定义事件 event HighestBidIncreased(address bidder, uint amount); //触发事件 emit HighestBidIncreased(msg.sender,msg.value)
- 结构类型
struct Voter{ uint weight; bool voted; }
- 枚举类型
enum State{ Created , Locked , Inactive }
- 状态变量
-
注释
///
/**....*/
Solidity数据类型
两类:值类型和应用类型
值类型: 布尔类型(Bool)、整型(int8,int16,int32)、定长浮点型(ufixed32x1)、定长字节数组(byte,bytes1,bytes2)、有理数和整型常量、字符串常量、十六进制常量(hex)、枚举(enum)、函数类型、地址类型(address)、地址常量
引用类型:数组(Array)、结构体(Struct)、映射(Mapping)
函数类型:
- 内部函数(internal):只能在当前合约内被调用,不会创建一个EVM消息调用,访问方式 f()
- 外部函数(external):通过EVM消息调用,由之地和函数方法签名两部分组成,访问方式this.f()
internal和external既表示调用方式也表明了其可见性,在写智能合约是要特别注意,如果一个使用internal,却使用了external,很容易引发安全问题,同时增加gas的消耗
public函数和external函数?
public函数时,会立即复制参数到内存,而external函数是从calldata读取,public函数可能会被内部调用,而external函数是不允许内部调用的,省去了复制的过程
确认仅仅只是外部访问,则使用external函数
以上仅为个人学习笔记,谨慎参考