【区块链安全 | 第十二篇】安装 Solidity 编译器(npm | docker | Linux | macOS)

在这里插入图片描述

版本管理

Solidity 遵循 语义化版本控制(Semantic Versioning),在版本号为 0(即 0.x.y)的情况下,补丁级别的发布不会引入破坏性更改。这意味着使用版本 0.x.y 编译的代码,在版本 0.x.z(z > y)发布时仍然能够正常编译。

除了正式版本发布,Solidity 官方还提供每夜构建版本(nightly builds),开发者可以提前尝试新功能并提供反馈。然而,每夜构建版本包含开发分支的最新代码,并不保证始终可用,可能存在未记录或已损坏的更改,这些更改可能最终不会出现在正式版本中。因此,每夜构建版本不适合用于生产环境。

在部署合约时,建议使用最新发布的 Solidity 稳定版本。由于 Solidity 仍在快速发展,新版本经常引入破坏性更改、新功能以及错误修复。因此,Solidity 依然使用 0.x 版本号来反映这一变化。

Remix 编译器

对于小型合约或学习 Solidity,推荐使用 Remix。

Remix 提供了一个在线编译器,无需安装任何软件即可访问。如果需要在离线环境下使用 Remix,可以访问 Remix 离线版本并按照页面上的说明操作。

https://github.com/ethereum/remix-live/tree/gh-pages#readme

Remix 还支持测试每夜构建版本,而无需安装多个 Solidity 版本,便于开发者快速切换和试用最新功能。

其他安装方式

1. 使用 npm / Node.js 安装

如果希望以便捷且可移植的方式安装 Solidity 编译器,可以使用 npm 安装 solcjs:

npm install --global solc

注意:
1.安装后,命令行可执行文件为 solcjs,而不是 solc。
2.solcjs 和 solc 不兼容,它们的命令行选项不同,因此一些工具(如 geth)可能无法与 solcjs 兼容。
3.solc-js 是通过 Emscripten 将 C++ 版本的 solc 转译而来,它们使用相同的编译器源码。
4.solc-js 适用于 JavaScript 项目(例如 Remix)。
5.更多信息请参考 solc-js 的 GitHub 仓库:

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.在 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

避免使用以下过时路径:
1.bin/ 目录:应使用 emscripten-wasm32/(WebAssembly 性能更佳)。
2.wasm/ 目录:应使用 emscripten-asmjs/ 或 emscripten-wasm32/。
3.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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值