use metaboss_lib::update::V1UpdateArgs;
use crate::cache::NewValue;
use super::*;
pub struct SetUpdateAuthorityAllArgs {
pub client: RpcClient,
pub keypair: Option<String>,
pub payer: Option<String>,
pub mint_list: Option<String>,
pub cache_file: Option<String>,
pub new_authority: String,
pub rate_limit: usize,
pub retries: u8,
pub priority: Priority,
}
pub struct SetUpdateAuthorityArgs {
pub client: Arc<RpcClient>,
pub keypair: Arc<Keypair>,
pub payer: Arc<Option<Keypair>>,
pub mint_account: String,
pub new_authority: String,
pub priority: Priority,
}
pub async fn set_update_authority(args: SetUpdateAuthorityArgs) -> Result<Signature, ActionError> {
let new_update_authority =
Some(Pubkey::from_str(&args.new_authority).map_err(|e| {
ActionError::ActionFailed(args.mint_account.to_string(), e.to_string())
})?);
let update_args = V1UpdateArgs {
new_update_authority,
..Default::default()
};
let update_args = UpdateAssetArgs::V1 {
payer: args.payer.as_ref().as_ref(),
authority: &args.keypair,
mint: args.mint_account.clone(),
token: None::<String>,
delegate_record: None::<String>, update_args,
priority: args.priority,
};
update_asset(&args.client, update_args)
.map_err(|e| ActionError::ActionFailed(args.mint_account.to_string(), e.to_string()))
}
pub struct SetUpdateAuthorityAll {}
#[async_trait]
impl Action for SetUpdateAuthorityAll {
fn name() -> &'static str {
"set-update-authority-all"
}
async fn action(args: RunActionArgs) -> Result<(), ActionError> {
set_update_authority(SetUpdateAuthorityArgs {
client: args.client.clone(),
keypair: args.keypair.clone(),
payer: args.payer.clone(),
mint_account: args.mint_account,
new_authority: args.new_value,
priority: args.priority,
})
.await
.map(|_| ())
}
}
pub async fn set_update_authority_all(args: SetUpdateAuthorityAllArgs) -> AnyResult<()> {
let solana_opts = parse_solana_config();
let keypair = parse_keypair(args.keypair, solana_opts);
let mint_list = parse_mint_list(args.mint_list, &args.cache_file)?;
let solana_opts = parse_solana_config();
let payer = args
.payer
.map(|path| parse_keypair(Some(path), solana_opts));
let args = BatchActionArgs {
client: args.client,
keypair,
payer,
mint_list,
cache_file: args.cache_file,
new_value: NewValue::Single(args.new_authority),
should_append: false,
rate_limit: args.rate_limit,
retries: args.retries,
priority: args.priority,
};
SetUpdateAuthorityAll::run(args).await
}