区块链技术大有可为,
安装组件如下:
1.Docker-compose:Docker 容器管理;
2.Go lang SDK:Go 语言开发、编译环境;
3.Git:git 镜像克隆与提交;
4.Rest Client: rest API 测试;
容器主要运行有:MemberSrv 和Peer;
一、HyperLedger Fabric环境准备
a)检查版本
$ uname �Cr
3.10.0-229.el7.x86_64
b)更新Centos
yum update
c)安装需要软件
yum install �Cy docker gcc gcc-c++
首先安装epel扩展源:
sudo yum -y install epel-release
然后安装python-pip
sudo yum -y install python-pip
pip install docker-compose
docker-compose �Cv #查询版本
yum -y install nodejs npm --enablerepo=epel #使用epel源安装nodejs及npm
验证npm安装:
npm install npm@latest
查看npm版本:
npm -v
二、下载源代码并创建Fabric网络
创建 Fabric 工程和项目目录
mkdir /opt/fabric
cd /opt/fabric/
下载并解压缩部署Fabric网络的相关组件 ,包括Docker Compose 脚本,通道创建/加入脚本,认证使用的加密要素等.
curl -L https://raw.githubusercontent.com/voodoo12345/polaris/master/fabpre.tar.gz -o fabpre.tar.gz 2> /dev/null; tar -xvf fabpre.tar.gz
三、使用Docker 创建Fabric网络 & 创建/加入通道(账本)
1)确保已经下载的docker-compose.yml文件中hyperledger/fabric-ccenv 镜像的标签是 latest,执行命令自动下载Docker镜像
docker-compose build
docker images #确认下载了三个镜像文件成功
2)按照docker-compose.yml文件创建Fabric网络,创建通道(正本),将Peer节点加入通道:
docker-compose up
3)查看容器:
docker ps
终端应该显示有6个独立运行的容器(3 个peer节点,1个 独立的 orderer,CLI 和 CA)
4)确保通道已成功创建,并且节点都成功加入:
docker exec -it cli sh #进入cli容器执行命令
5)查看通道创建/节点加入的结果:
cat results.txt
6)验证成功创建了创世块,执行如下命令:
ls -ltr myc1.block
四、下载演示程序和SDK 模块
1)创建案例程序目录
mkdir �Cp test
cd pest
下载用于部署、调用和查询案例智能合约的 javascript 代码 ,同时,它也包含了node SDK 依赖的模块.
curl -OOOOOO https://raw.githubusercontent.com/hyperledger/fabric-sdk-node/master/examples/balance-transfer/{config.json,package.json}
安装node 模块:
npm install
现在已经拥有了全部Fabric网络运行需要的组件.
五、使用 node SDK 注册/登录一个用户并执行部署/调用/查询操作
1)注册/登录 & 部署智能合约 (Linux or OSX):
GOPATH=$PWD node deploy.js
2)执行一个调用操作. 从 “a” 转移一定资产到 “b”:
node invoke.js
3)查询键值 “b”:
node query.js
4、firefox中安装POST接口测试工具:
在firefox的附加组件中下载Restclient插件安装
重启firefox后,打开RESTClient,进行POST测试
5、系统环境测试:deploy(部署),invoke(调用),query(查询) chaincode(智能合约)(vp0中peer的用户名和密码在 membersrvc.yaml 文件里为jim: 6avZQLwcUe9b)
已经建成的环境架构,目前Farbric Peer只有一个vp0
a)进入vp0容器
docker-compose exec vp0 bash
b)login
CLI方式:
peer network login jim
输入密码:6avZQLwcUe9b
Rest方式(在Body中放入如下代码):
{
"enrollId": "jim",
"enrollSecret": "6avZQLwcUe9b"
}
c)deploy(部署)
CLI方式:
CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode deploy -u jim -n mycc -c '{"Args": ["init","a","100","b","200"]}'
Rest方式(在Body中放入如下代码):
{
}
d)Invoke(调用)
CLI方式:
CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode invoke -u jim -l golang -n mycc -c '{"Args": ["invoke","10"]}'
e)query(查询)
CLI方式:
CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode query �Cu jim -l golang -n mycc -c '{"Args": ["query","b"]}'
CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode query -u jim -l golang -n mycc -c '{"Function": "query","Args": ["b"]}'