官术网_书友最值得收藏!

The Invoke function

The implementation of the Invoke function is as follows:

func (c *AssetMgr) Invoke(stub shim.ChaincodeStubInterface) pb.Response {
function, args := stub.GetFunctionAndParameters()
if function == "Order" {
return c.Order(stub, args)
} else if function == "Ship" {
return c.Ship(stub, args)
} else if function == "Distribute" {
return c.Distribute(stub, args)
} else if function == "query" {
return c.query(stub, args)
} else if function == "getHistory" {
return c.getHistory(stub, args)
}
return shim.Error("Invalid function name")
}

The Order, Ship, and Distribute functions will be quite similar. These will update the ledger state. We will use order() as an example to show how we implement the chaincode function:

func (c *AssetMgr) Order(stub shim.ChaincodeStubInterface, args []string) pb.Response {
return c.UpdateAsset(stub, args, "ORDER", "SCHOOL", "OEM")
}

Here is the UpdateAsset function:

func (c *AssetMgr) UpdateAsset(stub shim.ChaincodeStubInterface, args []string, currentStatus string, from string, to string) pb.Response {
assetId := args[0] comment := args[1] location := args[2]
assetBytes, err := stub.GetState(assetId)
orgAsset := OrgAsset{}

if currentStatus == "ORDER" && orgAsset.Status != "START" {
return shim.Error(err.Error())
} else if currentStatus == "SHIP" && orgAsset.Status != "ORDER" {.}
else if currentStatus == "DISTRIBUTE" && orgAsset.Status != "SHIP" {.}
orgAsset.Comment = comment
orgAsset.Status = currentStatus
….
orgAsset0, _ := json.Marshal(orgAsset)
err = stub.PutState(assetId, orgAsset0)

return shim.Success(orgAsset0)
}
主站蜘蛛池模板: 武乡县| 冕宁县| 新化县| 景泰县| 海原县| 望谟县| 株洲县| 福安市| 瑞安市| 麦盖提县| 林芝县| 柘荣县| 滨州市| 察哈| 罗田县| 山阴县| 台山市| 长沙县| 岑巩县| 康保县| 汶上县| 茶陵县| 安仁县| 蒙自县| 景宁| 弥渡县| 永登县| 大关县| 临武县| 兰溪市| 横峰县| 裕民县| 明溪县| 辽源市| 兴和县| 手机| 白河县| 凤冈县| 永川市| 鸡西市| 鄯善县|