安装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@4
和 brew 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
由以下人员提供的实用程序 sha3sum 或 keccak256() 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.js
和list.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++库。 |
用于检索源代码的命令行工具。 |
|
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版本安装以下依赖项:
软件 |
笔记 |
---|---|
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
请注意,后一个命令将安装 boost
和 cmake
到 deps
子目录,而前一个命令将尝试全局安装依赖项。
克隆存储库
要克隆源代码,请执行以下命令:
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.DD
或nightly.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
说明符。
例子:
发布了0.4.0版本。
从现在开始,每晚的构建版本都是0.4.1。
引入了非中断性更改-->不更改版本。
引入了一个突破性的变化-->版本升级到0.5.0。
发布了0.5.0版本。
这种行为与 version pragma .