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

文章目录

    • 版本管理
    • [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.solcjssolc 不兼容 ,其命令行选项不同,因此一些工具(如 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.通过 keccak256sha256 哈希值校验文件完整性:

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.jslist.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
相关推荐
KKKlucifer16 小时前
数据安全合规自动化:策略落地、审计追溯与风险闭环技术解析
人工智能·安全
wanhengidc17 小时前
云手机 高振畅玩不踩坑
运维·服务器·安全·web安全·智能手机
易连EDI—EasyLink17 小时前
易连EDI–EasyLink实现OCR智能数据采集
网络·人工智能·安全·汽车·ocr·edi
JS_SWKJ18 小时前
网闸与光闸深度解析:高安全隔离设备核心知识与选型
安全
AIwenIPgeolocation18 小时前
出海应用合规与风控平衡术:可信ID的全球安全实践
人工智能·安全
长安链开源社区18 小时前
长安链2.3.8生产版本发布,安全、开放、灵活的企业级区块链底座
安全·区块链
数智化精益手记局19 小时前
拆解物料管理erp系统的核心功能,看物料管理erp系统如何解决库存积压与缺料难题
大数据·网络·人工智能·安全·信息可视化·精益工程
带娃的IT创业者19 小时前
Bitwarden CLI 供应链攻击深度分析:当密码管理工具本身成为安全威胁
安全·npm·安全漏洞·cli·供应链攻击·bitwarden
程序员李程峰19 小时前
基础知识④链和代币之间的关系
web3·去中心化·区块链·智能合约·同态加密·共识算法·信任链
企业架构师老王19 小时前
2026制造业安全生产隐患识别AI方案:从主流产品对比看企业级AI Agent的非侵入式落地路径
人工智能·安全·ai