use {
clap::ArgMatches,
solana_clap_utils::keypair::{pubkey_from_path, signer_from_path},
solana_remote_wallet::remote_wallet::RemoteWalletManager,
solana_sdk::{
clock::{Epoch, UnixTimestamp},
pubkey::Pubkey,
signature::Signer,
},
std::{error::Error, sync::Arc},
};
pub(crate) struct NewArgs
{
pub fee_payer: K,
pub funding_keypair: K,
pub base_keypair: K,
pub lamports: u64,
pub stake_authority: P,
pub withdraw_authority: P,
pub index: usize,
}
pub(crate) struct CountArgs
{
pub base_pubkey: P,
}
pub(crate) struct QueryArgs
{
pub base_pubkey: P,
pub num_accounts: usize,
}
pub(crate) struct AuthorizeArgs
{
pub fee_payer: K,
pub base_pubkey: P,
pub stake_authority: K,
pub withdraw_authority: K,
pub new_stake_authority: P,
pub new_withdraw_authority: P,
pub num_accounts: usize,
}
pub(crate) struct SetLockupArgs
{
pub fee_payer: K,
pub base_pubkey: P,
pub custodian: K,
pub lockup_epoch: Option,
pub lockup_date: Option,
pub new_custodian: Option,
pub num_accounts: usize,
pub no_wait: bool,
pub unlock_years: Option,
}
pub(crate) struct RebaseArgs {
pub fee_payer: K,
pub base_pubkey: P,
pub new_base_keypair: K,
pub stake_authority: K,
pub num_accounts: usize,
}
pub(crate) struct MoveArgs
{
pub rebase_args: RebaseArgs
,
pub authorize_args: AuthorizeArgs
,
}
pub(crate) enum Command
{
New(NewArgs
),
Count(CountArgs
),
Addresses(QueryArgs
),
Balance(QueryArgs
),
Authorize(AuthorizeArgs
),
SetLockup(SetLockupArgs
),
Rebase(RebaseArgs
),
Move(Box>),
}
pub(crate) struct Args {
pub config_file: String,
pub url: Option,
pub command: Command,
}
fn resolve_stake_authority(
wallet_manager: &mut Option>,
key_url: &str,
) -> Result, Box> {
let matches = ArgMatches::default();
signer_from_path(&matches, key_url, "stake authority", wallet_manager)
}
fn resolve_withdraw_authority(
wallet_manager: &mut Option>,
key_url: &str,
) -> Result, Box> {
let matches = ArgMatches::default();
signer_from_path(&matches, key_url, "withdraw authority", wallet_manager)
}
fn resolve_new_stake_authority(
wallet_manager: &mut Option>,
key_url: &str,
) -> Result> {
let matches = ArgMatches::default();
pubkey_from_path(&matches, key_url, "new stake authority", wallet_manager)
}
fn resolve_new_withdraw_authority(
wallet_manager: &mut Option>,
key_url: &str,
) -> Result> {
let matches = ArgMatches::default();
pubkey_from_path(&matches, key_url, "new withdraw authority", wallet_manager)
}
fn resolve_fee_payer(
wallet_manager: &mut Option>,
key_url: &str,
) -> Result, Box> {
let matches = ArgMatches::default();
signer_from_path(&matches, key_url, "fee-payer", wallet_manager)
}
fn resolve_custodian(
wallet_manager: &mut Option>,
key_url: &str,
) -> Result, Box> {
let matches = ArgMatches::default();
signer_from_path(&matches, key_url, "custodian", wallet_manager)
}
fn resolve_new_custodian(
wallet_manager: &mut Option>,
key_url: &Option,
) -> Result