使用Hyperledger Composer V0.16.0能否不改交易ID编辑已提交交易?
嘿,我来帮你理清这个问题~
首先得明确一个核心点:Hyperledger Fabric的账本是不可篡改的,一旦交易被提交并写入区块,交易本身(包括交易ID、内容、签名等)就会被永久记录,无法再编辑或修改——这是区块链保证数据完整性和可追溯性的核心特性。所以你说的“直接编辑已提交的交易”本身是做不到的。
不过,如果你的需求是基于已提交的交易,更新关联的业务资产/参与者数据(比如交易触发了资产状态变化,之后需要调整该资产的信息,或者补充相关业务字段),那是完全可行的,而且不需要修改原交易的ID,只需要提交新的交易来更新业务数据即可。
示例.cto文件参考
下面是一个简单的业务模型示例,包含资产、初始交易和用于更新的交易定义:
namespace org.example.trading // 定义业务资产:订单 asset Order identified by orderId { o String orderId o String status // 比如 "CREATED"、"SHIPPED"、"DELIVERED" o Double amount --> Customer owner // 关联订单所属的客户 } // 定义参与者:客户 participant Customer identified by customerId { o String customerId o String name } // 初始创建订单的交易 transaction CreateOrder { --> Order order } // 用于更新订单信息的交易(无需关联原交易ID,直接操作目标资产) transaction UpdateOrder { --> Order order // 指定要更新的订单 o String newStatus // 新的订单状态 o Double newAmount optional // 可选的金额更新字段 }
操作说明
- 当你通过Swagger API提交
CreateOrder交易后,账本会生成对应的Order资产记录,同时CreateOrder交易本身会被永久保存在区块中,无法修改。 - 如果之后需要调整订单的状态或金额,你可以提交
UpdateOrder交易:在API请求中指定目标订单的orderId,传入新的newStatus和(可选的)newAmount即可。这个新交易有自己独立的交易ID,但原CreateOrder的交易ID和内容完全不受影响,只是对应的Order资产状态被更新了。
另外补充一点:如果交易还处于Fabric的pending状态(未被确认写入区块),在Composer V0.16.0中也无法撤回或修改该交易,只能等交易确认后,通过上述新交易的方式修正业务数据。
内容的提问来源于stack exchange,提问作者Kumar Mohanaraman
相关产品推荐
相关产品推荐

