如何通过静态二进制和 Linux 包安装 Solidity 编译器

420 阅读6分钟

在这个关于安装 Solidity 编译器的最后结论部分,我们将通过两种方法,静态二进制/预编译 Solidity 编译器的安装,以及 Linux 包的安装。

我们将遵循这两种相当简单和快速的方法的概要步骤,之后,对我们在所有四篇文章中的所有方法做一个概述。

预编译的Solidity编译器/静态二进制文件

在以前的文章中,我们已经展示了如何在能够运行Solidity编译器之前设置我们的环境。

然而,在这里我们只需下载编译器的静态二进制文件,或简而言之,二进制文件,并简单地运行它,不需要任何额外的先决条件或准备工作。

具体步骤是

首先,下载文件 [solc-static-linux](https://github.com/ethereum/solidity/releases)并给它一个可执行的权限。

$ cd ~ && wget https://github.com/ethereum/solidity/releases/download/v0.8.16/solc-static-linux
$ chmod +x ~/solc-static-linux

第二,运行solc

$ ~/solc-static-linux 1_Storage.sol -o output – abi – bin
Compiler run successful. Artifact(s) can be found in directory "output".

当检查我们的solidity_src 目录时,我们会发现一个新的目录输出,由 Solidity 编译器创建,包含.abi.bin 两个文件。

信息:要下载夜间构建版本而不是最新的稳定版本,请将步骤1中的存储库ppa:ethereum/ethereum 。用ppa:ethereum/ethereum-dev

除了简单之外,使用二进制文件的其他一些优点是。

  • 有可能在所有支持的平台上获得过去和当前编译器版本的静态构建。
  • 使用存储库可以通过Linux软件包友好地访问二进制文件。
  • 二进制文件可以以最简单的形式下载(无需登录,使用本地安装的版本管理工具,例如:git ),从在线资源库中下载,网址为 https://github.com/ethereum/solidity/.官方文档指向 https://binaries.soliditylang.org,但在写这篇文章的时候,它并不包含任何可下载的内容。
  • 二进制文件对在浏览器中运行的工具是可用的,可以直接加载。
  • 较新版本的二进制文件不需要任何形式的安装或解包;这条规则有一些例外,但只在一些较旧的版本和Windows环境下。
  • 静态二进制文件被持续地保存在在线资源库中,并且是持久的。
  • 仓库内容在HTTP和HTTPS协议中都是可用的。

由于构建过程的重组,在检索内容(静态二进制文件和附带的内容)库时,我们应该考虑到一些警告和建议。

  • 从性能上讲,emscripten-wasm32/bin/ 更加可取;在 0.6.2 版本中,Solidity 编译器的作者改用 WebAssembly 构建,性能明显提高。
  • 使用emscripten-asmjs/emscripten-wasm32/ 代替bin/wasm/ ,以消除下载是wasm 还是 asm.js 二进制的任何歧义。
  • 我们应该选择list.json ,而不是list.jslist.txt ,因为list.json 包含了所有的旧信息和新信息的扩展。

Linux软件包的安装

Linux软件包的安装是一个非常简单的过程;我们只需要几个步骤就可以完成。

  1. 将软件库添加到我们的软件库列表中。
$ sudo add-apt-repository ppa:ethereum/ethereum
  1. 更新软件包列表并安装solc
$ sudo apt update && sudo apt install -y solc
  1. 现在只要运行 Solidity 编译器即可。
$ solc ~/solidity_src/1_Storage.sol – abi – bin -o ~/solidity_src/output
Compiler run successful. Artifact(s) can be found in directory "~/solidity_src/output".

信息: 如果我们想使用夜间构建而不是最新的稳定版本,我们应该将软件库条目改为ethereum/ethereum-dev

编译器安装方法概述

既然使用静态二进制文件的方法看起来比安装Node.js(对于solc-js )或Docker(对于solc )的方法简单明了,我们可能会问自己,这是怎么回事?为什么我们不每次都用静态二进制方法呢?

答案是,是的,我们可能会采取这种更简单的方式--但在短期内更简单。

然而,除了在我们的系统中缺少Node.jsDocker时做额外的安装工作的明显缺点外,这里还有几个关于使用不同方法的观点。

使用npm的基于浏览器的开发环境

例如,solc-js ,可以在浏览器内运行,如果我们的目标是做一个纯浏览器的开发环境,这是一个巨大的优势。

请记住,当我们谈到Emscripten、LLVM和WebAssembly的时候,能够在浏览器中编译和运行是一件非常重要的事情

使用Docker的便携式DApps

同样,Docker为我们提供了一种宝贵的可能性,即拥有可移植的应用程序,只需运行容器(实例化镜像)就可以使用。

它消除了应用程序在一个环境中运行良好,但在另一个环境中却顽固地拒绝运行的麻烦。

此外,它使我们能够在不破坏其他依赖关系的情况下进行实验,因为运行Docker镜像所需的一切都被整齐地容器化,没有任何干扰其他软件依赖关系的可能性。

简单而快速的Linux安装

Linux包的安装非常简单和快速,但它直接部署到环境中。

根据我们使用的环境,这可能不是一个受欢迎的方法。

  • 如果是一个正在做大量实验的环境,库被安装和删除,我们的环境迟早会变得不稳定或完全无法使用。
  • 另一方面,如果它是一个专门的、稳定的环境,并且我们满足于通过偶尔的升级来获得Solidity编译器的最新稳定版本,这就是要走的路。

使用源代码安装的完全控制

在非虚拟化环境中从源代码编译 Solidity 编译器,除了版本选择编译时间/资源这两个重要特性外,其利弊与 Linux 包安装非常相似。

在从Git仓库中选择和编译特定版本的Solidity编译器源码时,我们肯定有绝对的控制权,这可能是一个需要和欢迎的特性。

例如,我们可以下载一个特定的版本并进行实验,合理地改变代码,并拥有我们自己的、独特的 Solidity 编译器版本。

另一方面,编译 Solidity 源代码(以及它的一些要求,如 z3)需要更多的时间和系统资源。

然而,考虑到编译 Solidity 编译器不是我们每天都做的事情,如果我们发现自己处于需要这种方法的情况下,我们可以遵循它,并拥有我们自己的、自家编译的 Solidity 编译器。

除此之外,我们有理由期待,相对于预先构建的、现成的Docker镜像和静态二进制文件而言,编译结果将为我们的机器在性能方面进行优化。

总结

在这篇文章中,我们对Solidity安装的四篇文章进行了最后的润色。

以最简单的安装方法,即预编译的Solidity编译器/静态二进制文件安装(同义词)和Linux软件包安装结束,我们对所有四篇文章中的所有方法做了一个广泛的概述。

首先,我们探究了如何偷渡和隐藏Solidity编译器的静态二进制文件。这是迄今为止最简单的方法,但它有其怪异之处。

第二,我们发货并耐心等待我们的Linux软件包下载。你已经知道,我是在开玩笑;Solidity编译器的Linux软件包安装完成得非常快,一切都为我们设置好了,就像这样。我们甚至成功地避开了可怕的依赖性地狱!

在我们的大结局中,我们阐述了所有方法的特点:我们剖析了每一种方法的优点和缺点,赞扬了它们的优点,也善待了它们的缺点。但最重要的是,我们学到了很多东西,并且在做这些实验时很开心。

我个人对Solidity编译器安装的偏爱

在文章的实际结束时,如果你要问我为自己采取哪种方法,我建议如下。

对于简单的实验和学习目的,采取静态二进制的 Solidity 编译器。它将为您提供良好的服务。

对于一个更复杂的环境,你很乐意不搞砸任何事情,请使用Solidity编译器的Docker镜像。然而,也要了解除运行之外的其他docker命令,如stop、start、ps -a、exec -it,以便与容器进行交互和事后清理。为什么呢?因为每次编译都要运行一个新的容器,很容易使你的机器变得混乱。

要想在Linux上用快速和通常的方法进行软件管理,请使用Linux软件包安装。它很少出乱子,而且出乱子的时候也是可以修复的,但是要限制自己不要做太多的实验。

对于那些喜欢用困难的方式做事情并弄脏自己的手的古怪灵魂(就像你一样),可以通过源码编译来安装Solidity编译器。为了希望你感到气馁,我甚至破例把我的机器在诞生Solidity编译器的那1小时45分钟里所遭受的痛苦的图片扔进去。