You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:02:41