安装Solidity编译器

版本

随后是Solidity版本 semantic versioning 除了发布外, 夜间开发构建 也可提供。虽然尽了最大努力,但夜间构建并不能保证有效,它们可能包含未记录和/或中断的更改。我们建议使用最新版本。下面的程序包安装程序将使用最新版本。

Remix

我们建议使用 Remix 为小合同和 Solidity 快速学习。

Access Remix online 你不需要安装任何东西。如果您想在不连接互联网的情况下使用它,请访问https://github.com/ethereum/remix-live/tree/gh-pages并下载 .zip 如该页所述的文件。Remix也是一个方便的选项,可以在不安装多个solidity版本的情况下测试夜间构建。

本页的进一步选项详细介绍了如何在计算机上安装命令行Solidity编译器软件。如果正在处理较大的协定或需要更多的编译选项,请选择命令行编译器。

NPM/节点.js

使用 npm 方便便携的安装方式 solcjs ,一个Solidity编译器。这个 solcjs program has fewer features than the ways to access the compiler described further down this page. The 使用命令行编译器 documentation assumes you are using the full-featured compiler, solc. The usage of solcjs is documented inside its own repository .

注:SOLC JS项目是从C++中派生出来的 solc 通过使用emscripten,这意味着两者都使用相同的编译器源代码。 solc-js 可直接用于javascript项目(如remix)。有关说明,请参阅SOLCJS存储库。

npm install -g solc

注解

命令行可执行文件名为 solcjs .

的命令行选项 solcjs 与不兼容 solc 和工具(如 geth )期望的行为 solc 不与合作 solcjs .

Docker

可使用 solc 图像来自 ethereum 组织。使用 stable 最新发布版本的标签,以及 nightly 对于开发分支中可能不稳定的更改。

Docker映像运行编译器可执行文件,因此可以将所有编译器参数传递给它。例如,下面的命令将 solc 映像(如果您还没有它),并在新容器中运行它,通过 --help 参数。

docker run ethereum/solc:stable --help

您还可以在标记中指定版本构建版本,例如,对于0.5.4版本。

docker run ethereum/solc:0.5.4 --help

要使用Docker映像在主机上编译solidity文件,请装入本地文件夹进行输入和输出,并指定要编译的合同。例如。

docker run -v /local/path:/sources ethereum/solc:stable -o /sources/output --abi --bin /sources/Contract.sol

您还可以使用标准的JSON接口(当将编译器与工具一起使用时,建议使用该接口)。使用此接口时,只要JSON输入是自包含的(即,它不引用任何必须 loaded by the import callback )。

docker run ethereum/solc:stable --standard-json < input.json > output.json

Linux软件包

可在 solidity/releases .

我们还有针对Ubuntu的ppas,您可以使用以下命令获得最新的稳定版本:

sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc

可以使用以下命令安装夜间版本:

sudo add-apt-repository ppa:ethereum/ethereum
sudo add-apt-repository ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install solc

我们还发布了 snap package 可安装在所有 supported Linux distros .要安装最新稳定版本的SOLC:

sudo snap install solc

如果要帮助测试最新开发版本的solidity和最新更改,请使用以下内容:

sudo snap install solc --edge

注解

这个 solc snap使用严格的限制。这是snap软件包最安全的模式,但也有一些限制,比如只访问 /home/media 目录。有关详细信息,请访问 Demystifying Snap Confinement .

arch linux也有软件包,但仅限于最新的开发版本:

pacman -S solidity

Gentoo Linux有一个 Ethereum overlay 里面有一个坚固的包裹。在建立覆盖之后, solc 可以通过以下方式安装在x86_64体系结构中:

emerge dev-lang/solidity

MacOS软件包

我们通过自制将solidity编译器作为源代码版本发布。目前不支持预制瓶。

brew update
brew upgrade
brew tap ethereum/ethereum
brew install solidity

要安装最新的0.4.x/0.5.x版本的Solidity,还可以使用 brew install solidity@4brew install solidity@5 ,分别。

如果需要特定版本的solidity,可以直接从github安装自制公式。

视图 solidity.rb commits on Github .

复制所需版本的提交哈希并在计算机上检查。

git clone https://github.com/ethereum/homebrew-ethereum.git
cd homebrew-ethereum
git checkout <your-hash-goes-here>

安装时使用 brew

brew unlink solidity
# eg. Install 0.4.8
brew install solidity.rb

