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.) 会编译且立即执行一个脚本。这是一个节省时间的方式,以便您编写一些代码并且自动执行脚本去设置合约状态 - 从而您可以快速理解代码是怎么工作的。(更多关于编译且执行脚本)

编译错误和警告

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

解决报告中的问题很重要,即使编译器并没有抱怨。(更多关于静态分析)

高级编译配置

点击高级编译配置会打开如下面板 (见下图2中的M.)。

这里有一个单选按钮可以选择通过交互界面配置编译器 (见图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.) 打开一个对话框,输入自定义编译器的链接。