Hyperledger Fabric中重复调用CreateAsset()函数报错求助
报错原因及解决方法
核心原因
你第二次调用CreateAsset()时使用了已存在的资产ID。fabric-samples提供的Go链码中,CreateAsset函数默认会先校验指定ID的资产是否存在,若已存在则直接返回错误,这是链码内置的重复创建防护逻辑。
解决方法
- 每次调用
CreateAsset()时使用唯一资产ID:比如给ID添加递增后缀(如asset1、asset2),或者生成随机字符串作为唯一标识。 - 若需要允许覆盖已有资产,可修改链码逻辑:删除
CreateAsset中的资产存在性检查代码,或替换为更新逻辑。示例如下:
func (s *SmartContract) CreateAsset(ctx contractapi.TransactionContextInterface, id string, color string, size int, owner string, appraisedValue int) error { // 移除原有资产存在性检查步骤 asset := Asset{ ID: id, Color: color, Size: size, Owner: owner, AppraisedValue: appraisedValue, } assetJSON, err := json.Marshal(asset) if err != nil { return err } return ctx.GetStub().PutState(id, assetJSON) }
内容的提问来源于stack exchange,提问作者Nititorn Chawanpunya
相关产品推荐
相关产品推荐

