Solidity 编写智能合约
要写智能合约有好几种语言可选:有点类似 Javascript 的 Solidity, 文件扩展名是.sol。Python 接近的Serpent, 文件名以.se结尾。还有类似 Lisp 的LLL,但现在最流行而且最稳定的要算是 Solidity 了。
1. solidity Hello World
pragma solidity ^0.4.0; import "./A.sol"; contract HelloWorld { function hello() returns(string){ return "hello world"; } }
solidity文件扩展名为.sol,主合约名要和solidity文件名相同,一份合约包含版本声明,导入声明,合约声明
2. 版本声明
pragma solidity ^0.4.0;
pragmas(编译指令)是告知编译器如何处理源代码的指令,^表示向上兼容,版本操作符可以为:^ ~ >= > < <= = 之一,0.4.0代表solidity版本(版本字面量形如x.x.x),^0.4.0表示solidity的版本在0.4.0 ~ 0.5.0(不包含0.5.0)的版本,这是为了确保合约不会在新的编译器版本中突然行为异常
3. 导入声明
import导入其他源文件,例如:
import "./A.sol"; 从"A"中导入所有的全局标志到当前全局范围,`./`表示当前目录
其他方式:
(1). 创建新的全局符号 symbolName,其成员都是来自“A”的全局。
import * as symbolName from "A";/import "A" as symbolName;
(2).创建新的全局符号“alias”和“symbol2”,它将分别从”A” 引入symbol1 和 symbol2。
import {symbol1 as alias, symbol2} from "A";
4. 合约声明
包括:contract,interface,library。
(1).contract
contract HelloWorld
这里HelloWorld指合约名称,contract即为其他语言中的class,HelloWorld即为类名,创建合约实例则用HelloWorld helloworld = new HelloWorld();
(2).interface 接口
interface A{ function testA(); }
函数不允许有函数体。
(3).library 库
库与合约类似,但它的目的是在一个指定的地址,且仅部署一次,然后通过 EVM 的特性来复用代码。
library Set { struct Data { mapping(uint => bool) flags; } function test(){ } }
其他合约调用库文件的内容直接通过库文件名.方法名例如:Set.test()。
注:一份源文件可以包含多个版本声明、多个导入声明和多个合约声明。
下一章:Solidity mapping delete
1. mapping一种键值对的映射关系存储结构。语法:mapping(_Key => _Value),键值对类型,键是唯一的,其赋值方式为:map[a]=test; 意思是键为a,值为 ...