relax stake split destination check (#162)

* relax stake split destination check

* change stake_account error handling logic

* fmt

* modify logic

* change error message when account is neither owned by stake program or system program

* add a comment explaining nested ifs in stake_account error handling

* fix typos in comments

* update comment
This commit is contained in:
Nagaprasad V R 2024-03-14 23:13:34 +05:30 committed by GitHub
parent 75ef68ffe8
commit 6bcb77dcfa
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 20 additions and 8 deletions

View File

@ -56,6 +56,7 @@ use {
}, },
stake_history::{Epoch, StakeHistory}, stake_history::{Epoch, StakeHistory},
system_instruction::{self, SystemError}, system_instruction::{self, SystemError},
system_program,
sysvar::{clock, stake_history}, sysvar::{clock, stake_history},
transaction::Transaction, transaction::Transaction,
}, },
@ -1980,15 +1981,26 @@ pub fn process_split_stake(
let rent_exempt_reserve = if !sign_only { let rent_exempt_reserve = if !sign_only {
if let Ok(stake_account) = rpc_client.get_account(&split_stake_account_address) { if let Ok(stake_account) = rpc_client.get_account(&split_stake_account_address) {
let err_msg = if stake_account.owner == stake::program::id() { if stake_account.owner == stake::program::id() {
format!("Stake account {split_stake_account_address} already exists") return Err(CliError::BadParameter(format!(
"Stake account {split_stake_account_address} already exists"
))
.into());
} else if stake_account.owner == system_program::id() {
if !stake_account.data.is_empty() {
return Err(CliError::BadParameter(format!(
"Account {split_stake_account_address} has data and cannot be used to split stake"
))
.into());
}
// if `stake_account`'s owner is the system_program and its data is
// empty, `stake_account` is allowed to receive the stake split
} else { } else {
format!( return Err(CliError::BadParameter(format!(
"Account {split_stake_account_address} already exists and is not a stake \ "Account {split_stake_account_address} already exists and cannot be used to split stake"
account" ))
) .into());
}; }
return Err(CliError::BadParameter(err_msg).into());
} }
let minimum_balance = let minimum_balance =