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

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)
}
主站蜘蛛池模板: 雅江县| 浦县| 丹寨县| 花垣县| 张家港市| 宕昌县| 成武县| 定襄县| 乐亭县| 石狮市| 临城县| 宿迁市| 贵阳市| 东源县| 景谷| 长沙市| 江源县| 米泉市| 碌曲县| 迁西县| 太原市| 金堂县| 河西区| 腾冲县| 宣汉县| 怀宁县| 甘肃省| 留坝县| 鲁甸县| 莱州市| 定南县| 神木县| 克什克腾旗| 肇州县| 荣昌县| 临颍县| 临泉县| 海丰县| 洛宁县| 莱西市| 凤凰县|