链码问题

来源: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回答

自游蜗牛

2020-04-12

err = stub.PutState(objectid,gpsJsonToChange)

这句话有问题。应该一点就看出来了

1
4
慕仰9228534
回复
自游蜗牛
哦哦,发现了,谢谢老师!
2020-04-12
共4条回复

Hyperledger Fabric实战联盟链-企业端区块链原理精讲

兼顾区块链应用层和底层 进击区块链工程师

787 学习 · 564 问题

查看课程