作为目前Hash chain 的CTO,接到很多开源社区的朋友请教,大家对于区块链抱有很大程度上的热诚。但是由于区块链开发技术门槛较高,广谱技术开发普及度不高。所以准备出个教程,本来昨天已经在腾讯云实验室测试部署完成,但是由于没被审核通过,审核同学可能规矩比较严吧,再加上平时工作太忙了,没办法细致整合,我就把在实验室的原内容照搬在底下,只能让大家跟着文章,看一看,一起了解。
有不懂的地方可以加群问答:qq:538327407
同时也感谢:Hashchain 研发中腾讯区块链团队的童鞋们鼎力帮助和支持!
### 如果在 腾讯云实验室环境,不需要执行这一步
在安装完Ubuntu后,需要保证apt source是国内的,不然如果是国外的话会很慢很慢的。具体做法是
执行命令:sudo vi /etc/apt/sources.list
打开这个apt源列表,如果其中看到是http://us.xxxxxx之类的,那么就是外国的,如果看到是http://cn.xxxxx之类的,那么就不用换的。我的是美国的源,所以需要做一下批量的替换。在命令模式下,输入:
执行命令: :%s/us./cn./g
就可以把所有的us.改为cn.了。然后输入:wq即可保存退出。
如果后面遇到权限问题,切换到root 账户
执行命令:sudo passwd
修改设置自己的密码,两次,建议选择123456
切换到root账号
执行命令:su root
更新源
执行命令:sudo apt-get update
执行命令(下载):wget https://studygolang.com/dl/golang/go1.9.linux-amd64.tar.gz
执行命令(解压):sudo tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz
【注意:不要使用apt方式安装go,apt的go版本太低了!】
执行命令: vim ~/.profile
添加以下内容:
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin
编辑保存并退出vi后(esc 键退出命令模式, wq即可保存退出。记得把这些环境载入:
执行命令:source ~/.profile
我们把go的目录GOPATH设置为当前用户的文件夹下,所以记得创建go文件夹
执行命令(跳转到根目录):cd ~
执行命令(创建名称为go的文件夹):mkdir go
命令模式出现如下提示:
Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
解决方法:删除锁定的文件
执行命令:sudo rm /var/lib/dpkg/lock
#### step 1: 安装必要的一些系统工具
执行命令: sudo apt-get update
#### step 2: 安装GPG证书
执行命令:curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
#### Step 3: 写入软件源信息
执行命令:sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
#### Step 4: 更新并安装 Docker-CE
执行命令:sudo apt-get -y update
执行命令:sudo apt-get -y install docker-ce
#### step 5:查看是否安装完成,显示当前的docker版本
执行命令:sudo docker version
### 安装完成后需要修改当前用户(我使用的用户叫ubuntu)权限:
执行命令:sudo usermod -aG docker ubuntu
### 注销并重新登录,然后添加阿里云的Docker Hub镜像
执行命令:sudo mkdir -p /etc/docker
执行命令:sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://obou6wyb.mirror.aliyuncs.com"]
}
EOF
执行命令:sudo systemctl daemon-reload
执行命令:sudo systemctl restart docker
执行命令:sudo apt-get install python-pip
执行命令: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
我们可以使用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
这个其实很简单,因为我们已经设置了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
编译生成 cryptogen之前我们需要安装一个软件包,否则编译时会报错
执行命令:sudo apt install libtool libltdl3-dev
Fabric提供了专门编译cryptogen的入口,我们只需要运行以下命令即可:
执行命令:cd ~/go/src/github.com/hyperledger/fabric
执行命令:make cryptogen
运行后系统返回如下结果即代表编译成功了
build/bin/cryptogen
CGO_CFLAGS=" " GOBIN=/home/studyzy/go/src/github.com/hyperledger/fabric/build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/cryptogen/metadata.Version=1.0.0" github.com/hyperledger/fabric/common/tools/cryptogen
Binary available as build/bin/cryptogen
ps:我们在build/bin文件夹下就可以看到编译出来的cryptogen程序。
我们仍然停留在e2e_cli文件夹,这里提供了启动、关闭Fabric网络的自动化脚本。我们要启动Fabric网络,并自动运行Example02 ChainCode的测试,执行一个命令:
执行命令: ./network_setup.sh up
我们仍然是以现在安装好的Example02为例,在官方例子中,channel名字是mychannel,链码的名字是mycc。我们首先进入CLI,我们重新打开一个命令行窗口,输入:
执行命令:docker exec -it cli bash
8.2.1 运行以下命令可以查询a账户的余额:
执行命令(docker环境):peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
可以看到余额是90:
执行命令(docker环境):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"]}'
执行命令:peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
可以看到余额是:70
ps:如果要退出 docker 请使用命令:exit
跳转指定文件夹,执行命令:cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
启动网络,执行命令:./network_setup.sh up
这个时候,关掉终端,重新开一个终端,网络是存在的,正常的
开启docker网络,执行命令:docker exec -it cli bash
运行以下命令可以查询a账户的余额:
查询账户余额,执行命令:peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
转账,执行命令:
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"]}'
在docker中,可以退出,执行命令:exit
关闭区块链网络,执行命令:./network_setup.sh down
注意:网络关闭,后面重新开启,数据恢复初始
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。