/// <summary> /// calling graph is prepared for update contract code (check for DAG at that time) /// </summary> /// <param name="edges"></param> /// <returns></returns> /// <exception cref="FunctionMetadataException"></exception> private CallGraph BuildCallingGraph(SerializedCallGraph callGraph) { CallGraph graph = new CallGraph(); graph.AddVertexRange(callGraph.Vertices); graph.AddEdgeRange(callGraph.Edges.Select(serializedEdge => new Edge <string>(serializedEdge.Source, serializedEdge.Target))); try { graph.TopologicalSort(); } catch (NonAcyclicGraphException) { throw new FunctionMetadataException("The calling graph ISNOT DAG when restoring the calling graph according to the ContractMetadataTemplateMap from the database"); } return(graph); }