静电二进制文件

我们在以下位置维护一个存储库,其中包含所有支持的平台的过去和当前编译器版本的静电版本 solc-bin 。这也是您可以找到夜间构建的位置。

该存储库不仅为最终用户提供开箱即用的二进制文件,而且还意味着它对第三方工具是友好的:

  • 内容被镜像到https://binaries.soliditylang.org,在那里可以很容易地通过HTTPS下载,而不需要任何身份验证、速率限制或使用GIT。

  • 内容以正确的方式送达 Content-Type 标头和宽松的CORS配置,以便可以由浏览器中运行的工具直接加载。

  • 二进制文件不需要安装或解包(与必要的DLL捆绑在一起的较旧的Windows版本除外)。

  • 我们努力实现高水平的向后兼容。添加文件后,如果不在旧位置提供符号链接/重定向,则不会删除或移动文件。它们也永远不会被就地修改,并且应该始终与原始校验和匹配。唯一的例外是损坏或不可用的文件,如果保持原样,这些文件可能造成的危害大于好处。

  • 文件通过HTTP和HTTPS提供。只要您以安全的方式获取文件列表(通过GIT、HTTPS、IPFS或只是将其缓存在本地),并在下载后验证二进制文件的散列,您就不必对二进制文件本身使用HTTPS。

在大多数情况下,相同的二进制文件可在 Solidity release page on Github 。不同之处在于,我们通常不会在Github发布页面上更新旧版本。这意味着如果命名约定更改,我们不会重命名它们,也不会为发布时不支持的平台添加版本。这只会发生在 solc-bin

这个 solc-bin 存储库包含多个顶级目录,每个目录代表一个平台。每一个都包含一个 list.json 列出可用二进制文件的文件。例如,在 emscripten-wasm32/list.json 您将找到有关0.7.4版的以下信息:

{
  "path": "solc-emscripten-wasm32-v0.7.4+commit.3f05b770.js",
  "version": "0.7.4",
  "build": "commit.3f05b770",
  "longVersion": "0.7.4+commit.3f05b770",
  "keccak256": "0x300330ecd127756b824aa13e843cb1f43c473cb22eaf3750d5fb9c99279af8c3",
  "sha256": "0x2b55ed5fec4d9625b6c7b3ab1abd2b7fb7dd2a9c68543bf0323db2c7e2d55af2",
  "urls": [
    "bzzr://16c5f09109c793db99fe35f037c6092b061bd39260ee7a677c8a97f18c955ab1",
    "dweb:/ipfs/QmTLs5MuLEWXQkths41HiACoXDiH8zxyqBHGFDRSzVE5CS"
  ]
}

这意味着:

  • 您可以在同一目录中的名称下找到该二进制文件 solc-emscripten-wasm32-v0.7.4+commit.3f05b770.js 。请注意,该文件可能是符号链接,如果您没有使用git下载该文件,或者您的文件系统不支持符号链接,则需要自己解析它。

  • 二进制文件也会在https://binaries.soliditylang.org/emscripten-wasm32/solc-emscripten-wasm32-v0.7.4+commit.3f05b770.js.中镜像在这种情况下,git不是必需的,符号链接是透明解析的,要么提供文件副本,要么返回HTTP重定向。

  • 该文件也可在IPFS上找到,网址为 QmTLs5MuLEWXQkths41HiACoXDiH8zxyqBHGFDRSzVE5CS

  • 该文件将来可能会在以下地址的Ssphere上提供 16c5f09109c793db99fe35f037c6092b061bd39260ee7a677c8a97f18c955ab1

  • 您可以通过将二进制文件的keccak256散列与 0x300330ecd127756b824aa13e843cb1f43c473cb22eaf3750d5fb9c99279af8c3 。可以在命令行上使用以下命令计算哈希 keccak256sum 由以下人员提供的实用程序 sha3sumkeccak256() function from ethereumjs-util 用JavaScript编写。

  • 您还可以通过将二进制文件的sha256散列与 0x2b55ed5fec4d9625b6c7b3ab1abd2b7fb7dd2a9c68543bf0323db2c7e2d55af2

警告

