// chaincodeInvokeOrQuery invokes or queries the chaincode. If successful, the // INVOKE form prints the transaction ID on STDOUT, and the QUERY form prints // the query result on STDOUT. A command-line flag (-r, --raw) determines // whether the query result is output as raw bytes, or as a printable string. // The printable form is optionally (-x, --hex) a hexadecimal representation // of the query response. If the query response is NIL, nothing is output. func chaincodeInvokeOrQuery(cmd *cobra.Command, args []string, invoke bool) (err error) { spec, err := getChaincodeSpecification(cmd) if err != nil { return err } devopsClient, err := common.GetDevopsClient(cmd) if err != nil { return fmt.Errorf("Error building %s: %s", chainFuncName, err) } // Build the ChaincodeInvocationSpec message invocation := &pb.ChaincodeInvocationSpec{ChaincodeSpec: spec} if customIDGenAlg != common.UndefinedParamValue { invocation.IdGenerationAlg = customIDGenAlg } var resp *pb.Response if invoke { resp, err = devopsClient.Invoke(context.Background(), invocation) } else { resp, err = devopsClient.Query(context.Background(), invocation) } if err != nil { if invoke { err = fmt.Errorf("Error invoking %s: %s\n", chainFuncName, err) } else { err = fmt.Errorf("Error querying %s: %s\n", chainFuncName, err) } return } if invoke { transactionID := string(resp.Msg) logger.Infof("Successfully invoked transaction: %s(%s)", invocation, transactionID) } else { logger.Infof("Successfully queried transaction: %s", invocation) if resp != nil { if chaincodeQueryRaw { if chaincodeQueryHex { err = errors.New("Options --raw (-r) and --hex (-x) are not compatible\n") return } fmt.Print("Query Result (Raw): ") os.Stdout.Write(resp.Msg) } else { if chaincodeQueryHex { fmt.Printf("Query Result: %x\n", resp.Msg) } else { fmt.Printf("Query Result: %s\n", string(resp.Msg)) } } } } return nil }
// chaincodeDeploy deploys the chaincode. On success, the chaincode name // (hash) is printed to STDOUT for use by subsequent chaincode-related CLI // commands. func chaincodeDeploy(cmd *cobra.Command, args []string) error { spec, err := getChaincodeSpecification(cmd) if err != nil { return err } devopsClient, err := common.GetDevopsClient(cmd) if err != nil { return fmt.Errorf("Error building %s: %s", chainFuncName, err) } chaincodeDeploymentSpec, err := devopsClient.Deploy(context.Background(), spec) if err != nil { return fmt.Errorf("Error building %s: %s\n", chainFuncName, err) } logger.Infof("Deploy result: %s", chaincodeDeploymentSpec.ChaincodeSpec) fmt.Printf("Deploy chaincode: %s\n", chaincodeDeploymentSpec.ChaincodeSpec.ChaincodeID.Name) return nil }