首页 > 解决方案 > 无法更改超级账本结构中的汽车所有者

问题描述

我试图创建一个汽车包,但是当我调用传输链代码来更改包中汽车的所有者时,它的所有者没有改变。

https://github.com/JackAtlas10/Learing-Fabric/blob/master/Learn%20GoLang/Go%20L/tempContract.go

标签: hyperledger-fabrichyperledger-chaincode

解决方案


您的代码中有几个问题。

  1. 在“InitPackage”方法中,您正在添加空的汽车数组(您应该在其中添加汽车数组)
  2. 在“传输”方法中,for 循环不正确。您正在对字符串变量“cNum”执行循环。根据您的代码,每当您调用“AddCarsToPkg”方法时,包的“cNum”变量都会存储一个新值(或不会保留旧车号)

我心里有解决办法。它可能对你有帮助。那是:

  • 添加“cNum”作为“Car”结构的元素并从“Packages”结构中删除此元素
  • 在“PutState”之前还设置了 Car 元素“cNum”的值
  • 在“传输”方法中,用下面给定的代码替换 for 循环

    for i := range tempPkg.cars {
        carIndex := tempPkg.cars[i].cNum
        car, _ := s.QueryCar(ctx, carIndex)
        car.Owner = newOwner
        car.Status = "Handed Over"
        carAsBytes, _ := json.Marshal(*car)
        err := ctx.GetStub().PutState(carIndex, carAsBytes)
        if err != nil {
            return fmt.Errorf("Error in Puting state to data base%s", err.Error())
        }
        tempPkg.cars[i].Owner = newOwner
        tempPkg.cars[i].Status = "Handed Over"
    }


推荐阅读