(概念)
排序服务
每个Fabric网络还包括一个排序服务。
排序服务允许对等节点专注于验证交易并将它们提交到账本。 排序节点从客户那里收到认可的交易后,他们就交易顺序达成共识,然后添加区块。 这些区块之后被分配给添加这些区块到账本的对等节点。 排序节点还可以操作定义Fabric网络的功能的系统通道, 系统通道定义了哪个组织是该联盟的成员。
该示例网络使用一个单节点Raft排序服务,该服务由排序组织运行。 您可以看到在您机器上正在运行的排序节点orderer.example.com
。 虽然测试网络仅使用单节点排序服务,一个真实的网络将有多个排序节点,由一个或多个多个排序者组织操作。 不同的排序节点将使用Raft共识算法达成跨交易顺序的共识网络。
智能合约与链码
在Fabric中,智能合约作为链码以软件包的形式部署在网络上。 链码安装在组织的对等节点上,然后部署到某个通道,然后可以在该通道中用于认可交易和区块链账本交互。 在将链码部署到通道前,该频道的成员需要就链码定义达成共识,建立链码治理。 何时达到要求数量的组织同意后,链码定义可以提交给通道,并且可以使用链码了。
链码通过应用提交的交易来初始化以及管理账本状态。
链码通常用来处理网络中成员共同接受的业务逻辑,所以它可以被认为是“智能合约”。
Fabric 链码生命周期
Fabric 链码生命周期是一个过程,它允许多个组织在使用一个链码之前就如何操作达成一致。网络操作者可以使用 Fabric 生命周期来展开以下的任务:
测试网络
启动测试网络test-network
./network.sh down
删除先前运行的所有容器或工程./network.sh up
此命令创建一个由两个对等节点和一个排序节点组成的Fabric网络。 运行./network.sh up
时没有创建任何channel, 虽然我们将在后面的步骤实现。 如果命令执行成功,您将看到已创建的节点的日志:
使用例程创建通道
您可以使用network.sh脚本在Org1和Org2之间创建通道并加入他们的对等节点。 运行以下命令以创建一个默认名称为“ mychannel”的通道:./network.sh createChannel
您也可以使用channel标志创建具有自定义名称的通道。 作为一个例子,以下命令将创建一个名为channeljin的通道:./network.sh createChannel -c channeljin
在通道启动一个链码
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-java -ccl java
或./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
后面网络交互就照着做
下一步
既然您已经使用测试网络在您的本地计算机上部署了Hyperledger Fabric,您可以使用教程来开始开发自己的解决方案:
- 使用将智能合约部署到通道 教程了解如何来将自己的智能合约部署到测试网络。
- 访问编写您的第一个应用程序 教程了解如何从您的客户端程序使用Fabric SDK提供的API调用智能合约。
- 如果您准备将更复杂的智能合约部署到网络,请跟随商业票据教程 探索两个组织使用区块链网络进行商业票据交易的用例。
您可以在教程页上找到Fabric教程的完整列表。
用CA建立网络
默认情况下,脚本使用cryptogen工具创建证书和密钥。(比如以上)
测试网络脚本还提供了使用证书颁发机构(CA)的网络的启动选项。 在产品网络中,每个组织操作一个CA(或多个中间CA)来创建属于他们的组织身份。 所有由该组织运行的CA创建的身份享有相同的组织信任根源。./network.sh up -ca
测试网络使用Fabric CA客户端以每个组织的CA注册节点和用户身份。 之后这个脚本使用enroll命令为每个身份生成一个MSP文件夹。 MSP文件夹包含每个身份的证书和私钥,以及在运营CA的组织中建立身份的角色和成员身份。
检查Org1管理员用户的MSP文件夹:tree organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/
每次记得关闭docker容器
直接用./network.sh down
使用configtx.yaml创建通道配置
cryptogencryptogen
是用来生成 Hyperledger Fabric 密钥材料的工具。它为测试提供了一种预配置网络的工具。通常它不应使用在生产环境中。
最后跑的命令2.2的示例configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block -channelID fabric-channel configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP
2.3的示例configtxgen -profile TwoOrgsApplicationGenesis -outputBlock ./channel-artifacts/genesis.block -channelID fabric-channel
部署节点
使用docker的话这些配置文件会有一个默认的内置在docker hyperledger fabric官方容器中
即一般测试会写一个docker-compose.yaml的配置文件来用docker创建节点
否则一般有:
创建一个 peer 节点
在创建 peer 节点之前,你需要为 peer 节点定制配置文件。在 Fabric 中,这个文件叫做 core.yaml
。
创建一个排序节点
与创建 peer 节点不同,你将需要创建一个创世纪块(或者引用已经创建的块,如果将排序节点添加到现有的排序服务中),并在启动排序节点之前指定其路径。
在Fabric中,这个用于排序节点的配置文件称为 orderer.yaml
。
最后部署链码。。。
1 | # education程序解读 |
(记)
docker compose用docker启动节点
在有docker-compose.yaml的地方docker-compose up
即可
删除container和image
1 | docker container ls -a #查看所有container |
docker rm -f $(docker ps -aq) docker rmi -f $(docker images -q)
进入容器内bash
docker exec -it cli1 bash
go代理
go env -w GOPROXY=https://goproxy.cn,direct