文章目录
版本管理
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
:
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 仓库:
https://github.com/ethereum/solc-js
2. 使用 Docker 安装
Solidity 编译器的 Docker 镜像可以从 ethereum/solc
获取。
要使用最新稳定版,可以运行以下命令:
docker run ethereum/solc:stable --help
注意:
1.可以使用特定版本的 Docker 镜像,例如 ethereum/solc:0.8.23
。
2.建议使用 stable
标签,以确保获取的是最新的稳定版本,避免使用过时的版本。
使用 Docker 进行 Solidity 编译可以有以下两种方式。
在本机编译 Solidity 文件
可以通过挂载本地文件夹的方式,使用 Docker 进行 Solidity 编译,例如:
docker run \
--volume "/tmp/some/local/path/:/sources/" \
ethereum/solc:stable \
/sources/Contract.sol \
--abi \
--bin \
--output-dir /sources/output/
使用标准 JSON 接口(推荐)
在工具链中使用 Solidity 编译器时,使用 JSON 接口:
docker run ethereum/solc:stable --standard-json < input.json > output.json
这样可以避免挂载本地目录,只要 JSON 输入是自包含的(不依赖外部文件)。
3. 使用 Linux 包管理器安装
可以在 Solidity 官方发布页下载二进制文件
https://github.com/ethereum/solidity/releases
Ubuntu(PPA 源)
要安装最新稳定版本的 solc
,可以运行:
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
注意:某些 Linux 发行版维护了自己的 Solidity 包,这些包通常由维护者保持更新,但不是官方维护的。
Arch Linux
Arch Linux 的 AUR(Arch User Repository)提供了两个 Solidity 相关的包:
solidity
(开发版)solidity-bin
(二进制版本)
注意:AUR 包是用户贡献的非官方包,请谨慎使用。
Snap 包(不推荐)
目前 Solidity 提供了 solc
的 Snap 包,但该 Snap 包未被维护。
可以运行:
sudo snap install solc
要安装最新的开发版,可以运行:
sudo snap install solc --edge
注意:Snap 使用**严格封闭(strict confinement)**模式,这种模式虽然更安全,但存在一些限制,比如只能访问 /home
和 /media
目录。
更多信息请参考 Snap 官方文档:
https://snapcraft.io/docs/security-policy-and-sandboxing
4. macOS 上的 Solidity 安装
我们通过 Homebrew 分发 Solidity 编译器,目前仅支持从源代码构建,不提供预编译的二进制文件(bottles)。
4.1 通过 Homebrew 安装
更新 Homebrew:
brew update
brew upgrade
然后添加 Ethereum 的 Homebrew 仓库并安装 Solidity:
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 版本,可以使用以下命令:
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)。
https://github.com/ethereum/homebrew-ethereum/commits/master
2.克隆 Homebrew Ethereum 仓库并切换到指定版本
git clone https://github.com/ethereum/homebrew-ethereum.git
cd homebrew-ethereum
git checkout <你的提交哈希值>
3.安装特定版本
brew unlink solidity # 先卸载当前版本
brew install solidity.rb # 安装特定版本
5. Solidity 静态二进制文件
官方维护了一个静态编译版本存储库solc-bin:
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 版本的二进制文件
{
"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.下载地址为:
https://binaries.soliditylang.org/emscripten-wasm32/solc-emscripten-wasm32-v0.7.4+commit.3f05b770.js
2.通过 keccak256
或 sha256
哈希值校验文件完整性:
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. 从源码构建编译器
安装教程:
https://docs.soliditylang.org/en/latest/installing-solidity.html#building-from-source