前言
区块链数字货币的火热,从去年的暴涨,吸引了不少人的目光。关于应用场景,颠覆之类的就不说了。诚然,现实世界有很多漫天飞舞的夸大和吹捧。作为 IT 行业的从业人员,我们更应该做的是好好了解这背后的技术,只有理解了技术,才能更好的落实应用。
区块链大致有三种类型,公有链,私有链,联盟链。而 HyperLedger 则是典型的联盟链,引入了权限管理机制。访问该区块链,只有经过了授权,才有资格访问。
区块链开发的流程是什么?
那么,区块链应用到底该怎么开发呢?
这里简单介绍一下流程,后面的一系列文章会陆续给出一些学习教程。
基本步骤是:搭建开发环境—>编写智能合约—>编写可以调用智能合约的应用程序—->部署应用程序。
接下来,就介绍第一部分,快速搭建一个Fabric 1.0 的环境。
大部分内容参考:
快速搭建一个 Fabric 1.0 的环境
1.安装好 Ubuntu
本次项目是在 Ubuntu16.04 环境下开发的。我用的是 Ubuntu16.04 桌面版。 在安装完 Ubuntu 后,需要保证 apt source 是国内的,不然如果是国外的话会很慢很慢的。具体做法是:
进入 ubuntu 桌面右上角按钮菜单中选择“系统设置”, 在弹出的窗口中选择 “软件和更新”。
切换到“Ubuntu 软件”选项,在底部“下载自”中选择国内的镜像,然后点击关闭。
系统弹出对话框,选择“重新载入”即可。
2.Go 的安装
Ubuntu 的 apt-get 虽然提供了 Go 的安装,但是版本比较旧,最好的方法还是参考官方网站 https://golang.org/dl/ ,下载最新版的 Go。具体涉及到的命令包括 :
wget https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz
【注意:不要使用 apt 方式安装 go,apt 的 go 版本太低了!】
接下来编辑当前用户的环境变量:
vi ~/.profile
添加以下内容:
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin
$HOME是当前用户主目录。
export GOPATH=$HOME/go 表示我们把 go 的目录 GOPATH 设置为当前用户的文件夹。
PATH 表示环境变量。在 Linux 环境中,是区分大小写的。
其次,在 Linux 中,引用变量,要在前面加上一个$符号。
综上所述,$PATH 以及 $HOME 均表示对变量的引用。
其中,PATH=$PATH:/usr/local/go/bin 表示将/usr/local/go/bin 这个路径,加入到环境变量中!
编辑保存并退出 vi 后,记得把这些环境载入:
source ~/.profile
由于我们把 go 的目录 GOPATH 设置为当前用户的文件夹下,所以记得创建 go 文件夹
cd ~
mkdir go
3. Docker 安装
我们可以使用阿里提供的镜像,安装也非常方便。通过以下命令来安装 Docker
curl -fsSL https://get.docker.com/ | sh
或者 curl -sSL https://get.daocloud.io/docker | sh
安装完成后需要修改当前用户(我使用的用户叫 sxl)权限:
sudo usermod -aG docker sxl
注销并重新登录,然后在终端运行一下命令,以添加阿里云的 Docker Hub 镜像:
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://obou6wyb.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
4. Docker-Compose 的安装
Docker-compose 是支持通过模板脚本批量创建 Docker 容器的一个组件。在安装 Docker-Compose 之前,需要安装 Python-pip,运行脚本:
sudo apt-get install python-pip
然后是安装 docker-compose,我们从官方网站(https://github.com/docker/compose/releases)下载也可以从国内的进行 DaoClound 下载,为了速度快接下来从 DaoClound 安装 Docker-compose,运行脚本:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
sudo mv ~/docker-compose /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
5. Fabric源码下载
我们可以使用 Git 命令下载源码,首先需要建立对应的目录,然后进入该目录,Git 下载源码:
mkdir -p ~/go/src/github.com/hyperledger
cd ~/go/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git
由于Fabric一直在更新,所有我们并不需要最新最新的源码,需要切换到 v1.0.0 版本的源码即可:
cd ~/go/src/github.com/hyperledger/fabric
git checkout v1.0.0
6. Fabric Docker 镜像的下载
这个其实很简单,因为我们已经设置了 Docker Hub 镜像地址,所以下载也会很快。官方文件也提供了批量下载的脚本。我们直接运行:
cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0
这样就可以下载所有需要的Fabric Docker 镜像了。由于我们设置了国内的镜像,所以下载应该是比较快的。
下载完毕后,我们运行以下命令检查下载的镜像列表:
docker images
得到结果如下:
7.启动Fabric网络并完成 ChainCode 的测试
我们仍然停留在 e2e_cli 文件夹,这里提供了启动、关闭 Fabric 网络的自动化脚本。我们要启动 Fabric 网络,并自动运行 Example02 ChainCode 的测试,执行一个命令:
./network_setup.sh up
最后运行完毕,我们可以看到这样的界面:
如果您看到这个界面,这说明我们整个 Fabric 网络已经通了。
8.手动测试一下 Fabric 网络
我们仍然是以现在安装好的 Example02 为例,在官方例子中,channel 名字是 mychannel,链码的名字是 mycc。我们首先进入 CLI,我们重新打开一个命令行窗口,输入:
docker exec -it cli bash
运行以下命令可以查询 a 账户的余额:
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
可以看到余额是 90:
然后,我们试一试把 a 账户的余额再转 20 元给 b 账户,运行命令:
peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -c '{"Args":["invoke","a","b","20"]}'
运行结果为:
现在转账完毕, 我们试一试再查询一下 a 账户的余额,没问题的话,应该是只剩下 70 了。我们看看实际情况:
果然,一切正常。最后我们要关闭 Fabric 网络,首先需要运行 exit 命令退出 cli 容器。关闭 Fabric 的命令与启动类似,命令为:
cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
./network_setup.sh down
现在我们整个 Fabric 的环境已经测试完毕,恭喜,一切正常,接下来我们就是去做自己的区块链的开发。
总结:
通过上述快速搭建一个 Fabric 网络,我们做了些什么?为以后打下了什么基础?
- 在“ Fabric Docker 镜像的下载”这一步骤中,我们下载了 Fabric 网络所需要的镜像文件,这是 Fabric 网络中必要的文件。
- 在 e2ecli 例子中,使用的是 startFabric.sh 脚本来自动搭建 Fabric 网络的。不同的 fabric 应用,所需要的 Fabric 网络结构也是不同的,这里的 Fabric 网络只适合 e2e_cli 例子中。
- 用完记得关闭网络,不然开启其他 Fabric 网络时,会产生冲突。
以上都是经过栏主自动动手实践运行出来的。如果有错误的地方,欢迎指出~
转自知乎 苏小乐 :https://www.zhihu.com/people/shan-de-ding-zhu/activities