Hyperledger Composer中logic.js工作原理、事务关联及操作教程咨询
关于Hyperledger Composer中logic.js的常见问题解答
Hey there! Let's break down your questions about logic.js in Hyperledger Composer one by one:
1. logic.js的工作机制
logic.js是Hyperledger Composer应用里业务逻辑的核心载体,它的运行机制可以这么理解:
- 当你部署业务网络时,这个文件会被打包进链码,运行在Hyperledger Fabric的节点容器中。
- 它专门负责处理你在CTO模型文件里定义的交易和规则——每一种你声明的交易类型,都可以在
logic.js中编写对应的处理函数,当该交易被提交到网络时,函数就会触发执行。 - 这些函数在链码环境中运行,会被所有节点验证执行结果,确保逻辑一致性;函数中对资产、参与者的修改会直接写入账本,一旦部署完成,逻辑就具备不可篡改和可审计的特性。
2. logic.js与Transaction的关联?当然密切相关!
logic.js几乎就是为处理交易而生的:
- 首先你在CTO模型里定义交易类型(比如
TransferAsset、IssueInvoice); - 然后在
logic.js中通过Composer的API为这些交易注册处理函数,示例代码如下:/** * 处理资产转移交易 * @param {org.example.TransferAsset} tx 转移交易实例 * @transaction */ async function transferAsset(tx) { // 自定义逻辑:更新资产所有者、记录转移操作等 tx.asset.owner = tx.newOwner; const assetRegistry = await getAssetRegistry('org.example.Asset'); await assetRegistry.update(tx.asset); } - 如果没有
logic.js,交易只是单纯的数据载体,无法执行任何自定义业务规则(比如验证转移权限、关联更新其他资产等)。
3. 如何从logic.js中访问列表(Registry)?
在Composer里,资产、参与者、交易的集合都通过Registry(注册表)来管理,从logic.js访问的步骤如下:
- 获取注册表实例:使用Composer内置的异步函数获取对应类型的注册表:
// 获取资产注册表 const assetRegistry = await getAssetRegistry('org.example.Asset'); // 获取参与者注册表 const participantRegistry = await getParticipantRegistry('org.example.Participant'); - 对注册表执行操作:
- 根据ID查询单个记录:
const targetAsset = await assetRegistry.get('ASSET-001'); - 查询注册表中所有记录:
const allAssets = await assetRegistry.getAll(); - 更新现有记录:
targetAsset.value = 150; await assetRegistry.update(targetAsset); - 添加新记录:
const newAsset = factory.newResource('org.example', 'Asset', 'ASSET-002'); newAsset.value = 80; await assetRegistry.add(newAsset);
async/await或者Promise链式调用处理。 - 根据ID查询单个记录:
4. 学习logic.js可执行操作的优质资源
不用找外部链接,这些官方资源就足够权威实用:
- Hyperledger Composer官方文档:其中的「业务逻辑」章节详细覆盖了
logic.js的所有编写要点,包括交易处理、注册表交互、错误处理、函数调用等; - 官方示例网络:比如
basic-sample、trade-network这类预构建示例,直接查看它们的logic.js文件,能学习到实际场景下的常见操作(如资产转移、参与者更新); - Composer开发者教程:一步步引导你从创建业务模型到编写测试
logic.js函数,非常适合上手实践。
内容的提问来源于stack exchange,提问作者Anjan Biswas
相关产品推荐
相关产品推荐

