使用编译器——Solidity中文文档(8)

本文档介绍了如何使用Solidity的命令行编译器solc,包括如何生成不同类型的输出,如二进制文件、汇编文件和AST。强调了在部署合约前启用optimizer的重要性,并解释了import语句的路径处理、library的链接方法以及编译器输入输出的JSON格式。编译器限制了可访问的目录,并允许通过--allow-paths选项配置额外路径。
摘要由CSDN通过智能技术生成

image

写在前面:HiBlock区块链社区成立了翻译小组,翻译区块链相关的技术文档及资料,本文为Solidity文档翻译的第八部分《使用编译器》,特发布出来邀请solidity爱好者、开发者做公开的审校,您可以添加微信baobaotalk_com,验证输入“solidity”,然后将您的意见和建议发送给我们,也可以在文末“留言”区留言,有效的建议我们会采纳及合并进下一版本,同时将送一份小礼物给您以示感谢。

1

使用命令行编译器

image

solc 是 Solidity 源码库的构建目标之一,它是 Solidity 的命令行编译器。你可使用 solc –help命令来查看它的所有选项的解释。该编译器可以生成各种输出,范围从简单的二进制文件、汇编文件到用于估计“gas”使用情况的抽象语法树(解析树)。如果你只想编译一个文件,你可以运行 solc –bin sourceFile.sol 来生成二进制文件。如果你想通过 solc 获得一些更高级的输出信息,可以通过 solc -o outputDirectory –bin –ast –asm sourceFile.sol 命令将所有的输出都保存到一个单独的文件夹中。

Before you deploy your contract, activate the optimizer while compiling using solc –optimize –bin sourceFile.sol. By default, the optimizer will optimize the contract for 200 runs. If you want to optimize for initial contract deployment and get the smallest output, set it to –runs=1. If you expect many transactions and don’t care for higher deployment cost and output size, set –runs to a high number.

命令行编译器会自动从文件系统中读取并导入的文件,但同时,它也支持通过 prefix=path 选项将路径重定向。比如:

image

这实质上是告诉编译器去搜索 /usr/local/lib/dapp-bin 目录下的所有以 github.com/ethereum/dapp-bin/ 开头的文件,如果编译器找不到这样的文件,它会接着读取 /usr/local/lib/fallback 目录下的所有文件(空前缀意味着始终匹配)。solc 不会从位于重定向目标之外和显式指定的源文件所在目录之外的文件系统读取文件,所以,类似 import “/etc/passwd”; 这样的语句,编译器只会在你添加了 =/ 选项之后,才会尝试到根目录下加载 /etc/passwd 文件。

如果重定向路径下存在多个匹配,则选择具有最长公共前缀的那个匹配。

出于安全原因,编译器限制了它可以访问的目录。在命令行中指定的源文件的路径(及其子目录)和通过重定向定义的路径可用于 import 语句,其他的则会被拒绝。额外路径(及其子目录)可以通过 –allow-paths /sample/path,/another/sample/path 进行配置。

如果您的合约使用 libraries ,您会注意到在编译后的十六进制字节码中会包含形如 LibraryName__ 的字符串。当您将 solc 作为链接器使用时,它会在下列情况中为你插入库的地址:要么在命令行中添加 –libraries “Math:0x12345678901234567890 Heap:0xabcdef0123456” 来为每个库提供地址,或者将这些字符串保存到一个文件中(每行一个库),并使用 –libraries fileName 参数。

如果在调用 solc 命令时使用了 –link 选项,则所有的输入文件会被解析为上面提到过的LibraryName__ 格式的未链接的二进制数据(十六进制编码),并且就地链接。(如果输入是从stdin读取的,则生成的数据会被写入stdout)。在这种情况下,除了 –libraries 外的其他选项(包括 -o )都会被忽略。

如果在调用 solc 命令时使用了 –standard-json 选项,它将会按JSON格式解析标准输入上的输入,并在标准输出上返回JSON格式的输出。

2

编译器输入输出JSON描述

下面展示的这些JSON格式是编译器API使用的,当然,在 solc 上也是可用的。有些字段是可选的(参见注释),并且它们可能会发生变化,但所有的变化都应该是后向兼容的。

编译器API需要JSON格式的输入,并以JSON格式输出编译结果。

注释是不允许的,这里仅用于解释目的。

输入说明

{
 // 必选: 源代码语言,比如“Solidity”,“serpent”,“lll”,“assembly”等
 language: "Solidity",
 // 必选
 sources:
 {
   // 这里的键值是源文件的“全局”名称,可以通过remappings引入其他文件(参考下文)
   "myFile.sol":
   {
     // 可选: 源文件的kaccak256哈希值,可用于校验通过URL加载的内容。
     "keccak256": "0x123...",
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值