文章目录
-
- 版本管理
- [Remix 编译器](#Remix 编译器)
- 其他安装方式
-
- [1. 使用 npm / Node.js 安装](#1. 使用 npm / Node.js 安装)
- [2. 使用 Docker 安装](#2. 使用 Docker 安装)
-
-
- [在本机编译 Solidity 文件](#在本机编译 Solidity 文件)
- [使用标准 JSON 接口(推荐)](#使用标准 JSON 接口(推荐))
-
- [3. 使用 Linux 包管理器安装](#3. 使用 Linux 包管理器安装)
-
-
- [Ubuntu(PPA 源)](#Ubuntu(PPA 源))
- [Arch Linux](#Arch Linux)
- [Snap 包(不推荐)](#Snap 包(不推荐))
-
- [4. macOS 上的 Solidity 安装](#4. macOS 上的 Solidity 安装)
- [4.1 通过 Homebrew 安装](#4.1 通过 Homebrew 安装)
-
- [4.2 安装旧版本(0.4.x / 0.5.x)](#4.2 安装旧版本(0.4.x / 0.5.x))
- [4.3 安装特定版本](#4.3 安装特定版本)
- [5. Solidity 静态二进制文件](#5. Solidity 静态二进制文件)
- [6. 从源码构建编译器](#6. 从源码构建编译器)

版本管理
Solidity 版本遵循 语义化版本控制(Semantic Versioning)。此外,在主版本号为 0(即 0.x.y)的情况下,补丁级别的发布不会引入破坏性更改。这意味着可以预期使用版本 0.x.y 编译的代码,在 0.x.z(z > y)的情况下仍然可以编译。
除了正式发布的版本,官方还提供每夜构建版本(nightly builds),让开发者能够提前尝试新功能并提供反馈。不过,这些每夜构建包含开发分支中的最新代码,并不保证始终可用,这些版本可能包含未记录或已损坏的更改,最终可能不会出现在正式版本中。因此,每夜构建版本不适用于生产环境。
在部署合约时,建议使用最新发布的 Solidity 版本。因为 Solidity 仍在快速发展,新版本会定期引入破坏性更改、新功能和错误修复。目前 Solidity 仍使用 0.x 版本号来反映这一快速变化。
Remix 编译器
对于小型合约 和快速学习 Solidity ,推荐使用 Remix。
我们可以直接在线访问 Remix,无需安装任何软件。如果希望在离线环境 下使用 Remix,可以访问 Remix 离线版本 并按照页面上的说明进行操作。
Remix 也是测试每夜构建版本的便捷选项,且无需安装多个 Solidity 版本。
其他安装方式
1. 使用 npm / Node.js 安装
如果想要一种便捷且可移植 的方式来安装 Solidity 编译器,可以使用 npm 安装 solcjs
:
bash
npm install --global solc
注意 :
1.安装后,命令行可执行文件名称是 solcjs
,而不是 solc
。
2.solcjs
与 solc
不兼容 ,其命令行选项不同,因此一些工具(如 geth
)无法与 solcjs
兼容。
3.solc-js
是从 C++ 版本的 solc
通过 Emscripten 转译得到的,两者使用相同的编译器源码。
4.solc-js
适用于 JavaScript 项目(例如 Remix)。
5.更多信息可参考 solc-js 仓库:
bash
https://github.com/ethereum/solc-js
2. 使用 Docker 安装
Solidity 编译器的 Docker 镜像可以从 ethereum/solc
获取。
要使用最新稳定版,可以运行以下命令:
bash
docker run ethereum/solc:stable --help
注意 :
1.可以使用特定版本 的 Docker 镜像,例如 ethereum/solc:0.8.23
。
2.建议使用 stable
标签,以确保获取的是最新的稳定版本,避免使用过时的版本。
使用 Docker 进行 Solidity 编译可以有以下两种方式。
在本机编译 Solidity 文件
可以通过挂载本地文件夹的方式,使用 Docker 进行 Solidity 编译,例如:
bash
docker run \
--volume "/tmp/some/local/path/:/sources/" \
ethereum/solc:stable \
/sources/Contract.sol \
--abi \
--bin \
--output-dir /sources/output/
使用标准 JSON 接口(推荐)
在工具链中使用 Solidity 编译器时,使用 JSON 接口:
bash
docker run ethereum/solc:stable --standard-json < input.json > output.json
这样可以避免挂载本地目录,只要 JSON 输入是自包含的(不依赖外部文件)。
3. 使用 Linux 包管理器安装
可以在 Solidity 官方发布页下载二进制文件
bash
https://github.com/ethereum/solidity/releases
Ubuntu(PPA 源)
要安装最新稳定版本的 solc
,可以运行:
bash
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
要安装每夜构建版本(开发版),可以运行:
bash
sudo add-apt-repository ppa:ethereum/ethereum
sudo add-apt-repository ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install solc
注意 :某些 Linux 发行版维护了自己的 Solidity 包,这些包通常由维护者保持更新,但不是官方维护的。
Arch Linux
Arch Linux 的 AUR(Arch User Repository)提供了两个 Solidity 相关的包:
solidity
(开发版)solidity-bin
(二进制版本)
注意 :AUR 包是用户贡献的非官方包,请谨慎使用。
Snap 包(不推荐)
目前 Solidity 提供了 solc
的 Snap 包,但该 Snap 包未被维护。
可以运行:
bash
sudo snap install solc
要安装最新的开发版,可以运行:
bash
sudo snap install solc --edge
注意 :Snap 使用**严格封闭(strict confinement)**模式,这种模式虽然更安全,但存在一些限制,比如只能访问 /home
和 /media
目录。
更多信息请参考 Snap 官方文档:
bash
https://snapcraft.io/docs/security-policy-and-sandboxing
4. macOS 上的 Solidity 安装
我们通过 Homebrew 分发 Solidity 编译器,目前仅支持从源代码构建 ,不提供预编译的二进制文件(bottles)。
4.1 通过 Homebrew 安装
更新 Homebrew:
bash
brew update
brew upgrade
然后添加 Ethereum 的 Homebrew 仓库并安装 Solidity:
bash
brew tap ethereum/ethereum
brew install solidity
// 如果需要安装旧版本或特定版本 则阅读 4.2 和 4.3 的内容,否则跳过。
4.2 安装旧版本(0.4.x / 0.5.x)
如果你需要 Solidity 0.4.x 或 0.5.x 版本,可以使用以下命令:
bash
brew install solidity@4 # 安装 0.4.x 版本
brew install solidity@5 # 安装 0.5.x 版本
4.3 安装特定版本
如果你需要特定版本的 Solidity,可以直接从 GitHub 下载 Homebrew 配方(Formula)。
步骤如下
1.查看 Solidity 版本历史
在 GitHub 上查看 [solidity.rb
] 的提交记录,找到你需要的版本的提交哈希值(commit hash)。
bash
https://github.com/ethereum/homebrew-ethereum/commits/master
2.克隆 Homebrew Ethereum 仓库并切换到指定版本
bash
git clone https://github.com/ethereum/homebrew-ethereum.git
cd homebrew-ethereum
git checkout <你的提交哈希值>
3.安装特定版本
bash
brew unlink solidity # 先卸载当前版本
brew install solidity.rb # 安装特定版本
5. Solidity 静态二进制文件
官方维护了一个静态编译版本存储库solc-bin:
bash
https://binaries.soliditylang.org
其中包含所有支持的平台的历史版本和当前版本编译器。该存储库也提供每夜构建版本(nightly builds)。
特点
1.直接下载可用,无需额外安装或解压(部分旧版 Windows 需要 DLL 文件)。
2.支持第三方工具,内容通过 https://binaries.soliditylang.org
镜像,支持 HTTP 和 HTTPS。
3.高向后兼容性,文件一旦添加不会删除或移动,除非是损坏文件。
4.提供多种下载方式:
- HTTPS 下载:
https://binaries.soliditylang.org/
- IPFS 下载,实现去中心化存储,如
dweb:/ipfs/QmTLs5MuLEWXQkths41HiACoXDiH8zxyqBHGFDRSzVE5CS
示例:获取 Solidity 0.7.4 版本的二进制文件
json
{
"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": [
"dweb:/ipfs/QmTLs5MuLEWXQkths41HiACoXDiH8zxyqBHGFDRSzVE5CS"
]
}
说明
1.下载地址为:
bash
https://binaries.soliditylang.org/emscripten-wasm32/solc-emscripten-wasm32-v0.7.4+commit.3f05b770.js
2.通过 keccak256
或 sha256
哈希值校验文件完整性:
bash
keccak256sum solc-emscripten-wasm32-v0.7.4+commit.3f05b770.js
sha256sum solc-emscripten-wasm32-v0.7.4+commit.3f05b770.js
避免使用以下过时路径:
bin/
目录:应使用emscripten-wasm32/
(WebAssembly 性能更佳)。wasm/
目录:应使用emscripten-asmjs/
或emscripten-wasm32/
。list.js
和list.txt
:应使用list.json
获取完整信息。
同时,https://ethereum.github.io/solc-bin/ 站点已停止更新。该站点在 Solidity 0.7.2 版本后停止维护,不再提供新版本或每夜构建。可以使用 https://binaries.soliditylang.org
6. 从源码构建编译器
安装教程:
bash
https://docs.soliditylang.org/en/latest/installing-solidity.html#building-from-source