Solidity文档(中文版)连载二:安装 Solidity 编译器

序言
本文是 Solidity 文档(以太坊官方 Solidity 开发手册)中文版连载的第二部分。这个连载的第一部分是智能合约概述
这份文档的英文原文可以在以太坊官网的最下方 Solidity 链接中找到。官方的英文版本文档中有中译版链接,即是本连载内容的出处。这个连载将按照英文文档的先后顺序进行。
Solidity 是以太坊官方的智能合约开发高级语言。这份中文译本是由 Hiblock 社区组织贡献的,官方 Github:https://github.com/etherchina/solidity-doc-cn
我本人于3月初加入本项目,目前作为管理员、贡献者和校订人利用业余时间参与日常工作;截至到4月底,翻译工作已完成大半。有兴趣的朋友请直接在以太坊官网的链接中查看最新中文版本状态,或者关注上述中文译本的 Github repository。
出于单独阅读的需要,我在连载中会删除原文里的 rst 控制标签、外部链接以及文内链接。
本文讲解了 Solidity 开发环境(编译器)安装相关的内容,比较简单。

安装 Solidity 编译器

版本

Solidity 的版本遵循 语义化版本原则 https://semver.org,作为发布版本的补充, 每日开发构建 (nightly development builds)也是可用的。这个每日开发构建不保证能正常工作,尽管尽了最大的努力,但仍可能包含未记录的和/或重大的改动。我们推荐使用最新的发布版本。下面的包安装程序将使用最新发布版本。

Remix

我们推荐使用 Remix 来开发简单合约和快速学习 Solidity。

Remix https://remix.ethereum.org/ 可在线使用,而无需安装任何东西。如果你想离线使用,可按 https://github.com/ethereum/browser-solidity/tree/gh-pages 的页面说明下载 zip 文件来使用。

该页面有进一步详细说明如何安装 Solidity 命令行编译器到你计算机上。如果你刚好要处理大型合约,或者需要更多的编译选项,那么你应该选择使用命令行编译器 solc。

npm / Node.js

使用 npm 可以便捷地安装 Solidity 编译器 solcjs。但该 solcjs 程序的功能相对于本页下面的所有其他选项都要少。在后续讲解编译器使用的章节中,我们会假定你使用的是完整功能的编译器。 所以,如果你是从 npm 安装 solcjs ,就此打住,直接跳到 solc-js https://github.com/ethereum/solc-js 去了解。

注意:solc-js https://github.com/ethereum/solc-js 是利用 Emscripten 从 C++ 版的 solc 跨平台编译为 JavaScript 的,因此,可在 JavaScript 项目中使用 solcjs(如同 Remix)。具体介绍请查看 solc-js https://github.com/ethereum/solc-js 代码库。

npm install -g solc

注意
在命令行中,使用 solcjs 而非 solc
solcjs 的命令行选项同 solc 和一些工具(如 geth )是不兼容的,因此不要期望 solcjs 能像 solc 一样工作。

Docker

我们为编译器提供了最新的docker构建。 stable 仓库里的是已发布的版本,nightly 仓库则是在开发分支中的带有不稳定变更的版本。

docker run ethereum/solc:stable solc --version

目前,docker 镜像只含有 solc 的可执行程序,因此你需要额外的工作去把源代码和输出目录连接起来。

二进制包

可在 solidity/releases https://github.com/ethereum/solidity/releases 下载 Solidity 的二进制安装包。

对于 Ubuntu ,我们也提供 PPAs 。通过以下命令,可获取最新的稳定版本:

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版本 https://snapcraft.io/docs/core/install 下的 snap package https://snapcraft.io/。通过以下命令,可获取最新的稳定版本:

sudo snap install solc

或者,如果你想测试 develop 分支下的最新变更,可通过如下方式安装开发者版本:

sudo snap install solc --edge

同样,Arch Linux 也有提供安装包,但仅限于最新的开发者版本:

pacman -S solidity

在写本文时,Homebrew 上还没有提供预构建的二进制包(因为我们从 Jenkins 迁移到了 TravisCI )。 我们将尽快提供 homebrew 下的二进制安装包,但至少从源码构建的方式还是行得通的:

brew update
brew upgrade
brew tap ethereum/ethereum
brew install solidity
brew linkapps solidity

如果你需要特定版本的 Solidity ,你需要从 Github 上安装一个 Homebrew formula。

你可查阅 solidity.rb commits on Github https://github.com/ethereum/homebrew-ethereum/commits/master/solidity.rb 的提交记录,去寻找包含 solidity.rb 文件改动的特殊提交。然后使用 brew 进行安装:

brew unlink solidity
# Install 0.4.8
brew install https://raw.githubusercontent.com/ethereum/homebrew-ethereum/77cce03da9f289e5a3ffe579840d3c5dc0a62717/solidity.rb

Gentoo Linux 下也提供了安装包,可使用 emerge 进行安装:

emerge dev-lang/solidity

从源代码编译

克隆代码库

