stake-pool-cli: Fix sol deposit for private pool (#2399)

* stake-pool-cli: Fix sol deposit for private pool

* cargo fmt
This commit is contained in:
Jon Cinque 2021-09-10 01:27:43 +02:00 committed by GitHub
parent b3684bbfe9
commit 864b7eff0b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 30 deletions

2
Cargo.lock generated
View File

@ -3800,7 +3800,7 @@ dependencies = [
[[package]] [[package]]
name = "spl-stake-pool-cli" name = "spl-stake-pool-cli"
version = "0.5.0" version = "0.5.1"
dependencies = [ dependencies = [
"bincode", "bincode",
"borsh", "borsh",

View File

@ -6,7 +6,7 @@ homepage = "https://spl.solana.com/stake-pool"
license = "Apache-2.0" license = "Apache-2.0"
name = "spl-stake-pool-cli" name = "spl-stake-pool-cli"
repository = "https://github.com/solana-labs/solana-program-library" repository = "https://github.com/solana-labs/solana-program-library"
version = "0.5.0" version = "0.5.1"
[dependencies] [dependencies]
borsh = "0.9" borsh = "0.9"

View File

@ -50,7 +50,6 @@ struct Config {
manager: Box<dyn Signer>, manager: Box<dyn Signer>,
staker: Box<dyn Signer>, staker: Box<dyn Signer>,
depositor: Option<Box<dyn Signer>>, depositor: Option<Box<dyn Signer>>,
sol_depositor: Option<Box<dyn Signer>>,
token_owner: Box<dyn Signer>, token_owner: Box<dyn Signer>,
fee_payer: Box<dyn Signer>, fee_payer: Box<dyn Signer>,
dry_run: bool, dry_run: bool,
@ -737,10 +736,9 @@ fn command_deposit_sol(
let amount = native_token::sol_to_lamports(amount); let amount = native_token::sol_to_lamports(amount);
// Check withdraw_from balance // Check withdraw_from balance
let from_pubkey = from.as_ref().map_or_else( let from_pubkey = from
|| config.fee_payer.try_pubkey().unwrap(), .as_ref()
|keypair| keypair.try_pubkey().unwrap(), .map_or_else(|| config.fee_payer.pubkey(), |keypair| keypair.pubkey());
);
let from_balance = config.rpc_client.get_balance(&from_pubkey)?; let from_balance = config.rpc_client.get_balance(&from_pubkey)?;
if from_balance < amount { if from_balance < amount {
return Err(format!( return Err(format!(
@ -757,11 +755,7 @@ fn command_deposit_sol(
// ephemeral SOL account just to do the transfer // ephemeral SOL account just to do the transfer
let user_sol_transfer = Keypair::new(); let user_sol_transfer = Keypair::new();
let mut signers = vec![ let mut signers = vec![config.fee_payer.as_ref(), &user_sol_transfer];
config.fee_payer.as_ref(),
config.staker.as_ref(),
&user_sol_transfer,
];
if let Some(keypair) = from.as_ref() { if let Some(keypair) = from.as_ref() {
signers.push(keypair) signers.push(keypair)
} }
@ -790,18 +784,16 @@ fn command_deposit_sol(
let pool_withdraw_authority = let pool_withdraw_authority =
find_withdraw_authority_program_address(&spl_stake_pool::id(), stake_pool_address).0; find_withdraw_authority_program_address(&spl_stake_pool::id(), stake_pool_address).0;
let mut deposit_instructions = if let Some(sol_deposit_authority) = let mut deposit_instructions = if let Some(deposit_authority) = config.depositor.as_ref() {
config.sol_depositor.as_ref()
{
let expected_sol_deposit_authority = stake_pool.sol_deposit_authority.ok_or_else(|| { let expected_sol_deposit_authority = stake_pool.sol_deposit_authority.ok_or_else(|| {
"SOL deposit authority specified in arguments but stake pool has none".to_string() "SOL deposit authority specified in arguments but stake pool has none".to_string()
})?; })?;
signers.push(sol_deposit_authority.as_ref()); signers.push(deposit_authority.as_ref());
if sol_deposit_authority.pubkey() != expected_sol_deposit_authority { if deposit_authority.pubkey() != expected_sol_deposit_authority {
let error = format!( let error = format!(
"Invalid deposit authority specified, expected {}, received {}", "Invalid deposit authority specified, expected {}, received {}",
expected_sol_deposit_authority, expected_sol_deposit_authority,
sol_deposit_authority.pubkey() deposit_authority.pubkey()
); );
return Err(error.into()); return Err(error.into());
} }
@ -809,7 +801,7 @@ fn command_deposit_sol(
spl_stake_pool::instruction::deposit_sol_with_authority( spl_stake_pool::instruction::deposit_sol_with_authority(
&spl_stake_pool::id(), &spl_stake_pool::id(),
stake_pool_address, stake_pool_address,
&sol_deposit_authority.pubkey(), &deposit_authority.pubkey(),
&pool_withdraw_authority, &pool_withdraw_authority,
&stake_pool.reserve_stake, &stake_pool.reserve_stake,
&user_sol_transfer.pubkey(), &user_sol_transfer.pubkey(),
@ -2199,16 +2191,6 @@ fn main() {
} else { } else {
None None
}; };
let sol_depositor = if matches.is_present("sol_depositor") {
Some(get_signer(
&matches,
"sol_depositor",
&cli_config.keypair_path,
&mut wallet_manager,
))
} else {
None
};
let manager = get_signer( let manager = get_signer(
&matches, &matches,
"manager", "manager",
@ -2237,7 +2219,6 @@ fn main() {
manager, manager,
staker, staker,
depositor, depositor,
sol_depositor,
token_owner, token_owner,
fee_payer, fee_payer,
dry_run, dry_run,