无法更改超级账本结构中的汽车所有者
Can't change owner of cars in hyperledger fabric
我尝试创建一个汽车包,但是当我调用传输链代码来更改包中汽车的所有者时,它的所有者没有更改。
https://github.com/JackAtlas10/Learing-Fabric/blob/master/Learn%20GoLang/Go%20L/tempContract.go
您的代码中存在几个问题。
- 在 'InitPackage' 方法中,您正在添加空的汽车数组(您应该在其中添加汽车数组)
- 在'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"
}
我尝试创建一个汽车包,但是当我调用传输链代码来更改包中汽车的所有者时,它的所有者没有更改。
https://github.com/JackAtlas10/Learing-Fabric/blob/master/Learn%20GoLang/Go%20L/tempContract.go
您的代码中存在几个问题。
- 在 'InitPackage' 方法中,您正在添加空的汽车数组(您应该在其中添加汽车数组)
- 在'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"
}