执行以下命令,克隆源代码:

git clone --recursive https://github.com/ethereum/solidity.git
cd solidity

如果你想参与 Solidity 的开发, 你可分叉 Solidity 源码库后,用你个人的分叉库作为第二远程源:

cd solidity
git remote add personal git@github.com:[username]/solidity.git

Solidity 有 Git 子模块,需确保完全加载它们:

git submodule update --init --recursive

先决条件 - macOS

在 macOS 中,需确保有安装最新版的 Xcode https://developer.apple.com/xcode/download/,Xcode 包含 Clang C++ 编译器 https://en.wikipedia.org/wiki/Clang,而 Xcode IDE https://en.wikipedia.org/wiki/Xcode 和其他苹果开发工具是 OS X 下编译 C++ 应用所必须的。如果你是第一次安装 Xcode 或者刚好更新了 Xcode 新版本,则在使用命令行构建前,需同意 Xcode 的使用协议:

sudo xcodebuild -license accept

Solidity 在 OS X 下构建,必须安装 Homebrew http://brew.sh 包管理器来安装依赖。如果你想从头开始,这里是卸载 Homebrew 的方法 https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/FAQ.md#how-do-i-uninstall-homebrew

先决条件 - Windows

在 Windows 下构建 Solidity,需下载的依赖软件包:

Git for Windows: https://git-scm.com/download/win
CMake: https://cmake.org/download/
Visual Studio 2015: https://www.visualstudio.com/products/vs-2015-product-editions

外部依赖

在 macOS、Windows 和其他 Linux 发行版上,有一个脚本可以“一键”安装所需的外部依赖库。本来是需要人工参与的多步操作,现在只需一行命令:

./scripts/install_deps.sh

Windows 下执行:

scripts\install_deps.bat

命令行构建

确保你已安装外部依赖(见上面)

Solidity 使用 CMake 来配置构建。Linux、macOS 和其他 Unix系统上的构建方式都差不多:

mkdir build
cd build
cmake .. && make

也有更简单的:

#note: 将安装 solc 和 soltest 到 usr/local/bin 目录
./scripts/build.sh

对于 Windows,可以执行:

mkdir build
cd build
cmake -G "Visual Studio 14 2015 Win64" ..

这组指令的最后一句,会在 build 目录下创建一个 solidity.sln 文件,双击后,默认会使用 Visual Studio 打开。我们建议在VS上创建 RelWithDebugInfo 配置文件。

或者用命令创建:

cmake --build . --config RelWithDebInfo

CMake参数

如果你对 CMake 命令选项有兴趣,可执行 cmake .. -LH 进行查看。

版本号字符串详解

Solidity 版本名包含四部分:

  • 版本号
  • 预发布版本号,通常为 develop.YYYY.MM.DD 或者 nightly.YYYY.MM.DD
  • commit.GITHASH 格式展示的提交号
  • 由若干条平台、编译器详细信息构成的平台标识

如果本地有修改,则 commit 部分有后缀 .mod

这些部分按照 Semver 的要求来组合, Solidity 预发布版本号等价于 Semver 预发布版本号, Solidity 提交号和平台标识则组成 Semver 的构建元数据。

发行版样例:0.4.8+commit.60cc1668.Emscripten.clang.

预发布版样例: 0.4.9-nightly.2017.1.17+commit.6ecb4aa3.Emscripten.clang

版本信息详情

在版本发布之后,补丁版本号会增加,因为我们假定只有补丁级别的变更会在之后发生。当变更被合并后,版本应该根据 semver 和变更的剧烈程度进行调整。最后,发行版本总是与当前每日构建版本的版本号一致,但没有 prerelease 指示符。

例如:

  1. 0.4.0 版本发布
  2. 从现在开始,每晚构建为 0.4.1 版本
  3. 引入非破坏性变更 —— 不改变版本号
  4. 引入破坏性变更 —— 版本跳跃到 0.5.0
  5. 0.5.0 版本发布

该方式与 version pragma <version_pragma> 一起工作良好。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 还没有发工资,穷的吃不上饭了,外面在下雨,好想吃西瓜(ಥ_ಥ)
    獨钓寒江雪阅读 131评论 0 0
  • 抓住朋友圈里那些少的可怜的互动吧。允许你潜水,切不可沉溺。 举一个例子,前一阵子特别懒或者可以说是兴致不高,可理解...
    番茄土豆ni阅读 219评论 0 0
  • 2016.9.18 这两天小宝感冒老师不见好于是又带他去推拿。推拿完了下了楼穿过熙熙攘攘的小巷,周边全是娃娃...
    冰雪原野阅读 94评论 0 1
  • 昨天很累,忙了许多事,劳力工作,确实消耗体力,22点就睡着了,也没等到弹珠下班。她24点发了短信也没回复,睡到一点...
    乌力亚斯太阅读 175评论 0 0
  • App Minimize AppMinimize is a plugin to minimize the appl...
    待花谢花开阅读 1,648评论 0 0