Solidity基础(0)--Solidity编写智能合约

要写智能合约有好几种语言可选:有点类似Javascript的Solidity, 文件扩展名是.sol;Python接近的Serpent, 文件名以.se结尾。还有类似Lisp的LLL,但现在最流行而且最稳定的要算是Solidity了


solidity写Hello World

pragma solidity ^0.4.0;
import "./A.sol";
contract HelloWorld {
  function hello() returns(string){
      return "hello world";
  }
}

solidity文件扩展名为.sol,主合约名要和solidity文件名相同,一份合约包含版本声明,导入声明,合约声明

版本声明

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)的版本,这是为了确保合约不会在新的编译器版本中突然行为异常

导入声明

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";

合约声明

包括:contractinterfacelibrary
(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)