code: function buildGlobalFuncCallGraph (contracts) {
    var callGraph = {}
    contracts.forEach((contract) => {
      var filterNodes = (node) => { return common.isLocalCallGraphRelevantNode(node) || common.isExternalDirectCall(node) }
      var getNodeIdent = (node) => { return common.getFullQualifiedFunctionCallIdent(contract.node, node) }
      var getFunDefIdent = (funcDef) => { return common.getFullQuallyfiedFuncDefinitionIdent(contract.node, funcDef.node, funcDef.parameters) }
  
      callGraph[common.getContractName(contract.node)] = { contract: contract, functions: buildLocalFuncCallGraphInternal(contract.functions, filterNodes, getNodeIdent, getFunDefIdent) }
    })
  
    return callGraph
  }
docs: Builds a function call graph for the current contracts.
  Example Contract call graph:
  
  {
  "KingOfTheEtherThrone": {
  "contracts": {...},                                        // Contract node as defined in abstractAstView.js
  "functions": {
  "KingOfTheEtherThrone.claimThrone(string memory)": {    // function in KingOfEtherThrone
  "node": {...},                                        // function node as defined in abstractAstView.js
  "calls": {                                            // list of full qualified function names which are called form this function
  }
  }
  }
  },
  "foo": {
  "contract": {...},           // Contract node as definded in abstractAstView.js
  "functions": {}             // map from full qualified function name to func node
  }
  }
  
  @contracts {list contracts} Expects as input the contract structure defined in abstractAstView.js
  @return {map (string -> Contract Call Graph)} returns map from contract name to contract call graph