Removes KeyedAccount parameter from get_if_mergeable(). (#24190)
This commit is contained in:
committed by
GitHub
parent
c090418f26
commit
fad9bd0538
@ -664,16 +664,26 @@ pub fn merge(
|
|||||||
}
|
}
|
||||||
|
|
||||||
ic_msg!(invoke_context, "Checking if destination stake is mergeable");
|
ic_msg!(invoke_context, "Checking if destination stake is mergeable");
|
||||||
let stake_merge_kind =
|
let stake_merge_kind = MergeKind::get_if_mergeable(
|
||||||
MergeKind::get_if_mergeable(invoke_context, stake_account, clock, stake_history)?;
|
invoke_context,
|
||||||
|
&stake_account.state()?,
|
||||||
|
stake_account.lamports()?,
|
||||||
|
clock,
|
||||||
|
stake_history,
|
||||||
|
)?;
|
||||||
let meta = stake_merge_kind.meta();
|
let meta = stake_merge_kind.meta();
|
||||||
|
|
||||||
// Authorized staker is allowed to split/merge accounts
|
// Authorized staker is allowed to split/merge accounts
|
||||||
meta.authorized.check(signers, StakeAuthorize::Staker)?;
|
meta.authorized.check(signers, StakeAuthorize::Staker)?;
|
||||||
|
|
||||||
ic_msg!(invoke_context, "Checking if source stake is mergeable");
|
ic_msg!(invoke_context, "Checking if source stake is mergeable");
|
||||||
let source_merge_kind =
|
let source_merge_kind = MergeKind::get_if_mergeable(
|
||||||
MergeKind::get_if_mergeable(invoke_context, source_account, clock, stake_history)?;
|
invoke_context,
|
||||||
|
&source_account.state()?,
|
||||||
|
source_account.lamports()?,
|
||||||
|
clock,
|
||||||
|
stake_history,
|
||||||
|
)?;
|
||||||
|
|
||||||
ic_msg!(invoke_context, "Merging stake accounts");
|
ic_msg!(invoke_context, "Merging stake accounts");
|
||||||
if let Some(merged_state) = stake_merge_kind.merge(invoke_context, source_merge_kind, clock)? {
|
if let Some(merged_state) = stake_merge_kind.merge(invoke_context, source_merge_kind, clock)? {
|
||||||
@ -921,11 +931,12 @@ impl MergeKind {
|
|||||||
|
|
||||||
fn get_if_mergeable(
|
fn get_if_mergeable(
|
||||||
invoke_context: &InvokeContext,
|
invoke_context: &InvokeContext,
|
||||||
stake_keyed_account: &KeyedAccount,
|
stake_state: &StakeState,
|
||||||
|
stake_lamports: u64,
|
||||||
clock: &Clock,
|
clock: &Clock,
|
||||||
stake_history: &StakeHistory,
|
stake_history: &StakeHistory,
|
||||||
) -> Result<Self, InstructionError> {
|
) -> Result<Self, InstructionError> {
|
||||||
match stake_keyed_account.state()? {
|
match stake_state {
|
||||||
StakeState::Stake(meta, stake) => {
|
StakeState::Stake(meta, stake) => {
|
||||||
// stake must not be in a transient state. Transient here meaning
|
// stake must not be in a transient state. Transient here meaning
|
||||||
// activating or deactivating with non-zero effective stake.
|
// activating or deactivating with non-zero effective stake.
|
||||||
@ -934,9 +945,9 @@ impl MergeKind {
|
|||||||
.stake_activating_and_deactivating(clock.epoch, Some(stake_history));
|
.stake_activating_and_deactivating(clock.epoch, Some(stake_history));
|
||||||
|
|
||||||
match (status.effective, status.activating, status.deactivating) {
|
match (status.effective, status.activating, status.deactivating) {
|
||||||
(0, 0, 0) => Ok(Self::Inactive(meta, stake_keyed_account.lamports()?)),
|
(0, 0, 0) => Ok(Self::Inactive(*meta, stake_lamports)),
|
||||||
(0, _, _) => Ok(Self::ActivationEpoch(meta, stake)),
|
(0, _, _) => Ok(Self::ActivationEpoch(*meta, *stake)),
|
||||||
(_, 0, 0) => Ok(Self::FullyActive(meta, stake)),
|
(_, 0, 0) => Ok(Self::FullyActive(*meta, *stake)),
|
||||||
_ => {
|
_ => {
|
||||||
let err = StakeError::MergeTransientStake;
|
let err = StakeError::MergeTransientStake;
|
||||||
ic_msg!(invoke_context, "{}", err);
|
ic_msg!(invoke_context, "{}", err);
|
||||||
@ -944,9 +955,7 @@ impl MergeKind {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StakeState::Initialized(meta) => {
|
StakeState::Initialized(meta) => Ok(Self::Inactive(*meta, stake_lamports)),
|
||||||
Ok(Self::Inactive(meta, stake_keyed_account.lamports()?))
|
|
||||||
}
|
|
||||||
_ => Err(InstructionError::InvalidAccountData),
|
_ => Err(InstructionError::InvalidAccountData),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2830,14 +2839,13 @@ mod tests {
|
|||||||
rent_exempt_reserve,
|
rent_exempt_reserve,
|
||||||
..Meta::auto(&authority_pubkey)
|
..Meta::auto(&authority_pubkey)
|
||||||
};
|
};
|
||||||
let stake_account = AccountSharedData::new_ref_data_with_space(
|
let mut stake_account = AccountSharedData::new_data_with_space(
|
||||||
stake_lamports,
|
stake_lamports,
|
||||||
&StakeState::Uninitialized,
|
&StakeState::Uninitialized,
|
||||||
std::mem::size_of::<StakeState>(),
|
std::mem::size_of::<StakeState>(),
|
||||||
&id(),
|
&id(),
|
||||||
)
|
)
|
||||||
.expect("stake_account");
|
.expect("stake_account");
|
||||||
let stake_keyed_account = KeyedAccount::new(&authority_pubkey, true, &stake_account);
|
|
||||||
let mut clock = Clock::default();
|
let mut clock = Clock::default();
|
||||||
let mut stake_history = StakeHistory::default();
|
let mut stake_history = StakeHistory::default();
|
||||||
|
|
||||||
@ -2845,7 +2853,8 @@ mod tests {
|
|||||||
assert_eq!(
|
assert_eq!(
|
||||||
MergeKind::get_if_mergeable(
|
MergeKind::get_if_mergeable(
|
||||||
&invoke_context,
|
&invoke_context,
|
||||||
&stake_keyed_account,
|
&stake_account.state().unwrap(),
|
||||||
|
stake_account.lamports(),
|
||||||
&clock,
|
&clock,
|
||||||
&stake_history
|
&stake_history
|
||||||
)
|
)
|
||||||
@ -2854,13 +2863,12 @@ mod tests {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// RewardsPool state fails
|
// RewardsPool state fails
|
||||||
stake_keyed_account
|
stake_account.set_state(&StakeState::RewardsPool).unwrap();
|
||||||
.set_state(&StakeState::RewardsPool)
|
|
||||||
.unwrap();
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
MergeKind::get_if_mergeable(
|
MergeKind::get_if_mergeable(
|
||||||
&invoke_context,
|
&invoke_context,
|
||||||
&stake_keyed_account,
|
&stake_account.state().unwrap(),
|
||||||
|
stake_account.lamports(),
|
||||||
&clock,
|
&clock,
|
||||||
&stake_history
|
&stake_history
|
||||||
)
|
)
|
||||||
@ -2869,13 +2877,14 @@ mod tests {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Initialized state succeeds
|
// Initialized state succeeds
|
||||||
stake_keyed_account
|
stake_account
|
||||||
.set_state(&StakeState::Initialized(meta))
|
.set_state(&StakeState::Initialized(meta))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
MergeKind::get_if_mergeable(
|
MergeKind::get_if_mergeable(
|
||||||
&invoke_context,
|
&invoke_context,
|
||||||
&stake_keyed_account,
|
&stake_account.state().unwrap(),
|
||||||
|
stake_account.lamports(),
|
||||||
&clock,
|
&clock,
|
||||||
&stake_history
|
&stake_history
|
||||||
)
|
)
|
||||||
@ -2916,14 +2925,15 @@ mod tests {
|
|||||||
},
|
},
|
||||||
..Stake::default()
|
..Stake::default()
|
||||||
};
|
};
|
||||||
stake_keyed_account
|
stake_account
|
||||||
.set_state(&StakeState::Stake(meta, stake))
|
.set_state(&StakeState::Stake(meta, stake))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
// activation_epoch succeeds
|
// activation_epoch succeeds
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
MergeKind::get_if_mergeable(
|
MergeKind::get_if_mergeable(
|
||||||
&invoke_context,
|
&invoke_context,
|
||||||
&stake_keyed_account,
|
&stake_account.state().unwrap(),
|
||||||
|
stake_account.lamports(),
|
||||||
&clock,
|
&clock,
|
||||||
&stake_history
|
&stake_history
|
||||||
)
|
)
|
||||||
@ -2952,7 +2962,8 @@ mod tests {
|
|||||||
assert_eq!(
|
assert_eq!(
|
||||||
MergeKind::get_if_mergeable(
|
MergeKind::get_if_mergeable(
|
||||||
&invoke_context,
|
&invoke_context,
|
||||||
&stake_keyed_account,
|
&stake_account.state().unwrap(),
|
||||||
|
stake_account.lamports(),
|
||||||
&clock,
|
&clock,
|
||||||
&stake_history
|
&stake_history
|
||||||
)
|
)
|
||||||
@ -2975,7 +2986,8 @@ mod tests {
|
|||||||
assert_eq!(
|
assert_eq!(
|
||||||
MergeKind::get_if_mergeable(
|
MergeKind::get_if_mergeable(
|
||||||
&invoke_context,
|
&invoke_context,
|
||||||
&stake_keyed_account,
|
&stake_account.state().unwrap(),
|
||||||
|
stake_account.lamports(),
|
||||||
&clock,
|
&clock,
|
||||||
&stake_history
|
&stake_history
|
||||||
)
|
)
|
||||||
@ -2998,7 +3010,8 @@ mod tests {
|
|||||||
assert_eq!(
|
assert_eq!(
|
||||||
MergeKind::get_if_mergeable(
|
MergeKind::get_if_mergeable(
|
||||||
&invoke_context,
|
&invoke_context,
|
||||||
&stake_keyed_account,
|
&stake_account.state().unwrap(),
|
||||||
|
stake_account.lamports(),
|
||||||
&clock,
|
&clock,
|
||||||
&stake_history
|
&stake_history
|
||||||
)
|
)
|
||||||
@ -3027,7 +3040,8 @@ mod tests {
|
|||||||
assert_eq!(
|
assert_eq!(
|
||||||
MergeKind::get_if_mergeable(
|
MergeKind::get_if_mergeable(
|
||||||
&invoke_context,
|
&invoke_context,
|
||||||
&stake_keyed_account,
|
&stake_account.state().unwrap(),
|
||||||
|
stake_account.lamports(),
|
||||||
&clock,
|
&clock,
|
||||||
&stake_history
|
&stake_history
|
||||||
)
|
)
|
||||||
@ -3040,7 +3054,8 @@ mod tests {
|
|||||||
assert_eq!(
|
assert_eq!(
|
||||||
MergeKind::get_if_mergeable(
|
MergeKind::get_if_mergeable(
|
||||||
&invoke_context,
|
&invoke_context,
|
||||||
&stake_keyed_account,
|
&stake_account.state().unwrap(),
|
||||||
|
stake_account.lamports(),
|
||||||
&clock,
|
&clock,
|
||||||
&stake_history
|
&stake_history
|
||||||
)
|
)
|
||||||
|
Reference in New Issue
Block a user