MetaMask Extension Controller Dependencies

November 17, 2022 ยท View on GitHub

graph LR
  AddressBookController
  AnnouncementController
  ApprovalController
  KeyringController
  NetworkController
  NotificationController
  OnboardingController
  PermissionLogController
  PhishingController
  RateLimitController
  SubjectMetadataController
  AlertController --> PreferencesController
  AppStateController --> PreferencesController
  CachedBalancesController --> NetworkController
  CurrencyRateController --> NetworkController
  EnsController --> NetworkController
  GasFeeController --> NetworkController
  PreferencesController --> NetworkController
  TokenListController --> NetworkController
  AssetsContractController --> PreferencesController
  AssetsContractController --> NetworkController
  IncomingTransactionsController --> PreferencesController
  IncomingTransactionsController --> NetworkController
  MetaMetricsController --> PreferencesController
  MetaMetricsController --> NetworkController
  PermissionController --> KeyringController
  PermissionController --> ApprovalController
  TokensController --> PreferencesController
  TokensController --> NetworkController
  CollectiblesController --> CurrencyRateController
  CollectiblesController --> NetworkController
  CollectiblesController --> AssetsContractController
  SmartTransactionsController --> NetworkController
  SmartTransactionsController --> MetaMetricsController
  SmartTransactionsController --> TransactionController
  TokenRatesController --> TokensController
  TokenRatesController --> CurrencyRateController
  TokenRatesController --> NetworkController
  CollectibleDetectionController --> CollectiblesController
  CollectibleDetectionController --> PreferencesController
  CollectibleDetectionController --> NetworkController
  CollectibleDetectionController --> AssetsContractController
  SwapsController --> NetworkController
  SwapsController --> TokenRatesController
  SwapsController --> TransactionController
  SwapsController --> GasFeeController
  ThreeBoxController --> PreferencesController
  ThreeBoxController --> AddressBookController
  ThreeBoxController --> KeyringController
  ThreeBoxController --> MetaMetricsController
  TransactionController --> PreferencesController
  TransactionController --> NetworkController
  TransactionController --> KeyringController
  TransactionController --> MetaMetricsController
  TransactionController --> AssetsContractController
  DetectTokensController --> PreferencesController
  DetectTokensController --> NetworkController
  DetectTokensController --> TokensController
  DetectTokensController --> AssetsContractController
  DetectTokensController --> KeyringController
  DetectTokensController --> MetaMetricsController
  DetectTokensController --> TokenListController
{
  "KeyringController": [],
  "AddressBookController": [],
  "ApprovalController": [],
  "CurrencyRateController": [
    "NetworkController"
  ],
  "PhishingController": [],
  "AnnouncementController": [],
  "GasFeeController": [
    "NetworkController"
  ],
  "TokenListController": [
    "NetworkController"
  ],
  "TokensController": [
    "PreferencesController",
    "NetworkController"
  ],
  "TokenRatesController": [
    "TokensController",
    "CurrencyRateController",
    "NetworkController"
  ],
  "CollectiblesController": [
    "CurrencyRateController",
    "NetworkController",
    "AssetsContractController"
  ],
  "AssetsContractController": [
    "PreferencesController",
    "NetworkController"
  ],
  "CollectibleDetectionController": [
    "CollectiblesController",
    "PreferencesController",
    "NetworkController",
    "AssetsContractController"
  ],
  "PermissionController": [
    "KeyringController",
    "ApprovalController"
  ],
  "SubjectMetadataController": [],
  "RateLimitController": [],
  "NotificationController": [],
  "SmartTransactionsController": [
    "NetworkController",
    "MetaMetricsController",
    "TransactionController"
  ],
  "EnsController": [
    "NetworkController"
  ],
  "NetworkController": [],
  "PreferencesController": [
    "NetworkController"
  ],
  "AppStateController": [
    "PreferencesController"
  ],
  "CachedBalancesController": [
    "NetworkController"
  ],
  "AlertController": [
    "PreferencesController"
  ],
  "OnboardingController": [],
  "ThreeBoxController": [
    "PreferencesController",
    "AddressBookController",
    "KeyringController",
    "MetaMetricsController"
  ],
  "IncomingTransactionsController": [
    "PreferencesController",
    "NetworkController"
  ],
  "TransactionController": [
    "PreferencesController",
    "NetworkController",
    "KeyringController",
    "MetaMetricsController",
    "AssetsContractController"
  ],
  "DetectTokensController": [
    "PreferencesController",
    "NetworkController",
    "TokensController",
    "AssetsContractController",
    "KeyringController",
    "MetaMetricsController",
    "TokenListController"
  ],
  "SwapsController": [
    "NetworkController",
    "TokenRatesController",
    "TransactionController",
    "GasFeeController"
  ],
  "MetaMetricsController": [
    "PreferencesController",
    "NetworkController"
  ],
  "PermissionLogController": []
}

Notes on Implementation

This graph was generated from a .csv export of a Google Sheet where someone (maybe @Gudahtt or @mcmire) had manually mapped out the dependency relationships of our controllers. The graph was converted from the raw CSV file into the above JSON representation, which was then converted into Mermaid format. No dependencies were used.