jito_restaking_cli/
restaking.rs

1use clap::{command, Subcommand};
2use solana_program::pubkey::Pubkey;
3
4/// The CLI handler for the restaking program
5#[derive(Subcommand)]
6pub enum RestakingCommands {
7    /// Initialize, get, and set the config struct
8    Config {
9        #[command(subcommand)]
10        action: ConfigActions,
11    },
12    Ncn {
13        #[command(subcommand)]
14        action: NcnActions,
15    },
16    Operator {
17        #[command(subcommand)]
18        action: OperatorActions,
19    },
20}
21
22/// The actions that can be performed on the restaking config
23#[derive(Subcommand)]
24pub enum ConfigActions {
25    /// Initialize the config
26    Initialize,
27    /// Get the config
28    Get,
29    /// Set the config admin
30    SetAdmin {
31        /// The new admin's pubkey
32        new_admin: Pubkey,
33    },
34}
35
36#[derive(Subcommand)]
37pub enum NcnActions {
38    /// Initialize NCN
39    Initialize {
40        #[arg(long)]
41        path_to_base_keypair: Option<String>,
42    },
43    /// Initialize NCN Operator State
44    InitializeNcnOperatorState { ncn: String, operator: String },
45    /// Warmup NCN Operator State
46    NcnWarmupOperator { ncn: String, operator: String },
47    /// NCN Cooldown Operator State
48    NcnCooldownOperator { ncn: String, operator: String },
49    /// Initialize NCN Vault Ticket
50    InitializeNcnVaultTicket { ncn: String, vault: String },
51    /// Warmup NCN Vault Ticket
52    WarmupNcnVaultTicket { ncn: String, vault: String },
53    /// Cooldown NCN Vault Ticket
54    CooldownNcnVaultTicket { ncn: String, vault: String },
55    /// NCN Delegate Token Account
56    NcnDelegateTokenAccount {
57        ncn: String,
58        delegate: String,
59        token_mint: String,
60        #[arg(long)]
61        should_create_token_account: bool,
62    },
63    /// Get NCN
64    Get { pubkey: String },
65    /// List all NCNs
66    List,
67    /// List All Ncn Operator State for a NCN
68    ListNcnOperatorState { ncn: Pubkey },
69    /// List All Ncn Vault Ticket for a NCN
70    ListNcnVaultTicket { ncn: Pubkey },
71    /// Set NCN Admin
72    NcnSetAdmin {
73        /// The NCN pubkey
74        ncn: Pubkey,
75
76        /// Filepath or URL to a keypair of old admin
77        #[arg(long)]
78        old_admin_keypair: String,
79
80        /// Filepath or URL to a keypair of new admin
81        #[arg(long)]
82        new_admin_keypair: String,
83    },
84    /// Set NCN Secondary Admin
85    NcnSetSecondaryAdmin {
86        /// The NCN pubkey
87        ncn: String,
88
89        /// The new admin pubkey
90        new_admin: String,
91
92        /// Set operator_admin
93        #[arg(long)]
94        set_operator_admin: bool,
95
96        /// Set vault_admin
97        #[arg(long)]
98        set_vault_admin: bool,
99
100        /// Set slasher_admin
101        #[arg(long)]
102        set_slasher_admin: bool,
103
104        /// Set delegate_admin
105        #[arg(long)]
106        set_delegate_admin: bool,
107
108        ///Set metadata_admin
109        #[arg(long)]
110        set_metadata_admin: bool,
111
112        ///Set weight_table_admin
113        #[arg(long)]
114        set_weight_table_admin: bool,
115
116        ///Set ncn_program_admin
117        #[arg(long)]
118        set_ncn_program_admin: bool,
119    },
120}
121
122#[derive(Subcommand)]
123pub enum OperatorActions {
124    /// Initialize Operator
125    Initialize { operator_fee_bps: u16 },
126    /// Initialize Operator Vault Ticket
127    InitializeOperatorVaultTicket { operator: String, vault: String },
128    /// Warmup Operator Vault Ticket
129    WarmupOperatorVaultTicket { operator: String, vault: String },
130    /// Cooldown Operator Vault Ticket
131    CooldownOperatorVaultTicket { operator: String, vault: String },
132    /// Operator Warmup NCN
133    OperatorWarmupNcn { operator: String, ncn: String },
134    /// Operator Cooldown NCN
135    OperatorCooldownNcn { operator: String, ncn: String },
136    /// Operator Set Admin
137    OperatorSetAdmin {
138        /// The Operator pubkey
139        operator: String,
140
141        /// Filepath or URL to a keypair of old admin
142        #[arg(long)]
143        old_admin_keypair: String,
144
145        /// Filepath or URL to a keypair of new admin
146        #[arg(long)]
147        new_admin_keypair: String,
148    },
149    /// Operator Set Secondary Admin
150    OperatorSetSecondaryAdmin {
151        operator: String,
152        new_admin: String,
153        #[arg(long)]
154        set_ncn_admin: bool,
155        #[arg(long)]
156        set_vault_admin: bool,
157        #[arg(long)]
158        set_voter_admin: bool,
159        #[arg(long)]
160        set_delegate_admin: bool,
161        #[arg(long)]
162        set_metadata_admin: bool,
163    },
164    /// Sets the operator fee
165    OperatorSetFees {
166        operator: String,
167        operator_fee_bps: u16,
168    },
169    /// Operator Delegate Token Account
170    OperatorDelegateTokenAccount {
171        operator: String,
172        delegate: String,
173        token_mint: String,
174        #[arg(long)]
175        should_create_token_account: bool,
176    },
177    /// Get operator
178    Get { pubkey: String },
179    /// List all operators
180    List,
181    /// List Operator Vault Ticket for an Operator
182    ListOperatorVaultTicket { operator: Pubkey },
183    /// List All Ncn Operator State for a Operator
184    ListNcnOperatorState { operator: Pubkey },
185}