digraph CallGraph { rankdir=LR; node [shape=box]; subgraph cluster_SHEPHERD { label="SHEPHERD"; style=rounded; "getActiveTaskIds"; } subgraph cluster_WALLET_API { label="WALLET API"; style=rounded; "handlePrepareWithdrawExchange"; "handleUpdateExchangeEntry"; } subgraph cluster_WITHDRAWAL { label="WITHDRAWAL"; style=rounded; "getWithdrawalDetailsForBankInfo"; "updateWithdrawalDenomsForCurrency"; "updateWithdrawalDenomsForExchange"; "redenominateWithdrawal"; "processQueryReserve"; "getExchangeWithdrawalInfo"; "getWithdrawalCandidateDenoms"; "getInitialDenomsSelection"; "processWithdrawalGroup"; "processWithdrawalGroupRedenominate"; "processWithdrawalGroupPendingReady"; "internalPrepareCreateWithdrawalGroup"; "confirmWithdrawal"; "createManualWithdrawal"; } subgraph cluster_P2P_PAYMENTS { label="P2P PAYMENTS"; style=rounded; "getTotalPeerPaymentCost"; "initiatePeerPullPayment"; "preparePeerPushCredit"; "confirmPeerPushCredit"; "checkPeerPushDebitV2"; "internalCheckPeerPushDebit"; } subgraph cluster_REFRESH { label="REFRESH"; style=rounded; "processRefreshGroup"; "redenominateRefresh"; "refreshMelt"; } subgraph cluster_EXCHANGES { label="EXCHANGES"; style=rounded; "doExchangeAutoRefresh"; "listExchanges"; "fetchFreshExchange"; "waitReadyExchange"; } subgraph cluster_DEPOSITS { label="DEPOSITS"; style=rounded; "checkDepositGroup"; "internalCheckDepositGroup"; "createDepositGroup"; } subgraph cluster_TASKS { label="TASKS"; style=rounded; "PendingTaskType.ExchangeUpdate (run)"; "PendingTaskType.ValidateDenoms (run)"; "updateExchangeFromUrlHandler"; "processValidateDenoms"; "PendingTaskType.ExchangeAutoRefresh (run)"; "processTaskExchangeAutoRefresh"; } /* SHEPHERD edges */ "getActiveTaskIds" -> "PendingTaskType.ValidateDenoms (run)"; "getActiveTaskIds" -> "PendingTaskType.ExchangeUpdate (run)"; /* WALLET API edges */ "handlePrepareWithdrawExchange" -> "fetchFreshExchange"; "handleUpdateExchangeEntry" -> "fetchFreshExchange"; /* WITHDRAWAL edges */ "getWithdrawalDetailsForBankInfo" -> "listExchanges"; "getWithdrawalDetailsForBankInfo" -> "fetchFreshExchange"; "updateWithdrawalDenomsForCurrency" -> "updateWithdrawalDenomsForExchange"; "redenominateWithdrawal" -> "updateWithdrawalDenomsForExchange"; "processQueryReserve" -> "fetchFreshExchange"; "processQueryReserve" -> "updateWithdrawalDenomsForExchange"; "getExchangeWithdrawalInfo" -> "fetchFreshExchange"; "getExchangeWithdrawalInfo" -> "updateWithdrawalDenomsForExchange"; "getWithdrawalCandidateDenoms" -> "updateWithdrawalDenomsForExchange"; "getInitialDenomsSelection" -> "updateWithdrawalDenomsForExchange"; "updateWithdrawalDenomsForExchange" -> "isValidDenomRecord"; "processWithdrawalGroup" -> "processWithdrawalGroupRedenominate"; "processWithdrawalGroup" -> "processWithdrawalGroupPendingReady"; "processWithdrawalGroupRedenominate" -> "fetchFreshExchange"; "processWithdrawalGroupRedenominate" -> "redenominateWithdrawal"; "processWithdrawalGroupPendingReady" -> "fetchFreshExchange"; "internalPrepareCreateWithdrawalGroup" -> "fetchFreshExchange"; "confirmWithdrawal" -> "fetchFreshExchange"; "createManualWithdrawal" -> "fetchFreshExchange"; /* P2P PAYMENTS edges */ "getTotalPeerPaymentCost" -> "updateWithdrawalDenomsForExchange"; "initiatePeerPullPayment" -> "fetchFreshExchange"; "preparePeerPushCredit" -> "fetchFreshExchange"; "confirmPeerPushCredit" -> "fetchFreshExchange"; "checkPeerPushDebitV2" -> "internalCheckPeerPushDebit"; "internalCheckPeerPushDebit" -> "fetchFreshExchange"; /* REFRESH edges */ "processRefreshGroup" -> "updateWithdrawalDenomsForExchange"; "redenominateRefresh" -> "fetchFreshExchange"; "redenominateRefresh" -> "updateWithdrawalDenomsForExchange"; "refreshMelt" -> "fetchFreshExchange"; /* EXCHANGES edges */ "doExchangeAutoRefresh" -> "updateWithdrawalDenomsForExchange"; "listExchanges" -> "PendingTaskType.ExchangeUpdate (run)"; "fetchFreshExchange" -> "waitReadyExchange"; "waitReadyExchange" -> "PendingTaskType.ExchangeUpdate (run)"; /* DEPOSITS edges */ "checkDepositGroup" -> "internalCheckDepositGroup"; "internalCheckDepositGroup" -> "fetchFreshExchange"; "createDepositGroup" -> "fetchFreshExchange"; /* TASKS edges */ "PendingTaskType.ExchangeUpdate (run)" -> "updateExchangeFromUrlHandler"; "updateExchangeFromUrlHandler" -> "PendingTaskType.ValidateDenoms (run)"; "updateExchangeFromUrlHandler" -> "doExchangeAutoRefresh"; "PendingTaskType.ValidateDenoms (run)" -> "processValidateDenoms"; "processValidateDenoms" -> "isValidDenomRecord"; "PendingTaskType.ExchangeAutoRefresh (run)" -> "processTaskExchangeAutoRefresh"; "processTaskExchangeAutoRefresh" -> "fetchFreshExchange"; "processTaskExchangeAutoRefresh" -> "doExchangeAutoRefresh"; }