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

devtools/2025/4/2 8:51:37/

文章目录

    • 版本管理
    • Remix 编译器
    • 其他安装方式
      • 1. 使用 npm / Node.js 安装
      • 2. 使用 Docker 安装
          • 在本机编译 Solidity 文件
          • 使用标准 JSON 接口(推荐)
      • 3. 使用 Linux 包管理器安装
          • Ubuntu(PPA 源)
          • Arch Linux
          • Snap 包(不推荐)
      • 4. macOS 上的 Solidity 安装
      • 4.1 通过 Homebrew 安装
        • 4.2 安装旧版本(0.4.x / 0.5.x)
        • 4.3 安装特定版本
      • 5. Solidity 静态二进制文件
      • 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 版本。

其他安装方式

npm__Nodejs__27">1. 使用 npm / Node.js 安装

如果想要一种便捷且可移植的方式来安装 Solidity 编译器,可以使用 npm 安装 solcjs

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 仓库:

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.24.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.通过 keccak256sha256 哈希值校验文件完整性:

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. 从源码构建编译器

安装教程:

https://docs.soliditylang.org/en/latest/installing-solidity.html#building-from-source

http://www.ppmy.cn/devtools/172729.html

相关文章

数据库界的“申公豹”,带云DBA走出--救生筏困境!

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;共2790人左右 1 …

在React中处理API请求和数据

在React中处理API请求和数据 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 在React中处理API请求和数据在React中发起API请求使用`fetch`或第三方库总之,`fetch`和像`axios`这样的…

JAVA实战开源项目:体育馆使用预约平台(Vue+SpringBoot) 附源码

本文项目编号 T 144 &#xff0c;文末自助获取源码 \color{red}{T144&#xff0c;文末自助获取源码} T144&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

企业为何青睐数字孪生大屏?技术驱动与价值重构的双重逻辑

一、大屏背后的深层动因&#xff1a;数据价值的再发现 在数据量级呈指数级增长的当下&#xff0c;企业正面临着数据复杂度与决策时效性的双重挑战。传统报表与二维图表已难以满足对多源异构数据的深度解析需求&#xff0c;而数字孪生大屏凭借其三维可视化与动态交互能力&#…

marked库(高效将 Markdown 转换为 HTML 的利器)

文章目录 前言使用基本使用自定义渲染器例子 代码高亮 前言 最近尝试了一下通过星火大模型将ai引入到项目上&#xff0c;但是ai返回的数据可以显而易见的发现是markedown语法的&#xff0c;那么就需要一个工具&#xff0c;将类似这种的格式转换为markdown格式 Marked 是一个用…

介绍几种创意登录页(含完整源码)

今天为大家收集了几种不同风格的登录页&#xff0c;搭配动态渐变背景&#xff0c;效果绝对惊艳&#xff01; CSS3实现动态渐变玻璃拟态登录页 一、开篇语 纯CSS实现当下最火的玻璃拟态(Morphism)风格登录页&#xff0c;搭配动态渐变背景&#xff0c;效果绝对惊艳&#xff01; …

基于Python深度学习的鲨鱼识别分类系统

摘要&#xff1a;鲨鱼是海洋环境健康的指标&#xff0c;但受到过度捕捞和数据缺乏的挑战。传统的观察方法成本高昂且难以收集数据&#xff0c;特别是对于具有较大活动范围的物种。论文讨论了如何利用基于媒体的远程监测方法&#xff0c;结合机器学习和自动化技术&#xff0c;来…

青少年编程与数学 02-013 初中数学知识点 05课题、统计与概率

青少年编程与数学 02-013 初中数学知识点 05课题、统计与概率 一、统计部分&#xff08;1&#xff09;基本概念&#xff08;2&#xff09;统计图表&#xff08;3&#xff09;数据分析 二、概率部分&#xff08;1&#xff09;基本概念&#xff08;2&#xff09;概率的计算&#…