zoukankan      html  css  js  c++  java
  • Solidity编程 三 之 资源文件的组成

    3.1 版本语句

    源文件可以用版本语句拒绝高版本编译器编译。其中一些高版本可能引入了不兼容的特性,导致编译后出现不可预知的结果。我们希望把这种版本变化控制在最小范围内,同时尽量要求语法和语义同步修改,这个要求很难达到。所以,我们需要去阅读每个版本的修改日志,这些版本都是以 0.X.0或是X.0.0来命名。 版本语句使用如下:

    pragma solidity ^0.4.0;
    

    这样的源文件不会被0.4.0以前的编译器编译,同时在0.5.0版本以上(包括0.5.0)编译器上也不能编译(使用了 ^ 进行约束)。这个因为在0.5.0之前,不会出现很大的改变,所以我们可以确信我们的代码可以按照预期的结果执行。

    3.2 引入其他资源文件

       3.2.1 语法

           Solidity支持import导入资源文件,这点和JavaScript(ES6)很像,但是不支持默认导出的功能 import语句格式如下,这是全局有效的:  

    import "filename";
    

      该语句把”filename”全局导入当前工程中,同时也全局导入”filename”里包含的所有全局导入文件。支持向后兼容性

     import * as symbolName from "filename";
    

          新建一个名为 symbolName的全局符号,它包含了”filename”里的所有全局符号

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

          从”filename”文件里导入symbol1 和symbol2的全局符号,同时给symbol1取别名为alias

         另外一个不是ES6语法,但是很方便

    import "filename" as symbolName;

      这语句等同于

    import * as symbolName from "filename";

       3.2.2 路径

      上面提到的”filename”以 / 为目录分隔符,.为当前目录,…为上一级目录。如果.和…后面跟的是除了/之外的字符,不会作为一个文件目录来对待。所以的目录默认都是绝对路径,除非他们以.或是…开头。 导入当前目录下的文件x,可以使用

     import "./x" as x;

      如果使用 

     import "x" as x;

      引用的是不同的文件(全局使用”include directory”)。 文件路径的引用取决于不同编译器。一般来说,目录结构是不需要严格对应于你的本地文件系统的,它可以映射到ipfs,http或是git

       3.2.3 编译器使用

      编译器的使用不仅可以指定如何查找路径的首个元素,而且还可以指定路径前缀映射。所以如:

     github.com/ethereum/dapp-bin/library 

      路径就可以映射到本地路径

     /usr/local/dapp-bin/library

      编译器就可以从本地路径中读取所需要的文件。如果同时存在多种映射关系,最长路径会被优先使用。这就允许使用备用映射如 "" 映射到 "/usr/local/include/solidity" 这些映射还可以根据不同的情况允许用户配置包,比如导入不同版本的同名library。

         Solc

          对于solc(一种命令行编译器)来说,可以用

     context:prefix=target 

      来提供这种映射关系。context:和=target都可选。所有映射成正确的文件都会编译,包括所有依赖文件。这是一种完全向后兼容机制,所有导入的文件中,如果是以 定义好的“prefix”字段开头的,都会被直接替换成 target定义的值。 例如:如果clone github.com/ethereum/dapp-bin/ 到 本地的 /usr/local/dapp-bin,可以使用如下的import语句

    import "github.com/ethereum/dapp-bin/library/iterable_mapping.sol" as it_mapping;

       编译的时候就会变成如下:

    solc github.com/ethereum/dapp-bin/=/usr/local/dapp-bin/ source.sol 

      如果你是使用了一个很老版本dapp-bin的一些模块代码时,老版本的dapp-bin从 /usr/local/dapp-bin_old check out出来,可以如下使用:

     solc module1:github.com/ethereum/dapp-bin/=/usr/local/dapp-bin/ 
    module2:github.com/ethereum/dapp-bin/=/usr/local/dapp-bin_old/ source.sol

      这样所有module2的import都指向到老版本,二module1的都指向新的版本。 注意solc只允许包含特定的目录:明确指定文件的目录或是映射目标中的目录。如果想允许绝对包含,可以添加重新映射 =/ 如果多重重新映射指向一个有效文件,优先使用包含最长重新映射前缀

          Remix

         Remix提供了github的自动重映射功能,可以自动从网络上获取所需要的资源文件。可以如下导入映射 

    import "github.com/ethereum/dapp-bin/library/iterable_mapping.sol" as it_mapping;

       3.2.4 注释

      提供了单行注释  (//) 和多行注释 (/*...*/) 

      

  • 相关阅读:
    x64 寄存器使用
    汇编语言学习笔记(十二)-浮点指令----ACM
    浮点数的加减计算总结
    Mobile First! Wijmo 5 之 架构
    CSDN头版头条 《近匠》 Wijmo 5 CTO:从Web到移动,我的25年编程生涯
    超越Web,Javascript在物联网的应用
    《我与葡萄城的故事》— 征文大赛
    介绍一款开源的类Excel电子表格软件
    2014年GDG西安 -- DevFest Season1
    异步陷阱之死锁篇
  • 原文地址:https://www.cnblogs.com/StephenWu/p/7087254.html
Copyright © 2011-2022 走看看