Solidity 开发工具组合 - In Mac
文章目录
【注意】最后更新于 August 2, 2018,文中内容可能已过时,请谨慎使用。
1 摘要
本文根据作者搭建 Solidity 开发环境的经验,做了一些基本梳理,并推荐了逐步进阶的工具套件组合。
提醒:本文提到的相关环境仅在 Mac OS - Darwin Kernel Version 17.5.0
上搭建和验证。
提醒:Solidity 语言甚至是 Ethereum 都在快速的发展之中,相应的工具和组合也在不断完善和发展之中,请注意本文所述所使用的各工具版本,这里列出一些相关版本号供参考:
- Go-ethereum 1.8.7-stable (可以通过
geth version
查看版本号) - Solidity 0.4.23+commit.124ca40d.Darwin.appleclang (可以通过
solc --version
查看版本号) - Remix-ide 0.6.2 (可以通过
npm -g list remix-ide
查看版号 )
2 开发环境和工具
Solidity 是官方智能合约开发高级语言,Solidity 开发涉及到一些列工具套件和组合,这里推荐首先使用简单的组合以快速上手学习,并有利于了解 Solidity 开发最基本的知识。随着对 Solidity 的了解加深,可以尝试更加丰富的工具套件组合并使用开发框架来提高生产力。
2.1 最简工具
推荐使用 Remix,它是一个基于浏览器的 IDE,集成了 Solidity 编译器 ( solcjs
),基本编辑工具,以及 Solidity 的运行环境。官方提供了在线 Remix-ide ,无需安装即可通过浏览器使用。你也可以选择安装 Remix 至本地。以 MacOS 为例,可以在终端中运行 npm install remixd remix-ide -g
命令安装 Remix-ide。在终端中运行 remix-ide
命令即可启动 Remix-ide,如下所示,是我的电脑上运行 remix-ide
命令的终端输出。
|
|
- Remixd 启动在 127.0.0.1:65520 提供运行环境。
- Remix IDE 启动在 http://localhost:8080 端口。
- 启动
remix-ide
命令所在目录被作为共享目录,可以在 Remix IDE 里面链接并加载该目录,建议该目录为你 Solidity 代码目录,这样就可以直接在 Remix IDE 里面访问这些代码。
在浏览器中打开 http://localhost:8080 ,就可以使用 Remix-ide了。
- 点击位于左上方的链接状图标,既可以链接本地共享目录。
- Remix IDE 使用的环境是 JavaScript VM,可以通过右上方的 Run 标签链接查看使用使用的环境。
- 默认提供四个账户,每账户各 100 ether 以供测试(可在右上方 Run 标签页查看账户信息)。
这种方式使用 Remix,你只能在 JavaScript VM 环境里面运行代码,作为快速上手是合适的。如果你需要连接开发节点或者测试网络,你需要更加合适的工具组合。
2.2 基本工具套件组合
这里推荐使用基本组合来编辑和调试 Solidity 代码,建议使用 Geth 客户端创建开发环境节点,也可以连接至 Ethereum 测试网络进行代码的部署和测试。
2.2.1 基本组合工具安装配置
- Geth - Go-ethereum 是 Ethereum 默认客户端。在开发 Solidity 开发过程中,Geth 是开发环境基本工具,用于启动本地节点,连接 Ethereum 网络,提供 Solidity 部署和运行环境。在终端运行
brew install geth
安装 Geth。通过运行geth version
验证安装。 Solc - Solidity 编译器。运行如下命令安装 Solidity:
1 2 3 4 5 6
brew update brew upgrade brew tap ethereum/ethereum brew install solidity #使用如下命令验证安装。 solc --version
Solium - Solidity 代码语法风格以及代码安全分析和检查工具,Solidity-mode 使用该工具进行代码检查。运行
npm install solium -g
安装并使用solium -V
检查安装结果。Remix-ide / Remix - Remix 提供 Remix-ide 运行环境,Remix-ide 用于 Solidity 代码编辑和调试。运行
npm install remixd remix-ide -g
命令安装 Remix 运行环境和 IDE。Emacs + Solidity-mode - 我用于 Solidity 代码编辑的工具,有关 Solidity Emacs Mode 的安装和配置,请参阅 Solidity Emacs 配置。你也可以选择自己常用的编辑器,有关更多工具集成,请参阅可用 Solidity 集成工具。
2.2.2 基本组合工具使用
按照如下步骤分别启动 geth
, remixd
并使用浏览器连接和使用 Remx-ide:
- 在终端中运行
geth --vmdebug --ipcpath ~/devchains/chain1/eth.ipc --datadir ~/devchains/chain1 --rpc --rpccorsdomain "*" --rpcport 8545 --rpcapi web3,eth,debug,net,personal --dev --nodiscover console 2>> /temp/geth-dev.log
启动 Geth 节点:--dev
选项指定 Geth 启动开发网络环境,该环境为开发环境,可挖矿,采用 PoA (proof-of-authority) 共识算法,预先设定一个开发者账户,默认发生交易的时候挖矿。--datadir
选项指定 Geth 节点数据和账户 Key 存储的位置。--rpccorsdomain
选项是必须的,该选项允许通过浏览器连接 RPC。--rpcapi
选项列出允许通过 RPC 访问的 API 接口,需要允许 web3, personal 等 API 以便于 Remix-ide 能够连接并使用这些 API。--rpcport 8545
选项 指定 Geth 在 8545 端口启动 RPC 服务,Remix-ide 随后可通过该端口连接 Geth 节点并使用该环境。
- 在终端中运行
remixd -s ~/ethlab
命令启动 Remixd 服务。这里允许 Remix-ide 加载共享目录~/ethlab
。建议将共享目录修改为你 Solidity 项目的根目录。 - 在浏览器中打开 http://localhost:8080。
至此,以上步骤启动 Remix-ide,这个和最简单配置中,使用 Remix-ide 相似,所不同的是,你可以通过 Remix-ide 配置使用 Geth 节点环境。环境配置位于 Remix IDE 右上角 Run 标签页面。在 Run 标签页面环境下拉选项连选择 Web3 Provider 项,即可连接 Geth 节点环境。成功连接 Geth 节点后的界面如下:
[[
你也可以配置 Geth 连接测试网络,详情请参阅Ethereum 网络 。同样的,通过使用 Web3 Provider 选项连接 Geth 节点,即可在不同的网络进行代码测试和调试。
TODO 2.3 开发框架组合
建议使用 Truffle 框架,Truffle 框架号称是以太坊瑞士军刀。该框架是一个开发环境、测试框架,目标是使以太坊开发者的日常工作更加容易。该框架包括:
- 内置智能合约编译、链接、部署和二进制文件管理
- 快速开发自动化合约测试
- 脚本化,可扩展部署和迁移框架
- 网络管理 - 允许部署至任意公共和私有网络
- 使用 EthPM 和 NPM 进行包管理,使用 ERC190 标准
- 可交互控制台 - 可直接和合约进行交互
- 可配置构建管道 - 支持高度集成
- 支持外部脚本 - 可在 Truffle 环境下执行外部脚本
2.3.1 安装
在终端运行 npm install -g truffle
可安装 Truffle 框架及其依赖包。运行 truffle version
验证安装。
|
|
TODO 2.3.2 快速启用
2.4 其他工具
2.4.1 Remix App
相对于 Remix-ide,Remix-app 提供了本地运行的体验,编译构建 Remix App:
|
|
安装包位于 remix-app/dist
目录。
2.4.2 Puppeth
Puppeth 可用于帮助创建私有网络,详情请参阅使用 Puppeth 搭建私有网络。
3 APIs
Enthereum 提供 RPC API 和 Web3 API。RPC API 是底层 API,Web3 API 由 JavaScript 语言写成,建立在 RPC API 基础之上,更加易于使用。在智能合约开发过程中,可以通过 Geth Console 使用 Web3 API 进行账户配置,测试等。
4 Ethereum 网络
在开发智能合约或者 dApp 期间,你需要有更加真实的环境来部署和测试你的代码。Ethereum 社区提供相关的测试网络,你也可以使用相关工具搭建本地网络用于测试。
- Testnet - Ropsten 测试网络,预定义可挖矿,采用 PoW (proof-of-work) 共识,启动挖矿会导致你的 CPU 风扇狂转。可以使用
geth --testnet
命令启动 Geth 节点并连接 Ropsten 测试网络。 - Rinkeby - Rinkeby 测试网络,预定义可挖矿,采用 PoA (proof-of-authority) 共识算法。可以使用
geth --rinkeby
命令启动 Geth 节点并连接 Rinkeby 测试网络。 - Solo - 临时开发网络,可挖矿,采用 PoA 共识算法,预先设定一个开发者账户,默认发生交易的时候挖矿,也可以定义挖矿间隔。可以使用
geth --dev
命令启动 Geth 节点并连接开发网络。 - 私有网络 - 可以自己动手搭建私有网络以测试智能合约代码。Puppeth 工具可以帮助创建私有网络。
TODO 4.1 使用 Puppeth 搭建私有网络
5 参考文献
- Ethereum Homestead Document, http://www.ethdocs.org/en/latest/.
- RPC APIs, https://github.com/ethereum/wiki/wiki/JSON-RPC#json-rpc-methods.
- Web3 Document, http://web3js.readthedocs.io/en/1.0/web3.html.
- JavaScript API wiki, https://github.com/ethereum/wiki/wiki/JavaScript-API.
- Solidiky Document, https://solidity.readthedocs.io
- Truffle, http://truffleframework.com
- EthereumToken Contracts, https://github.com/ConsenSys/Tokens.
本作品采用知识共享署名 4.0 国际许可协议进行许可。
文章作者 Junahan
上次更新 2018-08-02 (7673036)