无法更改超级账本结构中的汽车所有者

Can't change owner of cars in hyperledger fabric

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

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

您的代码中存在几个问题。

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

我心里有办法了。它可能对你有帮助。 即:

  • 将 'cNum' 添加为 'Car' 结构的元素并从 'Packages' 结构
  • 中删除该元素
  • 之前'PutState'还设置了Car元素的值'cNum'
  • 在'Transport'方法中,用下面给定的代码替换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"
    }