# Jito Restaking and Vault Program Documentation

## Overview

The **Jito Restaking and Vault Programs** manage the relationships between vaults, NCNs (Node Consensus Networks), and operators. The Vault Program is responsible for handling deposits, tokenized stake, and delegation, while the Restaking Program facilitates the interactions between NCNs, operators, and vaults.

This documentation provides an in-depth look at the components and interactions between these entities, as represented by the following diagrams.

## 1. Vault Program and Restaking Program Interaction

{% @mermaid/diagram content="flowchart LR

```
classDef main fill:#AAA,stroke:#333,stroke-width:2px;
classDef ticket fill:#595,stroke:#333,stroke-width:1px,font-size:10;

subgraph Vault Program
    Vault(Vault):::main
    VaultNcnTicket([VaultNcnTicket]):::ticket
end

subgraph Restaking Program
    NCN(NCN):::main
    NcnVaultTicket([NcnVaultTicket]):::ticket
end

%% Vault Program Links
Vault -->|Creates| VaultNcnTicket
VaultNcnTicket -->|Activated through warmup| NCN
VaultNcnTicket -.->|Deactivated through cooldown| NCN

%% Restaking Program Links
NCN -->|Creates| NcnVaultTicket
NcnVaultTicket ---> |Links| Vault" %}
```

### Explanation

* The **Vault Program** creates `VaultNcnTicket` to signify its support for an NCN.
* The **VaultNcnTicket** undergoes a warmup process to activate and a cooldown process to deactivate.
* The **Restaking Program** creates `NcnVaultTicket` to formalize the link between an NCN and a vault.

## 2. NCN and Operator Mutual Opt-in Process

{% @mermaid/diagram content="flowchart LR

```
classDef main fill:#AAA,stroke:#333,stroke-width:2px;
classDef ticket fill:#595,stroke:#333,stroke-width:1px,font-size:10;

subgraph Restaking Program
    NCN[NCN]:::main
    Operator[Operator]:::main
    NcnOperatorState[NcnOperatorState]:::ticket
end

NCN -->|Registers| NcnOperatorState
Operator -->|Opts in| NcnOperatorState

NcnOperatorState -->|Mutual opt-in| Operator" %}
```

### Explanation

* The **NCN** registers an `NcnOperatorState` account to track opt-ins.
* The **Operator** opts into the NCN, signifying agreement.
* Both entities must mutually opt-in to establish a valid state.

## 3. Vault Delegation to Operators

{% @mermaid/diagram content="flowchart LR

```
classDef main fill:#AAA,stroke:#333,stroke-width:2px;
classDef ticket fill:#595,stroke:#333,stroke-width:1px,font-size:10;

subgraph Vault Program
    Vault[Vault]:::main
    VaultOperatorDelegation[VaultOperatorDelegation]:::ticket
end

subgraph Restaking Program
    Operator[Operator]:::main
    OperatorVaultTicket[OperatorVaultTicket]:::ticket
end

%% Vault Program Links
Vault -->|Creates| VaultOperatorDelegation
VaultOperatorDelegation -->|Delegates stake| Operator

%% Restaking Program Links
Operator -->|Creates| OperatorVaultTicket
OperatorVaultTicket -->|Links| Vault

%%%% Cross-Program Links
Vault -.->|Opts in| Operator
Vault -.->|Delegates stake to| Operator" %}
```

### Explanation

* The **Vault Program** creates `VaultOperatorDelegation` to delegate stake to an operator.
* The **Restaking Program** creates `OperatorVaultTicket` to formalize the connection.
* The vault must explicitly opt-in to the operator before delegation occurs.
