XiaBee's Studio.

三天速成智能合约–DAY1:环境安装

字数统计: 1.4k阅读时长: 5 min
2021/08/28

事件起因

我们组的信安作品赛“被迫”加了一项智能合约的部署,某子剑老师:“智能合约三天就够了”

试了一下,三天确实够了。

本文以 Ubuntu-20.04为例,记录一下环境搭建过程。

主要涉及环境:

1
2
3
4
- geth
- npm
- truffle
- ganache

相关概念

这里不妨假设大家已经非常熟悉智能合约、区块链、消息认证、非对称密码等概念与算法,就不做过多介绍了。(其实是太鸽了,还没写,下次一定)

智能合约

智能合约(Smart contract )是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。

https://baike.baidu.com/item/%E5%8C%BA%E5%9D%97%E9%93%BE/13465666

区块链

区块链是一种按照时间顺序将数据区块以链条的方式组合成特定数据结构, 并以密码学方式保证的不可篡改和不可伪造的去中心化共享总账(Decentralized shared ledger),能够安全存储简单的、有先后关系的、能在系统内验证的数据。

广义的区块链技术则是利用加密链式区块结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用自动化脚本代码(智能合约)来编程和操作数据的一种全新的去中心化基础架构与分布式计算范式。

https://cloud.tencent.com/developer/article/1532748

详细概念我们以后再聊(如果我还记得的话)

这里我们编写的智能合约主要是区块链的智能合约,暂时不考虑物联网的合约;区块链具体的链为以太坊

相关环境

GETH

Geth,Go-Ethereum,以太坊官方客户端软件,由以太坊基金会提供,用Go语言编写的。Geth提供了一个交互式命令控制台,通过命令控制台中包含了以太坊的各种功能(API)。

这里以Ubuntu系统为例,安装过程如下:

1
2
3
4
5
6
sudo add-apt-repository -y ppa:ethereum/ethereum
# 添加官方源
sudo apt-get update
sudo apt-get install ethereum
# sudo apt-get install geth 也是可以的
# 安装geth

如果不能导入官方源可以考虑源码安装:

1
2
3
4
5
6
7
8
9
10
sudo apt-get install golang
# 安装go语言编译环境
go env -w GOPROXY=https://goproxy.cn
# 更换go语言代理
git clone https://github.com/ethereum/go-ethereum
cd go-ethereum
make all
# 下载安装以太坊
export PATH=$PATH:/home/$USER/go-ethereum/build/bin
# 设置环境变量

其他安装方式可以参考官方文档

一些小问题:

  • 网上有直接通过snap安装的,但是我在测试的时候发现snap安装的版本有玄学bug,比如初始化的时候读不了外部文件,一直提示Permission denied……然后折腾了一上午不知道为啥,换官方源安装解决了
  • 源码安装没问题,我的WSL里面用的时源码安装,但是配置GO的环境比较麻烦,WSL每次启动都得改环境变量,非常折腾……要不是WSL用的是kali官方源不支持,谁手动装这玩意

NPM

NPM可以简单的理解为 JavaScript的包管理器,用于下载和部署Nodejs等项目。

安装方式:APT安装npm和nodejs

1
2
sudo apt update
sudo apt install nodejs npm

查询版本,出现下图说明安装成功:

image.png

常见问题与解决方案:

  • 下载速度太慢——换源
  • 经常需要sudo——换所有者

npm换源:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
npm config get registry
# 查看当前地址:
# https://registry.npmjs.org/

npm config get disturl
# undefined

npm --registry https://registry.npm.taobao.org install
# 临时更换仓库地址

npm config set registry http://registry.npm.taobao.org/
# 换为阿里源

npm config set registry https://registry.npmjs.org/
# 换回官方源

npx nrm use taobao
# 使用nrm工具切换淘宝源

npx nrm use npm
# 如果之后需要切换回官方源可使用

切换所有者:

1
2
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
# 这样就不用sudo了

详细教程可以参考官方文档,如果有时间我们再来细聊

Truffle && ganache

Truffle是针对基于以太坊的Solidity语言的一套开发框架,本身基于Javascript,能够方便的管理智能合约运行的环境,并且提供一套便捷开发智能合约(Smart Contract)API

ganache是以太坊开发的一个常见客户端,测试阶段我们使用ganache,完成开发后使用geth接入。

详细教程可以参考官方文档中文翻译,但是由于文档比较老,版本基本上为truffle2或者truffle3,现在的truffle版本已经升级到了5.3.7,故部分操作命令会有区别,我们会在后续的文章中讲到。

安装要求:NodeJS 5.0+

安装方式:

1
2
3
4
5
sudo npm install -g truffle
# 安装服务端/IDE

sudo npm install -g ganache-cli
# 安装测试客户端,最终的客户端为GETH,前面已经安装过

看到这个说明安装成功:

image.png

常见问题:

  • 安装到一半卡住,重新安装目录非空——进入该目录,删掉package文件(找不到就删掉所有文件)
  • 安装到一半堆溢出——这个没啥好办法,历史遗留玄学问题,我已经把内存限制调到16G了依然能溢出……看脸吧

小结

暂时没想到还需要装啥,就先写到这吧,下一篇:GETH从入门到入土

三天速成智能合约的第一天,把环境装好就行,顺利的话还有点时间多,可以预习一下这些工具的基本操作。

CATALOG
  1. 1. 事件起因
  2. 2. 相关概念
    1. 2.1. 智能合约
    2. 2.2. 区块链
  3. 3. 相关环境
    1. 3.1. GETH
    2. 3.2. NPM
    3. 3.3. Truffle && ganache
  4. 4. 小结