所有参考资料贴在最后。
1. Vagrant
Vagrant是构建在虚拟化技术之上的虚拟机运行环境管理工具。通过Vagrant可以方便实现的对虚拟机的管理,包括建立和删除虚拟机、配置虚拟机运行参数、管理虚拟机运行状态、自动化配置和安装开发环境必须的各类软件、打包和分发虚拟机运行环境等。 ^foot1
简单地说,Vagrant让我们可以通过代码的方式快速地、可重复地创建针对不同虚拟环境的虚拟机,包括Virtualbox、AWS、Docker等。它使得我们可以一次性地、自动创建多个环境相同的虚拟机,对于软件开发和测试尤其有用。^foot2
使用Vagrant能尽可能避免”Work on my machine“错误,缩短搭建开发环境的时间。^foot2
2. go
Go语言需要配置GOPATH
环境变量,指向代码目录。
管理员模式打开CMD输入go env
验证。
3. 下载源码
git clone https://github.com/hyperledger/fabric.git
git clone https://github.com/hyperledger/fabric-ca.git
4. 启动vagrant
cd F:\hyperledger\1\fabric\devenv
vagrant up
vagrant ssh
“No Usable default provider could be found for your system”
vagrant up --provider=virtualbox
查询错误信息,发现vagrant对virtualbox的版本有要求。具体版本支持。
重新安装virtualbox 5.1后成功。“Couldn’t open file /Users/…/base”
vagrant init hashicorp/fabric vagrant up
具体参见 1 2
我的解决方法是重新Clone the fabric folder。不要用vagrant init
修改原有的Vagrantfile
配置文件。“Can’t download boxes on Windows 10”
问题:mitchellh/vagrant#6754)
If thevagrant up
command fails it may be because you do not have the Microsoft Visual C++ Redistributable package installed. 下载地址。^foot3“Vagrant box downloads extremely slow”
#5319
take a walk or make yourself a sandwich. Get way from screen for a little bit.“ubuntu xenial64 box password”
在目录
~/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-xenial64/20161221.0.0/virtualbox/Vagrantfile
中有密码
5. 使用本地二进制文件
在fabric目录下编译peer和orderer:
make clean
make native
生成ccenv
镜像:
make peer-docker
然后打开两个终端都进入vagrant,至此有三个终端都在vagrant里。
前首先清空ledger文件夹·/var/hyperledger/·(每次运行后,为避免错误或重复,都要清空):
rm -rf /var/hyperledger/*
终端1
使用configtxgen
工具创建orderer创世区块:
configtxgen -profile SampleSingleMSPSolo -outputBlock orderer.block
终端2
用刚生成的创世区块启动orderer:
ORDERER_GENERAL_GENESISMETHOD=file ORDERER_GENERAL_GENESISFILE=./orderer.block orderer
终端1
创建 channel configuration transaction:
configtxgen -profile SampleSingleMSPSolo -outputCreateChannelTx channel.tx -channelID <channel-ID>
执行成功会在当前目录生成channel.tx
终端3
以chainless
模式启动peer:
peer node start --peer-defaultchain=false
Create channel
以channel.tx
为参数创建channel:
peer channel create -o 127.0.0.1:7050 -c mychannel -f channel.tx
执行后在当前目录生成一个channel的创世区块mychannel.block
Join channel
通过channel的创世区块mychannel.block
加入channel:
peer channel join -b mychannel.block
Install chaincode
在peer上安装chaincode:
peer chaincode install -o 127.0.0.1:7050 -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
执行成功后查看文件可以看到mycc.1.0:
ls /var/hyperledger/production/chaincodes
Instantiate chaincode
实例化chaincode:
peer chaincode instantiate -o 127.0.0.1:7050 -C mychannel -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{"Args":["init","a", "100", "b","200"]}'
docker ps
查看运行中的容器,如果chaincode启动成功,则显示:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd9c6bda7560 dev-jdoe-mycc-1.0 "chaincode -peer.a..." 5 seconds ago Up 5 seconds dev-jdoe-mycc-1.0
Invoke chaincode
调用chaincode从“a”转移“10”给“b“:
peer chaincode invoke -o 127.0.0.1:7050 -C mychannel -n mycc -c '{"Args":["invoke","a","b","10"]}'
Query chaincode
查询”a“的值:
返回值应是 90
peer chaincode query -o 127.0.0.1:7050 -C mychannel -n mycc -c '{"Args":["query","a"]}'
运行完成后不要忘记清空ledger文件夹/var/hyperledger/:
rm -rf /var/hyperledger/*