Scheme
flowchart LR
classDef main fill:#f9,stroke:#333,stroke-width:2px;
classDef ticket fill:#f33,stroke:#333,stroke-width:1px,font-size:15;
subgraph Vault Program
Vault[Vault]:::main
VaultNcnTicket[VaultNcnTicket]:::ticket
VaultOperatorDelegation[VaultOperatorDelegation]:::ticket
VaultNcnSlasherTicket[VaultNcnSlasherTicket]:::ticket
VaultNcnSlasherOperatorTicket[VaultNcnSlasherOperatorTicket]:::ticket
VaultStakerWithdrawalTicket[VaultStakerWithdrawalTicket]:::ticket
VaultUpdateStateTracker[VaultUpdateStateTracker]:::ticket
end
subgraph Restaking Program
direction LR
NCN[NCN]:::main
Operator[Operator]:::main
Slasher[Slasher]:::main
NcnOperatorState[NcnOperatorState]:::ticket
NcnVaultTicket[NcnVaultTicket]:::ticket
OperatorVaultTicket[OperatorVaultTicket]:::ticket
NcnVaultSlasherTicket[NcnVaultSlasherTicket]:::ticket
end
%% Vault Program Links
Vault -->|Creates| VaultNcnTicket
Vault -->|Creates| VaultOperatorDelegation
Vault -->|Creates| VaultNcnSlasherTicket
Vault -->|Creates| VaultNcnSlasherOperatorTicket
Vault -->|Creates| VaultStakerWithdrawalTicket
Vault -->|Creates| VaultUpdateStateTracker
VaultNcnTicket -->|Activated through warmup| NCN
VaultNcnTicket -.->|Deactivated through cooldown| NCN
VaultOperatorDelegation -->|Delegates stake| Operator
VaultNcnSlasherTicket -->|Opt-in to slasher| Slasher
VaultNcnSlasherOperatorTicket -->|Tracks slashings| Slasher
%% Restaking Program Links
NCN -->|Registers| NcnOperatorState
NCN -->|Creates| NcnVaultTicket
NCN -->|Creates| NcnVaultSlasherTicket
Operator -->|Creates| OperatorVaultTicket
Operator -->|Opts in| NcnOperatorState
NcnOperatorState -->|Mutual opt-in| Operator
NcnVaultTicket -->|Links| Vault
OperatorVaultTicket -->|Links| Vault
NcnVaultSlasherTicket -->|Registers slasher| Slasher
%% Cross-Program Links
Vault -.->|Opts in| NCN
Vault -.->|Opts in| Operator
Vault -.->|Delegates stake to| Operator
Vault -.->|Can be slashed by| Slasher
NCN -.->|Manages slashers for| Vault
Slasher -.->|Can Slash| Vault