Hyperledger-Fabric技术文档1--Fabric初体验

来源:互联网 发布:冒泡法排序c语言解释 编辑:程序博客网 时间:2024/05/19 17:04

这篇文档是Hyperledger Fabric官网文档里面的Getting Started章节的翻译,翻译更新日期是2017年6月11日,这篇文档适用于Fabric标签为“1.0.0-beta”的docker映像,如果是使用的其他标签的docker映像,可能在体验过程中会遇到出错信息。

强烈推荐在linux平台下进行操作,这篇翻译是针对linux平台的,windows下坑太多。

原文链接:https://hyperledger-fabric.readthedocs.io/en/latest/getting_started.html


这部分文档提供了关于一个由两个组织(每个组织维护着两个对等节点(peer node))和一个单独的排序服务(ordering service)组成的样本Fabric网络的指导。


一、安装前提:

在正式开始前,你需要检查一下你是否已经在你的机器上安装了相应到工具,之后才能在机器上开发区块链应用和运行Hyperledger Fabric。下面是开发或运行过程中需要用到的工具:

1、cURL;

2、Docker和Docker Compse:需要1.12版本以上的Docker;你可以在终端命令行中使用docker --version和docker compose --version来分别检查docker和docker compose的版本;

3、Go编程语言:Hyperledger Fbric使用的是1.7.x版本的Go语言及其组件;


二、下载组件和docker镜像:

1、在你的机器上选择一个位置来存放Fabric组件和二进制文件,在命令行中cd进入位置后,运行如下命令:

mkdir fabric-samplecd fabric-sample
接下来执行如下命令:

curl -sSL https://goo.gl/LQkuoh | bash
这个命令会下载并且执行一个脚本(bootstrap.sh),这个脚本抽取出建立Fabric网络需要的所有组件,然后还会将这个组件存放在fabric-sample文件夹下的release文件夹下,这个脚本还会抽取出两个和你的运行平台相应到二进制文件:cryptogen和configtxgen,这些后面会用到,最后这个脚本还会从DockerHub上抽取Hyperledger Fabric的docker映像到你的本地docker注册库中。


三、快捷体验:

我们提供了一个操作Fabric的docker映像去快速启动网络、添加peer进入channel并且促成交易的脚本,如果你已经熟悉了Fabric,或者你只是想看看Fabric实际中是如何运行的,可以使用我们提供的快捷体验脚本。

这个脚本可以说做了所有事情,它唤起generateArtifacts.sh去执行cryptogen和configtxgen工具,然后还会执行script.sh去启动网络,添加peer到一个生成的channel中去,然后促成交易。如果你不提供channel名称的话,脚本会使用默认名mychannel,下面的命令中出现的cli时限(cli timeout)参数是可选的,如果你不提供该参数的话,你的docker中的cli container会默认在脚本执行结束后关闭。

cd进入到release文件夹下面和你的平台相应的文件夹下,比如release/linux-amd64,然后执行下面两个命令中的其中一个:

./network_setup.sh up

或者(注意<>中是提示你要替换的参数)

./network_setup.sh up <channel-ID> <timeout-value>

这个样例执行完毕之后,可以再次执行脚本来关闭docker容器、移除加密材料和四个生成的组件,还会移除我们创建的链码(chaincode)映像:

./network_setup.sh down
如果你想要了解底层工具和启动机制,请接着阅读,在接下来几节里,我们会走完建立一个功能完整的Fabric网络的各个步骤。


四、工具介绍:

1、Crypto Generator:我们将会使用cryptogen工具为我们的各类网络实体产生加密材料。cryptogen是如何工作的呢?cryptogen会使用这样一个文件crypto-config.yaml,这个文件里包含了Fabric网络的拓扑结构,帮助我们生成一个网络中各个组织和组织里各个部件的证书库,每个组织都有一个根证书(ca-cert),这个根证书将特定的部件(peer和orderer)绑定到该组织。Fabric网络内部实体间的交易和通信由实体的私玥进行签名,然后用实体的公玥进行验证。我们使用rypto-config.yaml文件中的“count”变量的值来确定每个组织内部含有的peer数量,在我们的样例中这个数字是2。我们运行完这个工具后,这些证书会被放入一个名叫crypto-config的文件夹里。

2、Configuration Trasaction Generator:configtxgen工具用来创建4个配置组件:排序启动区块(orderer bootstrap block), Fabric channel配置交易(fabric channel configuration transaction), 和两个锚对等交易(anchor peer transactions - one for each Peer Org)。这个排序区块是排序服务的创世区块,这个channel配置交易文件会在channel创建的时候被广播到排序节点处(orderer),锚对等交易确定了在这个channel里每个组织的锚对等节点(anchor peer)。configtxgen工具使用文件configtx.yaml,这个文件包含了这个样例网络的定义。


