Composer:加速构建Hyperledger Fabric区块链应用的核心框架
引言:区块链应用开发的痛点与解决方案
你是否还在为Hyperledger Fabric区块链应用开发的复杂性而困扰?繁琐的智能合约编写、复杂的网络配置、冗长的部署流程,这些问题是否让你望而却步?本文将详细介绍Hyperledger Composer框架,它曾是构建Hyperledger Fabric区块链应用的得力助手,能够显著简化开发流程,提高开发效率。读完本文,你将了解Composer的核心功能、架构设计、使用方法,以及在当前环境下的迁移建议。
1. Hyperledger Composer概述
1.1 什么是Hyperledger Composer
Hyperledger Composer是一个应用开发框架,旨在简化和加速基于Hyperledger Fabric的区块链应用的创建过程。它提供了一套完整的工具链和编程模型,使开发者能够更轻松地定义业务网络、资产、参与者和交易,并快速部署和测试应用。
1.2 核心功能
Hyperledger Composer具有以下核心功能:
- 业务网络定义(BND):使用简单的建模语言(CTO)定义资产、参与者、交易和关系。
- 命令行工具(CLI):提供丰富的命令用于创建、部署、测试和管理业务网络。
- REST服务器:自动生成REST API,方便与外部系统集成。
- Playground:基于Web的可视化工具,用于设计、测试和部署业务网络。
- 运行时环境:提供在Hyperledger Fabric上执行智能合约的运行时支持。
1.3 项目状态说明
注意:截至2019年8月29日,Hyperledger Composer项目已进入弃用状态。维护者不再积极开发新功能或提供GitHub issues支持,但仍会合并代码更改的拉取请求。强烈建议使用Hyperledger Fabric v1.4+,它对开发者体验进行了重大改进,包括新的编程模型。
2. Composer架构设计
2.1 整体架构
Hyperledger Composer的架构主要由以下组件构成:
2.2 核心组件详解
2.2.1 容器(Container)
容器负责启动引擎,将客户端和管理API的调用路由到引擎,并通过一组服务向引擎公开区块链。目前有两种容器实现:
- Hyperledger Fabric(Go):Composer-Runtime-Hyperledger-Fabric
- Web/浏览器(JavaScript):Composer-Runtime-Web
2.2.2 引擎(Engine)
引擎提供管理业务网络、注册表和资源以及执行交易处理器函数的所有核心代码。引擎代码必须支持多个"进行中"请求,这通过容器传递给引擎的上下文(Context)实现。
2.2.3 服务(Services)
容器提供一组服务供引擎使用,主要包括:
- 日志服务:用于写入日志条目。
- 数据服务:用于与世界状态交互。
3. 快速入门:使用Composer构建区块链应用
3.1 环境设置
在开始使用Composer之前,需要安装以下工具:
- Git
- Docker和Docker Compose
- Node.js v8.9或更高版本(但不支持Node v9)
- Chrome浏览器(用于测试)
- softhsm 2.0.0(用于完整的集成测试)
安装命令示例(Ubuntu):
# 安装Docker和Docker Compose
sudo apt-get update
sudo apt-get install docker.io docker-compose
# 安装Node.js
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
# 安装softhsm 2.0.0
sudo apt-get -y install libssl-dev
mkdir softhsm && cd softhsm
curl -O https://dist.opendnssec.org/source/softhsm-2.0.0.tar.gz
tar -xvf softhsm-2.0.0.tar.gz
cd softhsm-2.0.0
./configure --disable-non-paged-memory --disable-gost
make
sudo make install
sudo mkdir -p /var/lib/softhsm/tokens
sudo chmod 777 /var/lib/softhsm/tokens
softhsm2-util --init-token --slot 0 --label "ForComposer" --so-pin 1234 --pin 98765432
3.2 安装Composer组件
# 安装Composer CLI
npm install -g composer-cli
# 安装Composer REST服务器
npm install -g composer-rest-server
# 安装Composer Playground(可选,用于本地运行)
npm install -g composer-playground
3.3 创建业务网络定义
3.3.1 定义模型(CTO文件)
创建一个名为sample.cto的文件,定义资产、参与者和交易:
namespace org.example.basic
asset SampleAsset identified by assetId {
o String assetId
o String value
--> SampleParticipant owner
}
participant SampleParticipant identified by participantId {
o String participantId
o String firstName
o String lastName
}
transaction SampleTransaction {
--> SampleAsset asset
o String newValue
}
3.3.2 编写交易处理器函数
创建一个名为logic.js的文件,实现交易逻辑:
/**
* Sample transaction processor function.
* @param {org.example.basic.SampleTransaction} tx The sample transaction instance.
* @transaction
*/
function sampleTransaction(tx) {
// Update the asset's value
tx.asset.value = tx.newValue;
// Get the asset registry for the asset
return getAssetRegistry('org.example.basic.SampleAsset')
.then(function(assetRegistry) {
// Update the asset in the asset registry
return assetRegistry.update(tx.asset);
});
}
3.3.3 创建业务网络归档(BNA)
使用Composer CLI创建BNA文件:
composer archive create --sourceType dir --sourceName . -a basic-sample-network.bna
3.4 部署业务网络
3.4.1 启动Hyperledger Fabric网络
# 下载Fabric开发环境脚本
curl -O https://raw.githubusercontent.com/hyperledger/composer-tools/master/packages/fabric-dev-servers/fabric-dev-servers.zip
unzip fabric-dev-servers.zip
cd fabric-dev-servers
# 下载Fabric镜像
./downloadFabric.sh
# 启动Fabric网络
./startFabric.sh
./createPeerAdminCard.sh
3.4.2 部署BNA文件
# 安装业务网络
composer network install --card PeerAdmin@hlfv1 --archiveFile basic-sample-network.bna
# 启动业务网络
composer network start --networkName basic-sample-network --networkVersion 0.0.1 --card PeerAdmin@hlfv1 --networkAdmin admin --networkAdminEnrollSecret adminpw
# 创建业务网络卡片
composer card import --file admin@basic-sample-network.card
# 验证部署
composer network ping --card admin@basic-sample-network
3.5 启动REST服务器
composer-rest-server -c admin@basic-sample-network -n never -w true
启动后,可以通过访问http://localhost:3000来使用自动生成的REST API。
4. Composer CLI详解
Composer提供了丰富的命令行工具,用于管理业务网络、资产、参与者和交易等。以下是一些常用命令:
4.1 业务网络管理
# 创建业务网络归档
composer archive create --sourceType dir --sourceName <directory> -a <archive-file>
# 安装业务网络
composer network install --card <card-name> --archiveFile <archive-file>
# 启动业务网络
composer network start --networkName <network-name> --networkVersion <version> --card <card-name> --networkAdmin <admin-id> --networkAdminEnrollSecret <admin-secret>
# 升级业务网络
composer network upgrade --networkName <network-name> --networkVersion <new-version> --card <card-name>
# ping业务网络
composer network ping --card <card-name>
4.2 资产和参与者管理
# 创建资产
composer asset create -c <card-name> -d '{"$class":"org.example.basic.SampleAsset","assetId":"asset1","value":"Hello World","owner":"resource:org.example.basic.SampleParticipant#participant1"}'
# 列出资产
composer asset list -c <card-name> -n org.example.basic.SampleAsset
# 创建参与者
composer participant create -c <card-name> -d '{"$class":"org.example.basic.SampleParticipant","participantId":"participant1","firstName":"John","lastName":"Doe"}'
4.3 交易提交
# 提交交易
composer transaction submit -c <card-name> -d '{"$class":"org.example.basic.SampleTransaction","asset":"resource:org.example.basic.SampleAsset#asset1","newValue":"New Value"}'
4.4 身份管理
# 注册身份
composer identity issue -c <card-name> -f <identity-card-file> -u <user-id> -a "resource:org.example.basic.SampleParticipant#participant1"
# 导入身份卡片
composer card import -f <identity-card-file>
# 列出所有卡片
composer card list
# 删除卡片
composer card delete -c <card-name>
5. Composer Playground使用指南
Composer Playground是一个基于Web的可视化工具,用于设计、测试和部署业务网络。可以通过以下方式启动:
composer-playground
然后访问http://localhost:8080即可使用。
5.1 主要功能
- 业务网络设计:通过图形界面定义资产、参与者和交易。
- 测试:在浏览器中模拟交易,测试业务逻辑。
- 部署:将业务网络部署到本地或远程Fabric网络。
- 身份管理:创建和管理网络身份。
5.2 使用流程
- 创建新的业务网络或导入现有网络。
- 使用模型编辑器定义资产、参与者和交易。
- 使用脚本编辑器编写交易处理器函数。
- 部署业务网络到Fabric运行时。
- 创建测试参与者和资产。
- 提交交易并验证结果。
6. 从Composer迁移到Hyperledger Fabric v1.4+
由于Hyperledger Composer已被弃用,建议用户迁移到Hyperledger Fabric v1.4+。以下是迁移的主要步骤和注意事项:
6.1 Composer与Fabric v1.4+的主要差异
| 特性 | Hyperledger Composer | Hyperledger Fabric v1.4+ |
|---|---|---|
| 建模语言 | CTO (Composer Modeling Language) | Chaincode (Go/Node.js/Java) |
| 交易处理 | Transaction Processor Functions | Chaincode Functions |
| 资产管理 | Declarative (CTO) + JavaScript | Imperative (Chaincode) |
| 访问控制 | ACL Rules | Fabric Access Control Lists + Chaincode Logic |
| 部署方式 | BNA文件 + Composer CLI | Chaincode Package + Fabric CLI |
6.2 迁移步骤概要
- 学习Fabric新编程模型:熟悉Fabric的链码开发、通道配置、身份管理等概念。
- 转换业务模型:将CTO文件中的资产、参与者和交易定义转换为Fabric链码中的数据结构。
- 重写业务逻辑:将Composer交易处理器函数转换为Fabric链码函数。
- 重构访问控制:将Composer ACL规则转换为Fabric ACL和链码中的访问控制逻辑。
- 修改部署流程:使用Fabric CLI替代Composer CLI进行链码打包、安装和实例化。
- 更新应用集成:修改应用程序以使用Fabric SDK替代Composer Client SDK。
6.3 资源推荐
7. 总结与展望
Hyperledger Composer曾是加速Hyperledger Fabric应用开发的强大框架,它通过提供高级建模语言、可视化工具和简化的部署流程,大大降低了区块链应用开发的门槛。然而,随着Hyperledger Fabric的不断发展,其内置的开发体验已经得到了显著改善,Composer的功能逐渐被Fabric本身所吸收。
虽然Composer项目已被弃用,但它在区块链应用开发史上留下了重要的一笔。对于仍在使用Composer的项目,建议逐步迁移到Hyperledger Fabric v1.4+或更高版本,以享受更强大、更稳定的区块链开发体验。
未来,随着Hyperledger Fabric的持续演进,我们可以期待更加简化的开发流程、更丰富的功能和更好的性能,从而进一步推动区块链技术在企业中的应用和普及。
8. 附录:常用资源
8.1 官方文档
8.2 社区资源
- Hyperledger Composer GitHub仓库
- Hyperledger Fabric GitHub仓库
- Stack Overflow (hyperledger-composer标签)
- Hyperledger RocketChat
8.3 示例项目
希望本文能帮助你了解Hyperledger Composer框架及其在区块链应用开发中的作用。如果你有任何问题或建议,请在评论区留言。别忘了点赞、收藏并关注我们,获取更多区块链技术相关内容!
下期预告:《Hyperledger Fabric v2.x新特性详解与实战》
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



