hyperledger-fabric - 无法更改超级账本结构中的汽车所有者
问题描述
我试图创建一个汽车包,但是当我调用传输链代码来更改包中汽车的所有者时,它的所有者没有改变。
https://github.com/JackAtlas10/Learing-Fabric/blob/master/Learn%20GoLang/Go%20L/tempContract.go
解决方案
您的代码中有几个问题。
- 在“InitPackage”方法中,您正在添加空的汽车数组(您应该在其中添加汽车数组)
- 在“传输”方法中,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"
}
推荐阅读
- next.js - 为什么 next.js 在每次加载页面时调用 getStaticPaths?
- ngrx - 如何处理ngrx中的复杂对象?
- javascript - 在 jquery 过滤器中隐藏()之后的 Masonry.js 异常行为
- vaadin - 当条件为假时,dom-if 元素不隐藏
- sql - 使用 IsActive 更新记录
- flutter - Flutter 中的类构造函数错误(VS Code)
- reactjs - 为什么我的未定义测试语句不起作用
- rxjs - 重置以可观察对象为源的表数据
- reactjs - React - 做全局状态的正确方法是什么?
- android - Android 10 将文件写入公共 DCIM 目录,非弃用方法