想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】
链客,有问必答!!

一个Solidity源文件的布局
源文件可以包含任意数量的合约定义,include指令和pragma伪指令。
Pragma 版本
源文件可以(并且应该)使用所谓的版本编译指示进行注释,以拒绝随后可能引入不兼容更改的编译器版本进行编译。 我们尝试将这些更改保持在绝对最小值,尤其是在语义变化也需要更改语法的情况下引入更改,但这并不总是可能的。 因此,至少对于包含突破性更改的版本,读取更改日志总是一个好主意,这些版本将始终具有0.x.0或x.0.0格式的版本。
版本pragma使用如下:
pragma solidity ^0.4.0;

这样一个源文件不会使用比版本0.4.0之前的编译器编译,并且它也不会在从0.5.0版本开始的编译器(第二个条件通过使用^添加)起作用。 这个想法是,直到版本0.5.0才会有变化,所以我们可以随时确定我们的代码将按照我们打算的方式进行编译。 我们不会修复编译器的确切版本,因此修补程序版本仍然可能。
可以为编译器版本指定更复杂的规则,表达式遵循由npm使用的规则。
导入其他源文件
语法和语义
Solidity支持与JavaScript中可用的导入语句(来自ES6)的引用语句,尽管Solidity不知道“default export”的概念。
在全局层面,您可以使用以下形式的导入语句:
import "filename";

此语句从“filename”(以及导入的符号)导入所有全局符号到当前全局范围(与ES6不同,但与Solidity相反)。
import * as symbolName from "filename";

…创建一个新的全局符号symbolName,其成员都是来自“filename”的全局符号。
import {symbol1 as alias, symbol2} from "filename";

…创建新的全局符号alias和symbol2,分别从“filename”引用symbol1和symbol2。
另一种语法不是ES6的一部分,但可能很便于:
import "filename" as symbolName;

相当于import * as symbolName from "filename";
路径
在上文中,文件名始终被视为具有/作为目录分隔符的路径. .作为当前目录和..作为父目录。 当. 或..后跟一个字符,除了/,它不被认为是当前或父目录。 所有路径名称都被视为绝对路径,除非它们以当前的路径开头. 或父目录...
要从与当前文件相同的目录导入文件x,请使用导入“./x”作为x ;. 如果使用导入“x”作为x; 相反,可以引用不同的文件(在全局“包含目录”中)。
这取决于编译器(见下文)如何实际解析路径。 一般来说,目录层次结构不需要严格地映射到本地文件系统上,它也可以映射到通过例如文件发现的资源比如 ipfs,http或git。
在实际编译器中使用
当调用编译器时,不仅可以指定如何发现路径的第一个元素,而且可以指定路径前缀重新映射, github.com/ethereum/dapp-bin/library被重新映射到/usr/local/dapp-bin/library,编译器将从那里读取文件。 如果可以应用多重重新映射,则首先尝试使用最长密钥。 这允许一个“回退-重新映射”与例如 “”映射到“/usr/local/ include/solidity”。 此外,这些重新映射可以依赖于上下文,它允许您配置包导入例如 不同版本的同名库。
solc:
对于solc(命令行编译器),这些重新映射作为上下文提供:prefix = target参数,其中context和and = target部分都是可选的(在这种情况下,target默认为前缀)。 所有重新映射的值都是常规文件(包括它们的依赖项)。 这个机制是完全向后兼容的(只要没有文件名包含=或:),因此不会发生变化。 导入以前缀开头的文件的目录上下文文件中的所有导入将通过将目标替换为前缀来重定向。
例如,如果您将本地github.com/ethereum/dapp-bin/克隆到/usr/local/ dapp-bin,则可以在源文件中使用以下内容:
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的模块。 在/usr/local/ dapp-bin_old中检出旧版本的dapp-bin,然后可以使用
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中的所有导入都指向旧版本,但是在module1中导入获取新版本。
请注意,solc仅允许您包含某些目录中的文件:它们必须位于显式指定的源文件之一或重映射目标的目录(或子目录)中的目录(或子目录)中。 如果要允许直接绝对包含,只需添加重新映射=/。
如果存在导致有效文件的多个重新映射,则选择具有最长公共前缀的重映射。
Remix:
Remix为github提供自动重新映射,并且还可以通过网络自动检索文件:您可以通过例如导入迭代映射。
import "github.com/ethereum/dapp-bin/library/iterable_mapping.sol" as it_mapping;

