链码问题
来源:7-8 合约部署A
慕仰9228534
2020-04-12
##我编写了这样一个函数对账本数据进行更改:
func (c *SupplyChain) gpsChange(stub shim.ChaincodeStubInterface, args []string) pb.Response {
// 检查参数的个数
if len(args) != 3{
return shim.Error("not enough args")
}
//验证参数的正确性
objectid := args[0]
newgpscordsx := args[1]
newgpscordsy := args[2]
if objectid == "" || newgpscordsx == "" ||newgpscordsy == ""{
return shim.Error("invalid args")
}
fmt.Println("- start change gps ", objectid, newgpscordsx,newgpscordsy)
//验证订单是否存在
orderBytes ,err := stub.GetState (constructOrderKey(objectid))
if err !=nil || len(orderBytes) == 0{
return shim.Error("order not found")
}
//反序列化Order
gpstochange := Orders{}
err = json.Unmarshal(orderBytes,&gpstochange)
if err !=nil{
return shim.Error("Unmarshal not success")
}
//更改数据
gpstochange.GpscordsX = newgpscordsx
gpstochange.GpscordsY = newgpscordsy
//序列化对象
gpsJsonToChange, err := json.Marshal(gpstochange)
if err != nil{
return shim.Error(fmt.Sprintf("marshal order error %s",err))
}
err = stub.PutState(objectid,gpsJsonToChange)
if err != nil{
return shim.Error(fmt.Sprintf("put order error %s",err))
}
//成功返回
return shim.Success(nil)
}
在测试时我首先注册了这样一个order:
{“gpscordsx”:“12”,“gpscordsy”:“13”,“orderid”:“order1”,“truckid”:“truck1”}
随后调用"gpschange"函数将gpscordsx和gpscordsy改成了14,15
输出成功“Chaincode invoke successful. result: status:200”。
最后我调用queryOrder函数(用于查询order的具体信息)通过orderid查询我更改了那个order发现仍是:
{“gpscordsx”:“12”,“gpscordsy”:“13”,“orderid”:“order1”,“truckid”:“truck1”}
请问老师是我的链码编写错误了吗?
写回答
1回答
-
err = stub.PutState(objectid,gpsJsonToChange)
这句话有问题。应该一点就看出来了
142020-04-12
相似问题