由于强烈的向后兼容性要求,存储库包含一些遗留元素,但在编写新工具时应避免使用它们:

  • 使用 emscripten-wasm32/ (后退到 emscripten-asmjs/ )而不是 bin/ 如果你想要最好的表演。在0.6.1版之前,我们只提供asm.js二进制文件。从0.6.2开始,我们切换到 WebAssembly builds 性能要好得多。我们为wasm重新构建了旧版本,但原始asm.js文件仍保留在 bin/ 。新文件必须放在单独的目录中,以避免名称冲突。

  • 使用 emscripten-asmjs/emscripten-wasm32/ 而不是 bin/wasm/ 目录,如果您想确定下载的是wasm还是asm.js二进制文件。

  • 使用 list.json 而不是 list.jslist.txt 。JSON列表格式包含来自旧格式的所有信息以及更多信息。

  • 使用https://binaries.soliditylang.org而不是https://solc-bin.ethereum.org.为简单起见,我们将几乎所有与编译器相关的内容都移到了新的 soliditylang.org 域,这适用于 solc-bin 我也是。虽然建议使用新域,但旧域仍然完全受支持,并保证指向相同的位置。

警告

这些二进制文件也可以在https://ethereum.github.io/solc-bin/上获得,但是这个页面在0.7.2版本发布后立即停止更新,不会收到任何平台的任何新版本或夜间版本,也不会服务于新的目录结构,包括非Emscripten版本。

如果您正在使用它,请切换到https://binaries.soliditylang.org,,这是一种可以直接使用的替代品。这允许我们以透明的方式对底层主机进行更改,并将中断降至最低。与 ethereum.github.io 我们无法控制的域名, binaries.soliditylang.org 保证长期工作并保持相同的URL结构。

从源代码生成

先决条件-所有操作系统

以下是所有solidity构建的依赖项:

软件

笔记

CMake (版本3.13+)

跨平台生成文件生成器。

Boost (Windows上为1.77+版,其他情况下为1.65+版)

C++库。

Git

用于检索源代码的命令行工具。

z3 (版本4.8+,可选)

用于SMT检查器。

cvc4 (可选)

用于SMT检查器。

注解

0.5.10之前的Solidity版本可能无法与Boost 1.70+版本正确链接。可能的解决方法是临时重命名 <Boost install path>/lib/cmake/Boost-1.70.0 在运行cmake命令配置solidity之前。

从0.5.10开始,与Boost 1.70+的链接应该可以在没有手动干预的情况下工作。

注解

默认构建配置需要特定的Z3版本(上次更新代码时的最新版本)。在Z3版本之间引入的更改通常会导致返回的结果略有不同(但仍然有效)。我们的SMT测试没有考虑到这些差异,并且很可能会在使用与编写版本不同的版本时失败。这并不意味着使用不同版本的构建是错误的。如果你通过了 -DSTRICT_Z3_VERSION=OFF 选项添加到CMake,则可以使用满足上表中给出的要求的任何版本进行构建。但是,如果您这样做,请记住将 --no-smt 选项以执行以下操作 scripts/tests.sh 跳过SMT测试。

最低编译器版本

下面的C++编译器及其最小版本可以建立坚实的代码库:

  • GCC <https://gcc.gnu.org> _,版本8+

  • Clang <https://clang.llvm.org/> _,版本7+

  • MSVC <https://visualstudio.microsoft.com/vs/> _,2019版+

先决条件-MacOS

对于MacOS版本,请确保您拥有最新版本的 Xcode installed 。它包含 Clang C++ compiler ,即 Xcode IDE 以及在OS X上构建C++应用程序所需的其他Apple开发工具。如果您是第一次安装Xcode,或者刚刚安装了新版本,则在执行命令行构建之前,您需要同意许可证:

sudo xcodebuild -license accept

我们的OS X构建脚本使用 the Homebrew 用于安装外部依赖项的包管理器。以下是如何 uninstall Homebrew 如果你想从头开始。

先决条件-Windows

您需要为Solidity的Windows版本安装以下依赖项:

软件

笔记

Visual Studio 2019 Build Tools

C++编译程序

Visual Studio 2019 (可选)

C++编译器和DEV环境。

Boost (版本1.77+)

C++库。

如果您已经有了一个IDE并且只需要编译器和库,那么可以安装VisualStudio2019构建工具。

Visual Studio 2019同时提供IDE和必要的编译器和库。因此,如果您没有IDE并且更喜欢开发坚固性,Visual Studio 2019可能是您轻松设置一切的一个选择。