其他源代码提供者可能会在将来被添加。
注释
单行注释(//)和多行注释(/.../)是可行的。
// 单行注释.

/*
多行注释
*/

另外还有另一种类型的评论叫做natspec注释,文档还没有被写入。 它们是用三斜杠(///)或双星号块(/ * … /)编写的,它们应该直接在函数声明或语句上方使用。 您可以在这些注释中使用Doxygen风格的标签来记录功能,注释条件以进行正式验证,并提供确认文本,当用户尝试调用功能时,该文本将显示给用户。
在下面的例子中,我们记录了合同的标题,两个输入参数的说明和两个返回的值。
pragma solidity ^0.4.0;

/* @title Shape calculator. /
contract shapeCalculator {

/** @dev Calculates a rectangle's surface and perimeter.* @param w Width of the rectangle.* @param h Height of the rectangle.* @return s The calculated surface.* @return p The calculated perimeter.*/
function rectangle(uint w, uint h) returns (uint s, uint p) {s = w * h;p = 2 * (w + h);
}

}

【Solidity】1.一个Solidity源文件的布局 - 深入理解Solidity相关推荐

  1. 【Solidity】1.一个Solidity源文件的布局 - 深入理解Solidity 1

    索引 [Solidity]1.一个Solidity源文件的布局 [Solidity]2.合约的结构体 [Solidity]3.类型 [Solidity]4.单位和全局可变量 [Solidity]5.表 ...

  2. 用Solidity写一个网上购物智能合约

    学校期末web作业,要实现一个简单的网上购书平台,写到一半的时候发现支付这一块可以借助智能合约来完成.虽然接触过一点区块链的知识,但还没有动手写过智能合约,于是匆忙学习了一下Solidity和Smar ...

  3. 【Solidity】3.类型 - 深入理解Solidity

    索引 [Solidity]1.一个Solidity源文件的布局 [Solidity]2.合约的结构体 [Solidity]3.类型 [Solidity]4.单位和全局可变量 [Solidity]5.表 ...

  4. 【Solidity】5.表达式和控制结构 - 深入理解Solidity

    索引 [Solidity]1.一个Solidity源文件的布局 [Solidity]2.合约的结构体 [Solidity]3.类型 [Solidity]4.单位和全局可变量 [Solidity]5.表 ...

  5. 【Solidity】8. 杂项 - 深入理解Solidity

    索引 [Solidity]1.一个Solidity源文件的布局 [Solidity]2.合约的结构体 [Solidity]3.类型 [Solidity]4.单位和全局可变量 [Solidity]5.表 ...

  6. 【Solidity】6. 合约 - 深入理解Solidity

    索引 [Solidity]1.一个Solidity源文件的布局 [Solidity]2.合约的结构体 [Solidity]3.类型 [Solidity]4.单位和全局可变量 [Solidity]5.表 ...

  7. 【 Linux 】创建一个文件夹并在此文件下创建一个c源文件

    我们需要单独创建一个文件夹来存放自己的文件,例如存放使用vim编写的c源文件,或者一个工程内的所有东西. 我们以在Linux下的home文件夹下创建一个vim文件夹,然后在此文件夹下创建一个c源文件, ...

  8. eclipse新建一个java_Eclipse中新建一个java源文件的步骤

    [简答题]请根据第六次讨论题目进行讨论.并将你的讨论回答的ppt传到此处. [简答题]P152页,习题9 一.二(2,3).请将回答的word文档上传到此处. [简答题]第五次讨论:讨论题目参见课程网 ...

  9. jQuery Masonry 一个 jQuery动态网格布局的插件

    jQuery Masonry 是一个 jQuery动态网格布局的插件. 每个元素都是漂浮在固定的网格布局上面,就像一枚图钉定在墙上一样. 我们发现以下的15网站使用jQuery Masonry的范例. ...

最新文章

  1. Java:基础面试题
  2. Tool之curl:curl的简介、安装、使用方法之详细攻略
  3. tomcat 虚拟路径 与 虚拟主机配置
  4. (39)FPGA面试技能提升篇(nandflash接口)
  5. linux命令逻辑运算:与、或、非、异或
  6. (C语言)最长公共子串
  7. cni k8s 插件安装_使用kind来快速部署k8s环境
  8. 计算机组成原理中EMAR是什么,计算机组成原理复习资料+试题
  9. XSS CSRF 攻击
  10. MySQL-(1)查看用户权限、(2)用户授权、(3)删除用户权限 语法格式总结
  11. 编写技术解决方案思路
  12. win10系统的qq无网络连接网络连接到服务器,Win10能上qq打不开网页_Win10能上qq不能上网怎么办?-192路由网...
  13. 淘宝评论爬虫python
  14. 今天正式开始做毕业设计——自助装机系统
  15. 知云文献翻的一些使用
  16. Docker 图片水印中文乱码显示为方框, 设置Docker容器字体
  17. python复习。知识点小记
  18. 基于SVPWM的两电平逆变器MATLAB仿真模型 仿真搭建的很有条理
  19. python花瓣图_【爬虫】花瓣图片爬虫,Python图片采集下载源码
  20. 实现免密登录,设置只允许student1, student2用户登录,get和post的区别,HTTP状态码,HTTP请求报文和响应报文,HTTP是如何保持连接状态的

热门文章

  1. ML的BD框架-Hadoop.Mahout.Strom.Spark/GraphLab
  2. Spark的协同过滤.Vs.Hadoop MR
  3. html 文件上传框 input标签
  4. java版b2b2c社交电商spring cloud分布式微服务:服务消费(Ribbon)
  5. 8月第4周国内IT网站/频道Top15:太平洋降至第三
  6. 哈士奇与阿拉斯加雪橇犬的区别
  7. Mac OS X snow leopard 10.6 VMware安装
  8. sqoop把mysql数据导入hbase-完整记录
  9. Django的静态文件路径设置对比
  10. Difference of Deep linear/ no linear neural networks