Fabric--使用多通道

本文介绍如何在Hyperledger Fabric环境中使用多通道进行网络部署,包括创建通道配置交易、生成锚节点配置更新文件、创建及加入通道等关键步骤。

使用多通道

$ cd ~/hyfa/fabric-samples/chaincode-docker-devmode

$ sudo docker-compose -f docker-compose-simple.yaml down   

$ cd ../first-network

创建一个应用通道的配置交易

务必替换$CHANNEL_NAME或设置CHANNEL_NAME为可在整个说明中使用的环境变量

$ export CHANNEL_NAME=mychannel2 

指定使用 configtx.yaml 配置文件中的 TwoOrgsChannel 模板, 来生成新建通道的配置交易文件,

$ sudo ../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME

输出如下

11:13:24.984 CST [common/tools/configtxgen] main -> INFO 001 Loading configuration
11:13:24.992 CST [common/tools/configtxgen] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
11:13:24.993 CST [msp] getMspConfig -> INFO 003 Loading NodeOUs
11:13:24.994 CST [msp] getMspConfig -> INFO 004 Loading NodeOUs
11:13:25.016 CST [common/tools/configtxgen] doOutputChannelCreateTx -> INFO 005 Writing new channel tx

生成锚节点配置更新文件

锚节点配置更新文件用来对组织的锚节点进行配置

同样基于 configtx.yaml 配置文件生成新建通道文件, 每个组织都需要分别生成且注意指定对应的组织名称

$ sudo ../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP

$ sudo ../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP

启动网络

$ sudo docker-compose -f docker-compose-cli.yaml up -d

进入Docker容器

执行如下命令进入到CLI容器中

$ sudo docker exec -it cli bash

创建通道

检查环境变量是否正确设置

echo $CHANNEL_NAME

设置环境变量

export CHANNEL_NAME=mychannel2

创建通道

peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

加入通道

应用通道所包含组织的成员节点可以加入通道中

peer channel join -b mychannel2.block -o orderer:7050

更新锚点

使用Org1的管理员身份更新锚节点配置

peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

使用Org2的管理员身份更新锚节点配置

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp CORE_PEER_ADDRESS=peer0.org2.example.com:7051 CORE_PEER_LOCALMSPID="Org2MSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org2MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

列出所加入的通道

peer channel list

list命令会列出指定的Peer节点已经加入的所有应用通道的列表.

### 使用 Fabric Gateway 在 Hyperledger Fabric 中 为了利用 Fabric Gateway 进行交互,开发者需遵循特定的配置流程和编程实践。Fabric Gateway 提供了一种简化的方式与 Hyperledger Fabric 网络互动。 #### 安装依赖库 首先,在应用程序环境中安装必要的客户端 SDK 或者直接使用官方推荐的 `@hyperledger/fabric-gateway` 包来构建应用接口[^1]: ```bash npm install @hyperledger/fabric-gateway ``` #### 初始化网关连接 创建并初始化一个新的网关实例用于后续操作之前,需要设置好相应的环境变量或参数,比如通道名称、背书节点地址等信息。下面是一个简单的 JavaScript 例子展示如何建立到 Fabric 的安全连接[^2]: ```javascript // Import required modules from the fabric gateway package. const { Gateway, Wallets } = require('@hyperledger/fabric-gateway'); const path = require('path'); async function main() { try { // Load connection profile; will be used to locate a gateway peer and connect to it. const ccpPath = path.resolve(__dirname, '..', 'connection.json'); // Create a new file system based wallet for managing identities. const walletPath = path.join(process.cwd(), 'wallet'); const wallet = await Wallets.newFileSystemWallet(walletPath); // Check to see if we've already enrolled the user. const identity = await wallet.get('appUser'); if (!identity) { console.log('An identity for the user "appUser" does not exist in the wallet'); return; } // Create a new gateway instance for interacting with the fabric network. const gateway = new Gateway(); await gateway.connect(ccpPath, { wallet, identity: 'appUser', discovery: { enabled: true, asLocalhost: false } }); // Access the network and contract. const network = await gateway.getNetwork('mychannel'); const contract = network.getContract('fabcar'); ... } } main().catch(console.error); ``` 这段代码展示了怎样加载身份钱包、读取连接文件以及获取指定网络上的合约对象。这里假设已经有一个名为 `'fabcar'` 的智能合约部署到了目标通道上,并且该用户具有足够的权限执行所需的操作。 #### 执行交易 一旦成功建立了网关链接并且获得了对应的合约对象之后,就可以调用其方法来进行各种类型的请求了——无论是提交新事务还是查询现有状态数据库中的记录都可以轻松实现。例如,发起一次更新账本条目的提议: ```javascript await contract.submitTransaction('createCar', 'CAR12', 'Honda', 'Accord', 'Black', 'Tom'); ``` 对于只读型的查询,则可以直接通过 evaluate 方法获得返回的结果而无需等待共识过程完成即可得到即时反馈: ```javascript let result = await contract.evaluateTransaction('queryAllCars'); console.log(`Query returned ${result.toString()}`); ``` 以上就是基于 Fabric Gateway 实现基本功能的一个概览介绍;实际项目中可能还会涉及到更多细节方面的考量,如错误处理机制的设计、性能优化策略的选择等问题都需要进一步深入研究探讨。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值