五、运行工具创建组件

你可以在generateArtifacts.sh脚本中找到要运行的命令,但是为了方便还是在这里讲一下。

首先运行cryptogen工具,请确保你是和你的平台相对应的文件夹下,比如release/linux-amd64,然后在命令行里运行如下命令:

./bin/cryptogen generate --config=./crypto-config.yaml

你可能会看到向下面这样的一些警告,无伤大雅,可以忽略:

[bccsp] GetDefault -> WARN 001 Before using BCCSP, please call InitFactories(). Falling back to bootBCCSP.
接下来要告诉configtxgen到哪里去寻找将要用到的config.yaml文件,所以运行如下命令:

export FABRIC_CFG_PATH=$PWD

然后创建排序创世区块:

./bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

你可以忽略关于中介证书的日志输出,在加密的实现中我们用不到这些。

创channel交易组件(注意把<channel-ID>替换成你想设置的channel名称):

./bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID <channel-ID>

为一号组织Org1定义在channel里的锚对等节点(注意把<channel-ID>替换成相应的channel名称):

./bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID <channel-ID> -asOrg Org1MSP

为二号组织Org2定义在channel里的锚对等节点(注意把<channel-ID>替换成相应的的channel名称):

./bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID <channel-ID> -asOrg Org2MSP

六、启动网络:

我们要操作一个docker compose脚本来编织我们的网络,docker compose指向我们之前用cURL下载好的镜像,然后会利用之前生成的orderer.block启动排序节点。但是在启动网络之前,请先打开文件docker-compose-cli.yaml,注释掉cli容器里面的script.sh,你的这个文件相关部分看起来应该是这个样子的:

working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer# command: /bin/bash -c './scripts/script.sh ${CHANNEL_NAME}; sleep $TIMEOUT'volumes

如果不注释掉的话,当启动网络的时候,这个脚本会执行在cli容器里的所有命令,就达不到手动一步步走完全过程的目的了。

传递一个略微高一点的数值给TIMEOUT(按秒计算),否则cli容器会默认在60秒后自动退出。

启动网络:

CHANNEL_NAME=<channel-id> TIMEOUT=<pick_a_value> docker-compose -f docker-compose-cli.yaml up -d

七、环境变量:这部分可以不做修改按照默认的运行,如果想要修改,可以参考原文相关部分。

八、创建并加入channel:

使用exec命令进入cli容器:

docker exec -it cli bash

如果进入成功的话,可以在命令行看到类似下面这样的输出:

root@0d78bb69300d:/opt/gopath/src/github.com/hyperledger/fabric/peer#

接着运行如下命令(#后的是注释,不需要输入命令行,注意替换$CHANNEL_NAME为你的channel名称):

# the channel.tx file is mounted in the channel-artifacts directory within your cli container# as a result, we pass the full path for the file# we also pass the path for the orderer ca-cert in order to verify the TLS handshake# be sure to replace the $CHANNEL_NAME variable appropriatelypeer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem

这个命令会返回一个创世区块-<channel-ID.block>,我们将会使用这个区块来执行加入channel的操作,它包含了channel.tx里面特定的配置信息。

现在让我们添加peer0.org1.example.com到channel里:

# By default, this joins ``peer0.org1.example.com`` only# the <channel-ID>.block was returned by the previous command peer channel join -b <channel-ID.block>

修改上面第七节的环境变量后你也可以添加其他节点到channel中。


九、下载链码和初始化:

应用通过链码和区块链账本进行交互,因此我们需要下载链码到任何需要执行和监督交易的peer上,然后还要在channel里初始化链码。首先,要先下载样例GO语言链码到4个peer的其中之一上:

peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

接下来要在channel中初始化链码(给a用户赋初值100,b用户赋初值200):

# be sure to replace the $CHANNEL_NAME environment variable# if you did not install your chaincode with a name of mycc, then modify that argument as wellpeer chaincode instantiate -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{"Args":["init","a", "100", "b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"

执行查询(查询a的余额,正常应该返回100):

# be sure to set the -C and -n flags appropriatelypeer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'

执行交易(用户a把10单位的钱付给用户b):

# be sure to set the -C and -n flags appropriatelypeer chaincode invoke -o orderer.example.com:7050  --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem  -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}'

再次查询(查询a的余额,正常应该返回90):

# be sure to set the -C and -n flags appropriatelypeer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'

十、关闭网络并清除:

./network_setup.sh down

至此,你已经完整地走了一遍构建Hyperledger Fabric区块链网络并进行交易的流程了。

原创粉丝点击