Solidity 编译器

点击图标面板中的 Solidity 图标即可进入Solidity 编译器界面。界面中默认展示编译器的基础配置项。点击 高级配置 按钮即可打开高级配置面板 ( 见图1中的C )。有关高级特性的详情,请看下文。

Solidity 编译器基础

选择一个合约进行编译

在文件管理器中打开一个文件即可进行编译。如果打开了多个文件,请确保你想编译的文件在编辑器中处于选中状态。

如果编辑器中没有打开的文件,或者没有已编译的文件,那么 Solidity 编译器看起来会是这个样子:

触发编译

当你这么做的时候会触发编译:

  • 点击编译按钮 ( 下面图1中的D )

  • 使用快捷键 control + s

  • 在文件管理器中右键单击文件并选择 编译 选项

自动编译

如果自动编译复选框被选中 ( 见上图1中的B ) ,编译将每隔几秒 (当文件自动保存时) 以及选择另一个文件时进行。 如果合约具有很多依赖项,编译可能需要一些时间,因此您可以自行判断是否需要自动编译。

Solidity 版本 与 Remix 的功能

编译器 下拉列表中已经选中了一个编译器版本( 见上图1中的A )。

您可以编译(且部署) 比 0.4.12 更早 的 Solidity 版本的合约。但是这些更早的编译器使用了传统的抽象语法树,我们已经不再支持。因此,有些插件可能无法使用,有些功能比如编辑器语法高亮可能只有部分还能工作。

使用合约选项框

因为一个 Solidity 文件可以包含多个合约,且合约也可以引用其他合约,所以多个合约经常会被同时编译。 但是 ,一次只能获取一个合约的编译结果。

合约 选项框中( 见图1中的F ) 可以选择你想要的合约。忘记选择正确的合约是一种常见的错误 - 所以记得确认下您确实选中了您想要的那个合约。

编译细节和发布

使用发布按钮,您可以将您的合约上传到 IPFS 或者 Swarm (只有非抽象合约可以发布到 Swarm)。

当发布一个引用了其他合约的合约时,主合约和所有引用合约都会被发布,每一个都会有对应的地址。

** 发布的数据包含合约的元数据和 solidity 源码。 **

点击 在IPFS上发布在Swarm上发布 按钮后,会弹出一个窗口。这个窗口包含了合约地址和引用的合约的地址,还有合约 元数据 的地址。

点击 “Compilation Details” 按钮 ( 见图1中的G ),会弹出一个对话框展示包含当前选中合约详情信息。

如果你只想获取 ABIBytecode ,点击对应的按钮即可。 见图1中的H

被动合约验证

当你把你的元数据发布到 IPFS 并且部署你的代码到主网或公共测试网络,合约验证服务 Sourcify 将会验证你的合约,你将不需做任何事情。

编译且执行脚本

点击编译且执行脚本按钮 ( 见图1中的E ) 会编译且立即执行一个脚本。这是一个节省时间的方式,以便您编写一些代码并且自动执行脚本去设置合约状态,从而您可以快速理解代码是怎么工作的。(更多关于编译且执行脚本)

编译错误和警告

编译错误和警告展示在合约区域的下方。每次编译,静态分析选项卡都会生成一份报告。

即使编译器没有报错,解决已报告的问题也是很重要的。(更多关于静态分析)

高级编译配置

单击 “高级编译器配置 “将打开该面板(M见下图 2)。

这里有一个单选按钮可以选择通过交互界面配置编译器 ( 见图2中的N ) 还是用JSON 文件进行配置 ( 见图2中的R )。

Solidity 或 YUL

自 Solidity 0.5.7 版本后就可以编译 Yul 文件。请阅读(solidity 文档中关于 Yul 的内容),里面包含了代码示例。您可以在语言下拉框 ( 见图2中的O ) 中切换语言。 Yul 选项只对大于等于 0.5.7 版本的编译器有效。

选择 EVM 版本

EVM 下拉选框 ( 图2中的P ) 可以让您对特定的 以太坊硬分叉 版本进行编译。 compiler default 对应使用默认硬分叉版本作为给定版本。

查看当前编译结果中使用的硬分叉名,可点击 “Compilation Details” 按钮,在 Metadata 章节下有一个叫 settings 的子章节,打开 settings 章节就可以看到 EVM 版本名称。

启用优化

根据Solidity的文档,“优化器试图简化复杂的表达式,从而减少代码大小和执行成本,也就是说,它可以减少合约部署所需的gas,以及对该合约进行外部调用所需的gas。”

对于最近的Solidity版本,[建议启用优化](https://blog.soliditylang.org/2020/11/04/solidity-ama-1-recap/#why-do-you-thyou-people are generally suspensous-of-the-ye-they-they-to-be).

想要深入了解优化, ( 图2中的Q ) 可以访问 Solidity 文档中关于优化器的内容

启用优化 复选框右边的输入框可以输入优化次数。默认值是200 。

你可能会问 - “对于我的合约来说,正确的次数应该是多少?” Solidity 文档是这么说的:

如果你希望部署合约的时候油费便宜一点,且以后执行合约方法更贵一点,你可以设置 –optimize-runs=1 。如果你预料到这个合约以后会有很多交易,且并不在乎高昂的部署费用和输出尺寸,那就设置 –optimize-runs 为一个更高的值。

想了解更多关于优化次数的细节,请访问 Solidity 文档中关于优化器选项的内容

JSON 文件的编译器配置

选择 使用配置文件 旁边的单选按钮,您就可以用一个 JSON 文件 ( 见图二中的T ) 来进行配置。当您切换到 使用配置文件进行编译 ,一份编译器配置文件示例就会自动生成。这个文件可以编辑所有可用的选项。

点击配置文件名称会在编辑器中打开这个文件。点击 替换 按钮即可替换配置文件。如果你在输入框中输入了一个不存在的文件名称,一个包含了默认文件内容的新文件就会自动生成。

使用 .json 文件配置是不会有错误检测的,所以请确保您的配置文件是正确的。

使用自定义 Solidity 编译器

如果想使用自定义编译器,您可以点击 + 按钮 ( 见图一中的X ) 打开一个对话框,输入自定义编译器的链接。