以下是应安装在Visual Studio 2019生成工具或Visual Studio 2019中的组件列表:

  • VisualStudioC++核心特性

  • VC++2019 v141工具集(x86,x64)

  • Windows通用CRT SDK

  • Windows 8.1软件开发工具包

  • C++/CLI支持

依赖项帮助程序脚本

我们有一个助手脚本,您可以使用它在MacOS、Windows和许多Linux发行版上安装所有必需的外部依赖项。

./scripts/install_deps.sh

或者,在Windows上:

scripts\install_deps.ps1

请注意,后一个命令将安装 boostcmakedeps 子目录,而前一个命令将尝试全局安装依赖项。

克隆存储库

要克隆源代码,请执行以下命令:

git clone --recursive https://github.com/ethereum/solidity.git
cd solidity

如果您想帮助开发Solidity,您应该将Solidity分叉,并将您的个人分叉添加为第二个遥控器:

git remote add personal git@github.com:[username]/solidity.git

注解

这种方法将导致预发布版本的生成,例如,在这样的编译器生成的每个字节码中设置一个标志。如果要重新构建已发布的Solidity编译器,请使用github发布页上的源tarball:

https://github.com/ethereum/solidity/releases/download/v0.X.Y/solidity_0.X.Y.tar.gz

(不是github提供的“源代码”)。

命令行生成

确保在生成之前安装外部依赖项(请参见上文)。

Solidity项目使用CMake来配置构建。您可能想要安装 ccache 以加快重复构建。CMake会自动取走它。在Linux、MacOS和其他Unices上构建坚固性非常相似:

mkdir build
cd build
cmake .. && make

或者在Linux和MacOS上更简单,您可以运行:

#note: this will install binaries solc and soltest at usr/local/bin
./scripts/build.sh

警告

BSD构建应该可以工作,但是没有经过Solidity团队的测试。

对于Windows:

mkdir build
cd build
cmake -G "Visual Studio 16 2019" ..

如果您要使用由安装的Boost版本 scripts\install_deps.ps1 ,您还需要通过 -DBoost_DIR="deps\boost\lib\cmake\Boost-*"-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded 作为调用的参数 cmake

这将导致 solidity.sln 在那个生成目录中。双击该文件应该会导致visualstudio启动。我们建议建造 释放 配置,但所有其他的工作。

或者,可以在命令行上为Windows生成,如下所示:

cmake --build . --config Release

CMake选项

如果您感兴趣,可以运行哪些cmake选项 cmake .. -LH .

SMT求解器

Solidity可以针对SMT解算器构建,如果在系统中找到它们,则默认情况下会这样做。每个解算器都可以通过 cmake 选择权。

注意:在某些情况下,这也可能是构建失败的潜在解决方案。

在build文件夹中,可以禁用它们,因为它们在默认情况下是启用的:

# disables only Z3 SMT Solver.
cmake .. -DUSE_Z3=OFF

# disables only CVC4 SMT Solver.
cmake .. -DUSE_CVC4=OFF

# disables both Z3 and CVC4
cmake .. -DUSE_CVC4=OFF -DUSE_Z3=OFF

详细的版本字符串

Solidity版本字符串包含四个部分:

  • 版本号

  • 预发布标签,通常设置为 develop.YYYY.MM.DDnightly.YYYY.MM.DD

  • 以的格式提交 commit.GITHASH

  • 平台,具有任意数量的项,包含有关平台和编译器的详细信息

如果存在本地修改,则将使用 .mod .

这些部分按照semver的要求进行组合,其中solidity pre-release标记等于semver pre-release,solidity commit和platform组合构成semver构建元数据。

发布示例: 0.4.8+commit.60cc1668.Emscripten.clang .

预发布示例: 0.4.9-nightly.2017.1.17+commit.6ecb4aa3.Emscripten.clang

有关版本控制的重要信息

在发布之后,补丁版本级别会被提升,因为我们假定只有补丁级别的更改才会发生。合并更改时,应根据semver和更改的严重性来缓冲版本。最后,发布总是使用当前夜间构建的版本,但不使用 prerelease 说明符。

例子:

  1. 发布了0.4.0版本。

  2. 从现在开始,每晚的构建版本都是0.4.1。

  3. 引入了非中断性更改-->不更改版本。

  4. 引入了一个突破性的变化-->版本升级到0.5.0。

  5. 发布了0.5.0版本。

这种行为与 version pragma .