Solidity介绍
Solidity是以太坊开发人员使用的编程语言,用来编写智能合约,运行在以太坊虚拟机(EVM)上。
如果要开发一个去中心化的DApp,需要用React、HTML、CSS等前端技术将用户页面和智能合约结合。
Solidity文件结构
一个Solidity文件后缀为.sol,文件中包含许可声明、文件编译指示、文件导入标识以及任意数量的合约定义,包括变量、常量、构造、函数、事件、结构体、错误处理等。
许可声明
由于提供源代码总是涉及版权方面的法律问题,Solidity编译器鼓励使用机器可读的SPDX许可证标识符,每个源文件都应以说明其许可证的注释开头:
//SPDX-License-Identifier:MIT
如果不想指定许可证或者源代码不是开源的,可以使用特殊值UNLICENSED,其他值可以参考SPDXlicenses
编译指示
通过pragma关键字指定源代码使用哪个版本的编译器进行编译,版本编译指示使用如下:
pragmasolidity^0.5.2;
意思是该源文件不能使用0.5.2版本之前的编译器进行编译。
数据类型
声明变量的数据类型,跟很多编程语言都相似。
address:地址类型,用来转账,区块链独有类型。代码中address(this)表示当前合约的地址。
string:文本类型。
int:数值类型,显示范围是-到-1。
uint:无符号整数(指的正整数),最大是2**-1。
bool:布尔值,true或false。
bytes:字节类型。
mapping:映射类型,可以理解为Map。
事件
事件我们可以理解成通知订阅,当合约中发生某些事,比如谁给谁转账,那么可以声明一个事件,客户端(用户界面)对其监听后,可以接收到这个时间的消息从而dosomething。示例:
eentDeposit(addressfrom,addressto,unitamount);
functiondeposit(addressto,unitamount)publicpayable{
//dosomething
emitDeposit(address(this),to,amount);
}
然后在JS(Web3.js)代码中监听这个事件,示例如下:
varabi=/*abiasgeneratedbythe