您的当前位置:首页正文

玩转solidity --01源文件的布局

来源:要发发知识网

版本声明

版本声明代码格式如下:

pragma solidity ^0.4.0;

这段代码的声明表示,源文件不会被0.4.0以下版本的编译器编译。当然同时也不会被0.5.0以上版本的编译器起作用(这是由^符号来决定的)。

0.4.0 ~ 0.4.9 这些版本支持上面代码声明的源码编译,这样处理的好处是,如果0.4.0编译器有问题,可以随时修复bug,将其调整为0.4.1

导入其他文件

Solidity支持 import语句,非常类似于JavaScript(ES6),虽然Solidity不知道“缺省导出”的概念。
在全局层次上,你可以用下列形式使用import语句

import "filename";

这个声明可以将filename文件中可导出的所有的全局变量导入到当前文件的全局作用域中。

自定义导入变量名

import * as symbolName from "filename";

创建一个全局的变量名symbolName,symbolName里面包含filename这个文件中所有的全局变量。

自定义别名

import {symbol1 as alias, symbol2} from "filename";

alias等价于filename文件中的symbol1,symbol2等价于filename文件中的symbol2。

另外一种非ES6的导入方式

import "filename" as symbolName;

这种写法不是ES6里面的写法,但是使用非常方便,它等价于import * as symbolName from "filename";。

路径

  • 在上面,文件名总是使用/作为目录分割符,. 是当前的目录,.. 是父目录,路径名称不用.开头的都将视为绝对路径。
  • 从同一个目录下import 一个文件 x 作为当前文件,用 import ”./x” as x;
  • 如果没有.或者..时,所有的路径都默认绝对路径而不是相对路径。

使用编译器

solc:
solc(行命令编译器),重映射将提供 key=值参数, =值 部分是可选的(缺省就是key ) 。

所有重映射的常规文件都将被编译(包括他们的依赖文件),这个机制完全向后兼容(只要没有文件名包含 a=) ,这不是一个很大的变化,

运行编译器时如下

注意: solc仅仅允许你从特定的目录下include文件,他们必须是一个显式定义的,包含目录或子目录的源文件, 或者是重映射目标的目录(子目录)。如果你允许直接include, 要增加remapping =/.

如果有多个重映射,就要做一个合法文件,文件中选择最长的公共前缀

基于浏览器的solidity
基于浏览器的编译器提供了从github上的自动重映射,并且自动检索网络上的文件,你可以import 迭代映射 如

注释

可用单行注释 (//) 和多行注释 (/.../)

有种特别的注释 叫做 “natspec ” (文档以后写出来),在函数声明或定义的右边用三个斜杠(///)或者用 两个星号 (/ ... /). 。如果想要调用一个函数,可以使用doxygen-style标签里面文档功能,形式验证,并提供一个确认条件的文本注释显示给用户。*